快速实现一个半自动量化交易工具

2019-11-21  本文已影响0人  发明者量化

在商品期货交易中,跨期合约正套、反套是一种常见的套利方式。这种套利并不是无风险套利,在差价的单边方向持续扩大时,套利持仓是会处于浮亏状态的。不过只要套利仓位控制得当,还是很具有操作性、可行性。本次我们换一种策略类型,不再构建一个全自动的交易策略,而是实现一个可交互的半自动量化交易工具,以便更加方便的在商品期货交易中跨期套利。

开发平台使用发明者量化交易平台,本文重点是如何构建具有交互功能的半自动策略。
跨期套利这个是很简单的概念。

在策略代码中使用函数 GetCommand 函数捕获,上述策略控件触发后发送给机器人的命令。
捕获到命令后,对不同的命令做出不同的处理即可。
交易部分代码可以使用「商品期货交易类库」封装好的函数。首先,使用var q = $.NewTaskQueue()生成交易控制对象 q(声明为全局变量)。

var cmd = GetCommand()
if (cmd) {
    if (cmd == "plusHedge") {
        q.pushTask(exchange, "rb2001", "sell", 1, function(task, ret) {
            Log(task.desc, ret)
            if (ret) {
                q.pushTask(exchange, "rb1910", "buy", 1, 123, function(task, ret) {
                    Log("q", task.desc, ret, task.arg)
                })
            }
        })
    } else if (cmd == "minusHedge") {
        q.pushTask(exchange, "rb2001", "buy", 1, function(task, ret) {
            Log(task.desc, ret)
            if (ret) {
                q.pushTask(exchange, "rb1910", "sell", 1, 123, function(task, ret) {
                    Log("q", task.desc, ret, task.arg)
                })
            }
        })
    } else if (cmd == "coverPlus") {
        q.pushTask(exchange, "rb2001", "closesell", 1, function(task, ret) {
            Log(task.desc, ret)
            if (ret) {
                q.pushTask(exchange, "rb1910", "closebuy", 1, 123, function(task, ret) {
                    Log("q", task.desc, ret, task.arg)
                })
            }
        })
    } else if (cmd == "coverMinus") {
        q.pushTask(exchange, "rb2001", "closebuy", 1, function(task, ret) {
            Log(task.desc, ret)
            if (ret) {
                q.pushTask(exchange, "rb1910", "closesell", 1, 123, function(task, ret) {
                    Log("q", task.desc, ret, task.arg)
                })
            }
        })
    }
}
q.poll()
上一篇下一篇

猜你喜欢

热点阅读