高频量化合约对冲软件开发策略代码教程

2022-11-15 11:36:56 浏览数 (1)

量化交易机器人是一个软件程序,可以根据对市场数据的解释来发布买卖订单。他们通过监控市场上的价格走势,并根据一套事先设置好的规则作出反应来做出这些决策。

在策略设定好之后,机器人智能分配每一次进单条件,严格执行交易策略,交易策略,根据当前行情,实时进行云大数据调整。同时支持百种交易同时执行交易策略,每一个品种立线程,自动管理报价深度,策略计算,实时查看交易情况,实时执行。

策略执行代码参考如下:

代码语言: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: 设置一个参数,控制每个网格点的持仓盈利到多少价差就平仓。

0 人点赞