JavaScript怎么實現(xiàn)商品期貨移倉類庫

這篇文章主要介紹“JavaScript怎么實現(xiàn)商品期貨移倉類庫”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“JavaScript怎么實現(xiàn)商品期貨移倉類庫”文章能幫助大家解決問題。

10年積累的網(wǎng)站建設(shè)、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有文登免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

設(shè)計實現(xiàn)

編寫商品期貨策略的時候,經(jīng)常有移倉的需求。那么如何實現(xiàn)這樣的操作呢?在商品期貨多品種主力自動移倉海龜交易策略中我們看到了相關(guān)移倉操作的實現(xiàn)。借鑒策略中的移倉機(jī)制,我們設(shè)計一個「商品期貨移倉類庫」。

移倉操作其實并不復(fù)雜,只是在需要移倉的時候,把當(dāng)前倉位平掉再到需要移動到的合約開出新倉位即可。具體設(shè)計出兩種使用場景。

  • A合約 -> B合約
    待策略中編寫的條件觸發(fā),執(zhí)行一次A合約到B合約的移倉操作。
    例如一次按鈕交互操作觸發(fā):

    var q = $.NewTaskQueue()                        // 生成用于具體下單操作的對象,源自商品期貨交易類庫var t = $.NewTransfer(exchange, q, $.IsTrading) // 生成處理移倉操作的對象...var cmd = GetCommand() // 獲取交互命令if(cmd) {              // 接收到任何交互命令t.process("rb2010", "rb2101")  // 執(zhí)行移倉}...

  • 切換主力合約
    檢測系統(tǒng)中主力合約變更,進(jìn)行當(dāng)前舊主力合約到新主力合約的移倉操作。

該模板類庫不設(shè)計參數(shù)。

// 導(dǎo)出函數(shù)(接口)$.NewTransfer = function (e, taskQueue, IsTrading) {var self = {}self.currSymbol = ""self.e = eself.q = taskQueueself.IsTrading = IsTradingself.arrAction = []    self.process = function(symbolA, symbolB) {if((typeof(symbolB) == "undefined" && !self.IsTrading(symbolA)) || (typeof(symbolB) != "undefined" && !self.IsTrading(symbolA) && !self.IsTrading(symbolB))) {return 
        }        self.arrAction = []// 檢測參數(shù)是否有symbolB , 沒有即為檢測主力合約 , 有則為移倉具體合約if(typeof(symbolB) == "undefined") {// 檢測symbolA合約是否為XX888 或者 XX000if(symbolA.indexOf("888") == -1 && symbolA.indexOf("000") == -1) {throw "缺少symbolB參數(shù)!"}// 檢測是否觸發(fā)移倉var insDetail = nullif(self.currSymbol == "") {insDetail = _C(self.e.SetContractType, symbolA)self.currSymbol = insDetail.InstrumentID}insDetail = _C(self.e.SetContractType, symbolA)if(self.currSymbol != insDetail.InstrumentID) {var oldSymbol = self.currSymbolvar pos = self.q.GetPosition(self.e, oldSymbol)if(pos && pos.Amount > 0) {// 移倉self.arrAction = [oldSymbol, insDetail.InstrumentID, pos]Log("開始移倉:", self.arrAction[0], "->", self.arrAction[1], self.arrAction, "#FF0000")
                } else {self.currSymbol = insDetail.InstrumentID}
            }
        } else {// 檢測是否有symbolA持倉var pos = self.q.GetPosition(self.e, symbolA)if(pos && pos.Amount > 0) {// 移倉self.arrAction = [symbolA, symbolB, pos]Log("開始移倉:", self.arrAction[0], "->", self.arrAction[1], self.arrAction, "#FF0000")
            } else {Log("沒有檢測到", symbolA, "的倉位,pos:", pos, "#FF0000")
            }
        }if(self.arrAction.length == 3) {self.q.pushTask(self.e, self.arrAction[0], (self.arrAction[2].Type == PD_LONG || self.arrAction[2].Type == PD_LONG_YD ? "closebuy" : "closesell"), self.arrAction[2].Amount, function(task, ret){if(!ret) {Log(self.arrAction[0], "移倉平倉失?。?quot;, self.arrAction[0], "->", self.arrAction[1], "#FF0000")return 
                }Log("移倉進(jìn)度平倉成功,開始開倉!", self.arrAction[1], "數(shù)量:", self.arrAction[2].Amount, "#FF0000")self.q.pushTask(self.e, self.arrAction[1], (self.arrAction[2].Type == PD_LONG || self.arrAction[2].Type == PD_LONG_YD ? "buy" : "sell"), self.arrAction[2].Amount, function(task, ret){if(!ret) {Log(self.arrAction[1], "移倉開倉失敗!", self.arrAction[0], "->", self.arrAction[1], "#FF0000")return 
                    }Log("移倉成功!", self.arrAction[0], "->", self.arrAction[1], "#FF0000")
                })
            })
        }while(self.q.size() > 0) {self.q.poll()Sleep(500)
        }
    }return self}// 測試函數(shù),在主策略中執(zhí)行function main() {var q = $.NewTaskQueue()var t = $.NewTransfer(exchange, q, $.IsTrading)var isTransfer = falsevar isFirst = truevar n = 0while(true) {if(exchange.IO("status")) {LogStatus(_D(), "已經(jīng)連接!")if(isFirst) {isFirst = false exchange.SetContractType("rb1905")exchange.SetDirection("buy")var ticker = exchange.GetTicker()exchange.Buy(ticker.Last + 10, 1)Log(exchange.GetPosition())
            }            // 檢測主力合約移倉t.process("rb888")            // 模擬觸發(fā)一次/*            if(n == 20) {                t.process("rb1905", "rb1910")               }            */// 檢測條件觸發(fā)移倉/*            var cmd = GetCommand()            if(cmd) {                isTransfer = true            }            if(isTransfer) {                t.process("rb2010", "rb2101")                isTransfer = false            }            */} else {LogStatus(_D(), "未連接!")
        }n++Sleep(1000)
    }
}

該模板類庫中的main函數(shù)即為在主策略中的測試代碼,例如下圖:

JavaScript怎么實現(xiàn)商品期貨移倉類庫

回測測試

JavaScript怎么實現(xiàn)商品期貨移倉類庫

測試代碼在開始時,開出一個倉位,隨后使用主力合約檢測的方式移倉。

或者使用具體條件觸發(fā)一次移倉,進(jìn)行測試。

JavaScript怎么實現(xiàn)商品期貨移倉類庫

只進(jìn)行一次具體的移倉操作。

JavaScript怎么實現(xiàn)商品期貨移倉類庫

關(guān)于“JavaScript怎么實現(xiàn)商品期貨移倉類庫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

網(wǎng)站標(biāo)題:JavaScript怎么實現(xiàn)商品期貨移倉類庫
文章位置:http://muchs.cn/article22/ghjijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計、App設(shè)計網(wǎng)站改版、商城網(wǎng)站ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作