FMZ發明者量化平台回測機制說明


原文連接:https://www.fmz.com/digest-topic/4009

大部分策略在實盤之前都需要回測進行驗證,FMZ支持部分品種數字貨幣現貨、期貨和永續合約,以及商品期貨所有品種。但發明者量化平台的回測機制和常見的onbar回測有所區別,造成了很多新手的困惑。本文將詳細說明並解答一些常見的回測問題。

 

回測系統是如何運作的?

如上圖所示,回測開始時間到結束時間可以當作一個時間軸,回測時,回測時間點沿軸從左到右移動開始回測,在這個時間點上,只能獲取到此點之前的歷史數據,策略根據這些數據做出買賣,最終形成盈虧。顯然,回測的時間點的分布是離散的,分布的密集程度代表了回測的精度。
當然考慮到回測時間點越密集,所需的時間越長,實際的回測系統需要在精度和效率之間做出取舍。

 

傳統onBar回測機制

onbar回測機制是基於K線的,即每一個K線產生一個回測時間點,在此時間點上可以獲取到當前K線的高開低收價格、交易量等信息,以及此時間點之前的歷史K線信息。
這種機制的弊端很明顯:在一根K線上,只能產生一次買賣,通常依據的價格是K線的收盤價。並且一根K線只能獲取到高開低收四個價格,至於在一根K線內價格如何變化的,是最高價先發生、還是最低價先發生等等信息都無從獲取。以1小時K線為例,實盤時肯定每隔幾秒獲取一次行情信息,交易指令也會在盤中發出而不是等待K線結束。onbar回測機制的好處是易於理解,回測速度極快。

 

FMZ發明者量化平台onTick回測機制

上圖為FMZ回測設置界面。回測模式分為兩種模擬級回測和實盤級回測,下面將分別介紹:

模擬級回測

模擬級回測要選擇回測所使用的K線周期和底層K線周期。比如策略使用小時線回測,底層K線選擇5分鍾,那么回測時間點的間隔將以5分鍾K線生成的tick為基礎。具體根據K線生成K線內tick的機制和MT4類似,這個帖子里有詳細的說明:https://www.fmz.com/bbs-topic/662


我們使用一個簡單的策略來演示一下這個機制,策略代碼:

function main() { while(true){ var records = exchange.GetRecords() var ticker = exchange.GetTicker() Log('K線收盤價: ', records[records.length-1].Close, 'ticker買一賣一價: ', ticker.Buy, ticker.Sell) //js回測不用Sleep,會自動跳到下一個tick。Python需要一個小的休眠時間 } } 

回測結果:

每根K線只有開盤和收盤的tick是固定的,中間加上模擬的12個tick,這樣一根K線將會形成14個回測時間點。如果回測一天,共有24×12×14 = 4032 時間點,而傳統的onBar回測只有24個,精度大幅提高。在一個K線周期內也能完成開倉平倉操作。雖然中間生成的tick是模擬的,但影響不大。回測中,只要買單價大於賣一,賣單價小於買一,就會撮合成交。這種回測方式兼顧了回測速度和精度,推薦大家使用。

實盤級回測

實盤級回測用到了真實的tick,每個時間點的間隔最短只有1s,這種回測的精度到每一秒的變化,但由於數據量大,回測速度慢、回測時間也不能很長。下圖為真實的tick。實盤級回測可用於精確的驗證策略。

 

回測和實盤的差距

即使實盤級回測和實盤還是有明顯的數據不足,如不能獲取到成交歷史trades、不能獲取到實際的深度變化、真實的網絡延時等等。即使這樣FMZ目前的回測系統也相對完善,還有很多小功能,如模擬網絡錯誤,可以用於測試策略的容錯能力,模擬網絡延時、繪制行情圖標等。

 

常見問題

為什么只支持幾個交易對和交易所能回測?

目前只有幾個常見交易對數據,其實策略和品種關系不是很大,已經足夠驗證策略了。

能模擬BitMEX收取資金費率嗎?

可以,選取BitMEX回測可以打開事件記錄。

回測在那里進行?

JavaScript策略的回測在瀏覽器中進行,Python可以選擇FMZ的服務器或者自己的托管者。

回測日志可以下載嗎?

可以,日志右上角有下載按鈕

能本地回測嗎?

FMZ開源了Python回測引擎。參考: https://www.fmz.com/bbs-topic/1687


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM