量化交易机器人是一个软件程序,可以根据对市场数据的解释来发布买卖订单。他们通过监控市场上的价格走势,并根据一套事先设置好的规则作出反应来做出这些决策。
在策略设定好之后,机器人智能分配每一次进单条件,严格执行交易策略,交易策略,根据当前行情,实时进行云大数据调整。同时支持百种交易同时执行交易策略,每一个品种立线程,自动管理报价深度,策略计算,实时查看交易情况,实时执行。
策略执行代码参考如下:
代码语言:javascript复制/*backtest
start: 2021-06-01 00:00:00
end: 2022-05-23 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
args: [["v_input_float_1",500],["v_input_string_1",2],["v_input_float_2",0.01],["v_input_int_1",20],["v_input_int_2",500],["RunMode",1,358374],["MinStock",0.001,358374]]
*/
strategy(overlay=true)
varip beginPrice = 0
var spacing = input.float(-1, title="间距价格")
var dir = input.string("long", title="方向", options = ["long", "short", "both"])
var amount = input.float(-1, title="下单量")
var numbers = input.int(-1, title="网格数量")
var profit = input.int(-1, title="盈利价差") / syminfo.mintick
if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
runtime.error("参数错误")
if not barstate.ishistory and beginPrice == 0
beginPrice := close
findTradeId(id) =>
ret = "notFound"
for i = 0 to strategy.opentrades - 1
if strategy.opentrades.entry_id(i) == id
ret := strategy.opentrades.entry_id(i)
ret
// 实时K线阶段
if not barstate.ishistory
// 检索网格
for i = 1 to numbers
// 做多
direction = dir == "both" ? "long" : dir
plot(beginPrice-i*spacing, direction str.tostring(i), color.green)
if direction == "long" and beginPrice-i*spacing > 0 and beginPrice-i*spacing < close and findTradeId(direction str.tostring(i)) == "notFound"
strategy.order(direction str.tostring(i), strategy.long, qty=amount, limit=beginPrice-i*spacing)
strategy.exit("exit-" direction str.tostring(i), direction str.tostring(i), qty_percent=100, profit=profit)
// 做空
direction := dir == "both" ? "short" : dir
plot(beginPrice i*spacing, direction str.tostring(i), color.red)
if direction == "short" and beginPrice i*spacing > close and findTradeId(direction str.tostring(i)) == "notFound"
strategy.order(direction str.tostring(i), strategy.short, qty=amount, limit=beginPrice i*spacing)
strategy.exit("exit-" direction str.tostring(i), direction str.tostring(i), qty_percent=100, profit=profit)
接下来的代码:
代码语言:javascript复制strategy(overlay=true)
varip beginPrice = 0
var spacing = input.float(-1, title="间距价格")
var dir = input.string("long", title="方向", options = ["long", "short", "both"])
var amount = input.float(-1, title="下单量")
var numbers = input.int(-1, title="网格数量")
var profit = input.int(-1, title="盈利点数") / syminfo.mintick
strategy(overlay=true): 用来设置脚本的一些选项,overlay=true,就是给参数overlay赋值true,让画图时,画在图表的主图上(K线图就是主图,可以这么简单理解)。
varip beginPrice = 0: 用关键字varip声明了一个变量beginPrice初始赋值为0,这个值是用作网格的初始价格。
var spacing = input.float(-1, title="间距价格"): 设置一个策略参数,参数名字叫“间距价格”,就是每个网格点的间距,设置100就是价格每过100,交易一次。
var dir = input.string("long", title="方向", options = ["long", "short", "both"]): 设置了一个策略参数,名字叫“方向”,这个参数是一个带下拉框的选项,可以选择long,short,both。分别表示网格只做多、只做空、多空都做。
var amount = input.float(-1, title="下单量"): 设置一个参数,用来控制每次网格点交易时的交易量。
var numbers = input.int(-1, title="网格数量"): 网格点的数量,设置20就是一个方向20个网格点。
var profit = input.int(-1, title="盈利价差") / syminfo.mintick: 设置一个参数,控制每个网格点的持仓盈利到多少价差就平仓。