本篇內(nèi)容主要講解“如何移植一個(gè)my語言策略”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何移植一個(gè)my語言策略”吧!
創(chuàng)新互聯(lián)建站長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為平潭企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,平潭網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
對于趨勢策略移植來說是非常簡單的,我們可以使用一段范例代碼,填充驅(qū)動(dòng)策略的數(shù)據(jù)計(jì)算部分代碼,填充交易信號(hào)觸發(fā)條件即可。
可復(fù)用的范例代碼:
以用于OKEX期貨的策略為例。
// 全局變量 var IDLE = 0 var LONG = 1 var SHORT = 2 var OPENLONG = 3 var OPENSHORT = 4 var COVERLONG = 5 var COVERSHORT = 6 var BREAK = 9 var SHOCK = 10 var _State = IDLE var Amount = 0 // 記錄持倉數(shù)量 var TradeInterval = 500 // 輪詢間隔 var PriceTick = 1 // 價(jià)格一跳 var Symbol = "this_week" function OnTick(){ // 驅(qū)動(dòng)策略的行情處理部分 // 待填充... // 交易信號(hào)觸發(fā)處理部分 // 待填充... // 執(zhí)行交易邏輯 var pos = null var price = null var currBar = records[records.length - 1] if(_State == OPENLONG){ pos = GetPosition(PD_LONG) // 判斷是不是 滿足狀態(tài),如果滿足 修改狀態(tài) if(pos[1] >= Amount){ _State = LONG Amount = pos[1] // 更新實(shí)際量 return } price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2 Trade(OPENLONG, price, Amount - pos[1], pos, PriceTick) // (Type, Price, Amount, CurrPos, PriceTick) } if(_State == OPENSHORT){ pos = GetPosition(PD_SHORT) if(pos[1] >= Amount){ _State = SHORT Amount = pos[1] // 更新實(shí)際量 return } price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2 Trade(OPENSHORT, price, Amount - pos[1], pos, PriceTick) } if(_State == COVERLONG){ pos = GetPosition(PD_LONG) if(pos[1] == 0){ _State = IDLE return } price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2 Trade(COVERLONG, price, pos[1], pos, PriceTick) } if(_State == COVERSHORT){ pos = GetPosition(PD_SHORT) if(pos[1] == 0){ _State = IDLE return } price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2 Trade(COVERSHORT, price, pos[1], pos, PriceTick) } } // 交易邏輯部分 function GetPosition(posType) { var positions = _C(exchange.GetPosition) var count = 0 for(var j = 0; j < positions.length; j++){ if(positions[j].ContractType == Symbol){ count++ } } if(count > 1){ throw "positions error:" + JSON.stringify(positions) } for (var i = 0; i < positions.length; i++) { if (positions[i].ContractType == Symbol && positions[i].Type === posType) { return [positions[i].Price, positions[i].Amount]; } } Sleep(TradeInterval); return [0, 0]; } function CancelPendingOrders() { while (true) { var orders = _C(exchange.GetOrders) for (var i = 0; i < orders.length; i++) { exchange.CancelOrder(orders[i].Id); Sleep(TradeInterval); } if (orders.length === 0) { break; } } } function Trade(Type, Price, Amount, CurrPos, OnePriceTick){ // 處理交易 if(Type == OPENLONG || Type == OPENSHORT){ // 處理開倉 exchange.SetDirection(Type == OPENLONG ? "buy" : "sell") var pfnOpen = Type == OPENLONG ? exchange.Buy : exchange.Sell var idOpen = pfnOpen(Price, Amount, CurrPos, OnePriceTick, Type) Sleep(TradeInterval) if(idOpen) { exchange.CancelOrder(idOpen) } else { CancelPendingOrders() } } else if(Type == COVERLONG || Type == COVERSHORT){ // 處理平倉 exchange.SetDirection(Type == COVERLONG ? "closebuy" : "closesell") var pfnCover = Type == COVERLONG ? exchange.Sell : exchange.Buy var idCover = pfnCover(Price, Amount, CurrPos, OnePriceTick, Type) Sleep(TradeInterval) if(idCover){ exchange.CancelOrder(idCover) } else { CancelPendingOrders() } } else { throw "Type error:" + Type } } function main() { // 設(shè)置合約 exchange.SetContractType(Symbol) while(1){ OnTick() Sleep(1000) } }
舉例:雙均線策略的移植
麥語言回測:
麥語言策略代碼:
MA5^^MA(C,5); MA15^^MA(C,15); CROSSUP(MA5,MA15),BPK; CROSSDOWN(MA5,MA15),SPK;
移植為JavaScript策略
首先給可復(fù)用的范例代碼填充上行情獲取、指標(biāo)計(jì)算部分:
// 驅(qū)動(dòng)策略的行情處理部分 var records = _C(exchange.GetRecords) if (records.length < 15) { return } var ma5 = TA.MA(records, 5) var ma15 = TA.MA(records, 15) var ma5_pre = ma5[ma5.length - 3] var ma15_pre = ma15[ma15.length - 3] var ma5_curr = ma5[ma5.length - 2] var ma15_curr = ma15[ma15.length - 2]
可以看到,雙均線策略非常簡單,只是首先獲取K線數(shù)據(jù)records
,然后使用TA函數(shù)庫
的均線函數(shù)TA.MA
計(jì)算出5日均線、15日均線(回測界面上可以看到,K線周期設(shè)置的是日K線,所以TA.MA(records, 5)
計(jì)算出的就是5日均線,TA.MA(records, 15)
15日均線)。
然后獲取ma5
指標(biāo)數(shù)據(jù)的倒數(shù)第二個(gè)點(diǎn)ma5_curr
(指標(biāo)值),倒數(shù)第三個(gè)點(diǎn)ma5_pre
(指標(biāo)值),ma15
指標(biāo)數(shù)據(jù)同理。然后就可以使用這些指標(biāo)數(shù)據(jù)去判斷金叉死叉了,如圖:
只要形成這樣的狀態(tài),即為確定的金叉死叉。
那么判斷信號(hào)的部分就可以寫成:
if(_State == IDLE && ma5_pre < ma15_pre && ma5_curr > ma15_curr){ _State = OPENLONG Amount = 1 } if(_State == IDLE && ma5_pre > ma15_pre && ma5_curr < ma15_curr){ _State = OPENSHORT Amount = 1 } if(_State == LONG && ma5_pre > ma15_pre && ma5_curr < ma15_curr){ _State = COVERLONG Amount = 1 } if(_State == SHORT && ma5_pre < ma15_pre && ma5_curr > ma15_curr){ _State = COVERSHORT Amount = 1 }
這樣就移植OK了,可以回測試下:
可以看到回測結(jié)果基本一樣,這樣如果希望對于策略繼續(xù)增加交互功能、增加數(shù)據(jù)處理(例如K線合成)、增加自定義的圖表畫圖顯示就可以實(shí)現(xiàn)了。
JavaScript策略的回測
回測配置:
回測結(jié)果:
my語言的回測
到此,相信大家對“如何移植一個(gè)my語言策略”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前標(biāo)題:如何移植一個(gè)my語言策略
鏈接URL:http://bm7419.com/article12/iiosgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)