温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Go语言怎么快速实现一个半自动量化交易工具

发布时间:2022-03-25 16:54:52 来源:亿速云 阅读:1138 作者:iii 栏目:互联网科技

本文小编为大家详细介绍“Go语言怎么快速实现一个半自动量化交易工具”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言怎么快速实现一个半自动量化交易工具”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

  • 跨期套利的概念

跨期套利正是通过观察期货各合约价差的波动,以赚取差价为目的,在同一期货品种的不同合约月份建立数量相等、方向相反的交易部位,并以对冲或交割方式结束交易的一种操作方式。正向市场时,价差为负,表现为远月升水,反向市场时,价差为正,表现为近月升水。一般来说,价差(绝对值)由持有成本(或持仓费)构成,即指为拥有或保留某种仓单或头寸而支付的仓储费、保险费和利息等费用。

  • 策略设计

    策略框架如下代码:

    function main(){
        while(true){
            if(exchange.IO("status")){                 // 判断CTP协议连接状态。
                LogStatus(_D(), "已经连接CTP !")        // 开市时间,登录连接正常。
            } else {
                LogStatus(_D(), "未连接CTP !")          // 未登录到交易前置机。
            }
        }
    }


    如果CTP协议连接正常后,接下来我们就是需要设置合约,然后获取行情。获取行情后,我们可以使用发明者量化交易平台封装好的「画线类库」画图,画出差价。

    function main(){
        while(true){
            if(exchange.IO("status")){                 // 判断CTP协议连接状态。
                exchange.SetContractType("rb2001")     // 设置远月合约
                var tickerA = exchange.GetTicker()     // 远月合约行情数据
                
                exchange.SetContractType("rb1910")     // 设置近月合约
                var tickerB = exchange.GetTicker()     // 近月合约行情数据
                
                var diff = tickerA.Last - tickerB.Last 
                $.PlotLine("diff", diff)  
    
                LogStatus(_D(), "已经连接CTP !")        // 开市时间,登录连接正常。
            } else {
                LogStatus(_D(), "未连接CTP !")          // 未登录到交易前置机。
            }
        }
    }


    拿到了行情数据,计算差价,并且画图记录,让其简单反映出近期差价的波动状态。
    使用「画线类库」的函数 $.PlotLine

    Go语言怎么快速实现一个半自动量化交易工具

  • 交互部分

    在策略编辑页面可以直接给策略增加交互控件:
    Go语言怎么快速实现一个半自动量化交易工具

    在策略代码中使用函数 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()

读到这里,这篇“Go语言怎么快速实现一个半自动量化交易工具”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI