原文鏈接:https://www.fmz.com/digest-topic/4009node
大部分策略在實盤以前都須要回測進行驗證,FMZ支持部分品種數字貨幣現貨、期貨和永續合約,以及商品期貨全部品種。但發明者量化平臺的回測機制和常見的onbar回測有所區別,形成了不少新手的困惑。本文將詳細說明並解答一些常見的回測問題。瀏覽器
如上圖所示,回測開始時間到結束時間能夠看成一個時間軸,回測時,回測時間點沿軸從左到右移動開始回測,在這個時間點上,只能獲取到此點以前的歷史數據,策略根據這些數據作出買賣,最終造成盈虧。顯然,回測的時間點的分佈是離散的,分佈的密集程度表明了回測的精度。
固然考慮到回測時間點越密集,所需的時間越長,實際的回測系統須要在精度和效率之間作出取捨。服務器
onbar回測機制是基於K線的,即每個K線產生一個回測時間點,在此時間點上能夠獲取到當前K線的高開低收價格、交易量等信息,以及此時間點以前的歷史K線信息。
這種機制的弊端很明顯:在一根K線上,只能產生一次買賣,一般依據的價格是K線的收盤價。而且一根K線只能獲取到高開低收四個價格,至於在一根K線內價格如何變化的,是最高價先發生、仍是最低價先發生等等信息都無從獲取。以1小時K線爲例,實盤時確定每隔幾秒獲取一次行情信息,交易指令也會在盤中發出而不是等待K線結束。onbar回測機制的好處是易於理解,回測速度極快。網絡
上圖爲FMZ回測設置界面。回測模式分爲兩種模擬級回測和實盤級回測,下面將分別介紹:測試
模擬級回測atom
模擬級回測要選擇回測所使用的K線週期和底層K線週期。好比策略使用小時線回測,底層K線選擇5分鐘,那麼回測時間點的間隔將以5分鐘K線生成的tick爲基礎。具體根據K線生成K線內tick的機制和MT4相似,這個帖子裏有詳細的說明:https://www.fmz.com/bbs-topic/662spa
咱們使用一個簡單的策略來演示一下這個機制,策略代碼:3d
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是模擬的,但影響不大。回測中,只要買單價大於賣一,賣單價小於買一,就會撮合成交。這種回測方式兼顧了回測速度和精度,推薦你們使用。日誌
實盤級回測code
實盤級回測用到了真實的tick,每一個時間點的間隔最短只有1s,這種回測的精度到每一秒的變化,但因爲數據量大,回測速度慢、回測時間也不能很長。下圖爲真實的tick。實盤級回測可用於精確的驗證策略。
即便實盤級回測和實盤仍是有明顯的數據不足,如不能獲取到成交歷史trades、不能獲取到實際的深度變化、真實的網絡延時等等。即便這樣FMZ目前的回測系統也相對完善,還有不少小功能,如模擬網絡錯誤,能夠用於測試策略的容錯能力,模擬網絡延時、繪製行情圖標等。
爲何只支持幾個交易對和交易所能回測?
目前只有幾個常見交易對數據,其實策略和品種關係不是很大,已經足夠驗證策略了。
能模擬BitMEX收取資金費率嗎?
能夠,選取BitMEX回測能夠打開事件記錄。
回測在那裏進行?
JavaScript策略的回測在瀏覽器中進行,Python能夠選擇FMZ的服務器或者本身的託管者。
回測日誌能夠下載嗎?
能夠,日誌右上角有下載按鈕
能本地回測嗎?
FMZ開源了Python回測引擎。參考: https://www.fmz.com/bbs-topic/1687