溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具

發(fā)布時(shí)間:2022-03-25 16:54:52 來(lái)源:億速云 閱讀:1135 作者:iii 欄目:互聯(lián)網(wǎng)科技

本文小編為大家詳細(xì)介紹“Go語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Go語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

  • 跨期套利的概念

跨期套利正是通過(guò)觀察期貨各合約價(jià)差的波動(dòng),以賺取差價(jià)為目的,在同一期貨品種的不同合約月份建立數(shù)量相等、方向相反的交易部位,并以對(duì)沖或交割方式結(jié)束交易的一種操作方式。正向市場(chǎng)時(shí),價(jià)差為負(fù),表現(xiàn)為遠(yuǎn)月升水,反向市場(chǎng)時(shí),價(jià)差為正,表現(xiàn)為近月升水。一般來(lái)說(shuō),價(jià)差(絕對(duì)值)由持有成本(或持倉(cāng)費(fèi))構(gòu)成,即指為擁有或保留某種倉(cāng)單或頭寸而支付的倉(cāng)儲(chǔ)費(fèi)、保險(xiǎn)費(fèi)和利息等費(fèi)用。

  • 策略設(shè)計(jì)

    策略框架如下代碼:

    function main(){
        while(true){
            if(exchange.IO("status")){                 // 判斷CTP協(xié)議連接狀態(tài)。
                LogStatus(_D(), "已經(jīng)連接CTP !")        // 開(kāi)市時(shí)間,登錄連接正常。
            } else {
                LogStatus(_D(), "未連接CTP !")          // 未登錄到交易前置機(jī)。
            }
        }
    }


    如果CTP協(xié)議連接正常后,接下來(lái)我們就是需要設(shè)置合約,然后獲取行情。獲取行情后,我們可以使用發(fā)明者量化交易平臺(tái)封裝好的「畫(huà)線類(lèi)庫(kù)」畫(huà)圖,畫(huà)出差價(jià)。

    function main(){
        while(true){
            if(exchange.IO("status")){                 // 判斷CTP協(xié)議連接狀態(tài)。
                exchange.SetContractType("rb2001")     // 設(shè)置遠(yuǎn)月合約
                var tickerA = exchange.GetTicker()     // 遠(yuǎn)月合約行情數(shù)據(jù)
                
                exchange.SetContractType("rb1910")     // 設(shè)置近月合約
                var tickerB = exchange.GetTicker()     // 近月合約行情數(shù)據(jù)
                
                var diff = tickerA.Last - tickerB.Last 
                $.PlotLine("diff", diff)  
    
                LogStatus(_D(), "已經(jīng)連接CTP !")        // 開(kāi)市時(shí)間,登錄連接正常。
            } else {
                LogStatus(_D(), "未連接CTP !")          // 未登錄到交易前置機(jī)。
            }
        }
    }


    拿到了行情數(shù)據(jù),計(jì)算差價(jià),并且畫(huà)圖記錄,讓其簡(jiǎn)單反映出近期差價(jià)的波動(dòng)狀態(tài)。
    使用「畫(huà)線類(lèi)庫(kù)」的函數(shù) $.PlotLine

    Go語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具

  • 交互部分

    在策略編輯頁(yè)面可以直接給策略增加交互控件:
    Go語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具

    在策略代碼中使用函數(shù) GetCommand 函數(shù)捕獲,上述策略控件觸發(fā)后發(fā)送給機(jī)器人的命令。
    捕獲到命令后,對(duì)不同的命令做出不同的處理即可。
    交易部分代碼可以使用「商品期貨交易類(lèi)庫(kù)」封裝好的函數(shù)。首先,使用var q = $.NewTaskQueue()生成交易控制對(duì)象 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語(yǔ)言怎么快速實(shí)現(xiàn)一個(gè)半自動(dòng)量化交易工具”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI