如何使用MT5做股市期貨歷史回測的方法

 

應版主 @Sky All 的邀請,協力開發股市的交易策略測試.經過一段時間的摸索及測試,總算將日本股市的日線歷史數據導入到MT5並且可以做歷史回測

jptest

另外也利用同樣的方式將大陸部分股市也順利做進了MT5做歷史回測

CNTest

發佈在論壇上分享 順道也記錄一下整個工作流程 以方便日後我自己複習

能夠完成工作除了感謝版主 @Sky All 提供相關信息外 也非常感謝日本的一位大師 Nagisa Unada  無償的提供非常有用的技術信息

有興趣的可以跟一下帖 日後我會逐一的將工作內容發布在這個帖裡面

 

再建立數據前 需要先把交易品種先建立好

SymbolCreat

如圖所示 再報價欄上點擊右鍵 選擇交易品種的選項進入

Symbol

選擇左方Custom路徑後 點擊下方"創建自訂交易品種" (強力建議新增在Custom路徑底下 方便日後管理)

SymbolFrom1

SymbolFrom2

SymbolFrom3

進入創建格式後 上圖標註的黃色部分需要填寫完成 填寫有誤的話可能後續做回測時會有誤差

1/. Symbol 填入股票編號 這部分也可以填入股票名稱 為了日後的EA編寫 我用的是編號 EA運行時使用此欄辨識品種

2/. Description 填入股票名稱

以上兩欄在標準外匯的標示 歐美貨幣對為 Symbol = EURUSD , Description = Euro VS US Dollar

所以按上圖的輸入方式可以在報價表上看到 300750 寧德時代 

SymbolFrom4 

3/. Group Path 填入路徑 完善的路徑分類可以方便日後整理用 按照圖是輸入可以得到下圖的分類方式

SymbolFrom5

 

承上一篇

4/. Digit 填入品種報價的小數位 這部分應當為0 但是填了小數位並不會影響運行

5/. Base Currency, Profit Currency, Margin Currency 分別填入交易帳戶所使用的幣別 我用的是美金帳戶 所以填的都是USD 這部分填錯的話回測就無法進行

6/. Contract Size 填入交易一次的數量 外匯交易每手是100000 台股每次交割是1000股 日股是100股 陸股我記得是可以零股交易 所以設定為1 這部分如果錯誤的話可以在交易的時候放大單量

7/. Calculation 這部分很重要 選錯了回測交易時可能不扣除交易時發生的費用 還有盈虧的計算也會有誤差 這部分選用Exchange MOEX Stocks (交易所股票(MOEX))

8/. Minimal Volume 設定單次最小交易單量 我設置為1

9/. Maximal Volume 設定單次最大交易單量  我設置為100000

10/. Volume Step 設定交易單的單位  我設置為1

根據以上三個單量的設置 我的交易最小單量為1 交易時可以1 2 3.....~100000 來做交易 不做零單交易 這設置可以根據實際情況做調整

大部分的外匯 Minimal Volume=0.01 Maximal Volume=200 Volume Step=0.01 也就是說可以0.01 0.02 .......199.99 200的方式下單

黃金有的平台設定 Minimal Volume=0.1 Maximal Volume=100 Volume Step=0.1  也就是說可以0.1 0.2 .......99.9 100的方式下單 不能以0.01 或是 0.11的方式下單

11/. Initial Margin 設定為0時會依照 Exchange MOEX Stocks的規則計算交易時保留的費用 不設為0交易時則以設定的值作為保證金

12/. Maintenance Margin 同上述的原理

後面的部分 Margin Rate是根據交易時發生保證金的比例 Market Buy, Market Sell 指交易成功時按1:1來扣除保證金費用 其他的掛單沒成交應該不會扣除費用所以設定都為0

剩下的交易時間跟報價時間可以按照需要繼續填入 因為我用的是日線級別的數據 所以這部分我選的是全天候


以上就是手動建立品種需要知道的信息   後面有機會我會介紹利用如何利用腳本快速建立品種的方式

 

品種設定好了 接下來就是要把歷史數據做導入的工作了

首先 我們要找到導入的方法

原本以為最簡單的方法就是根據MQL提供的工作路徑反著做 應該行得通

1/. 同樣進入交易品種欄位(Ctrl+U) 選擇Bars欄位 並且 選擇好計畫導出數據的品種

Symbol

2/. 為了可以快速測試方法 所以 1.選用日線做導出 2.選用的日期 在2021.01.01到目前時間  3.條件選擇好後按下 Request 將儲存的歷史數據呼出

     5. 呼出歷史數據後按下Export Bars 將歷史數據導出存檔

(如果沒有數據 應該就是該品種的K線尚未建立 最簡單的方法就是在報價表上加載該品種的K線 並縮小圖示 讓計畫加載的時間區段出現K線在報價表上

Symbol2

3/. 將導出後的檔案使用Excel開啟 可以順利得到下述的數據

Symbol3

4/. 根據上一次介紹的方法 簡單建立另一個品種 試著將剛剛導出的數據試著反向導入 測試正確的導入方式

下圖建立一個EURUSDm用來做數據導入

Symbol5

5/. 同樣 在商品列表中點選Bars欄位 選好新建立的品種 選擇導入的時間型態(這部分可以任選 但是建議選擇導入數據的類型 日後有機會再另作說明) 點選好按下下方Import Bars按鍵

Symbol6

6/. 按下Browse選擇剛剛導出了數據用來做數據導入

Symbol7

結果發現 使用MQL導出的數據檔竟然不能原路導入 

上面的過程雖然是錯誤的方法 應該是MetaQuote公司一個不經意的敗筆 在不經過處理是不能直接使用的 但是也讓我更深入地去研究數據的結構


正確的導入數據結構應該為下述圖示 增加時間列並將數據做好分隔好之後就能順利導入 時間列可以方便我們根據不同時間類別的數據去做分別

Symbol8


經過調整後的數據在做導入就可以順利的將歷史數據導進去

Symbol9


找到正確的導入方式後 現在就要找到需要的歷史數據 做好數據整理就可以順利的歷史導入

在下一次將詳細說明數據格式 跟如何找尋需要的數據來源

 

这个帖子整理得太好了。

可以帮助到很多人。

 

了解新品種的創建跟數據的導出導入後 接下來就要找到數據源

當然可以找到越詳細的數據源越好 最好是分鐘線的數據 可惜這不容易找到

因為是做股票 我認為還是要以中長期為主 所以介紹雅虎的網站可以下載到日線級別的歷史數據

首先進入到下述網站 https://finance.yahoo.com/lookup

在搜尋欄中輸入要找的股票(商品)代號

History0


點擊Historical Dates進入到下載畫面

History1 


1.選擇好日期範圍(不要選超出範圍德時間) 2.點選1D呼出日線(5D為五日線..) 3. 點擊Apply呼出 4. 列出清單後點擊Download開始下載數據

History3

如此就完成了300750股號的歷史檔案下載 每個人使用的瀏覽器不一樣存檔的位置不同這裡就不詳細說明


開啟檔案後可以發現跟MQL需要的格式不一樣(前一篇已經說過 不明白的可以倒車再看一下)

History4


少了時間列 多了調整後價格 所以我們還是需要將它改成我們需要的格式

插入一列時間列 並且刪除AdjustClose

History5


使用替換工具修改日期格式 並填入時間

History6 


替換好存檔 並用筆記本開啟檔案 是不是合乎格式

History7


黃色標註是我故意做的錯誤格式 用來告訴各位 不同來源的數據源可能會有格式錯誤 需要修改 所以在製作好歷史數據後一定要用記事本工具檢查是否有問題 

History8


接下來就可以用上一個步驟介紹的方法選擇對應的股號 將數據做導入動作

可以根據日後EA的需求勾選Tick Volumes將最後一欄設定成Tick Volume或是Volume

History9


正確的數據導入後會如下圖 欄位如果出現紅色 表示數據錯誤 通常是時間或是日期格式錯誤

History10


接下來就可以調出該品種的K線圖 (因為沒有報價數據進來 所以左方的報價並不會閃動)

History11


最後使用MT5自帶的EA來做測試 確定這次的工作確定沒問題

History13


確認交易時會扣除成交時的費用 (正常回測運行會出現K線圖 我的電腦計算較慢 所以圖時來不及計算出)

History14


最終回測的結果 數據品質一定不好 因為一日只有一根K線的數據 品質一定不行 但是如果是日線級別的交易 只限定在開盤或收盤時進行進出場 那就可以參考了

History15

History16


以上 就是根據手動的方式 設定品種 數據的導入導出 還有測試 動手能力強的可以自己試試 希望能幫助股市交易的匯友 能夠利用MT5來驗證自己的股市交易策略

後面我會找時間繼續介紹批量工作時如何進行

 
Good job!
 
支持一下,赞!
 

因为个人在2017年也设计过 mt4/mt5 借用 ea 架构来看盘 A股港股美股的设计,mt4 是走自己定义图表的方式,mt5 是和楼主一样用 mt5 custom symbol 的模式,只是改为 ea 自动联网行情数据导入,这样开市时才能自动刷新k线,只是产品是用来卖钱的,不好在这里多说。


但其实如果目的是要复盘 A股,是可以不用这么辛苦在 mt5 上搞 CustomSymbol 和 A股复盘。。。


只是在 MetaQuotes 这里的论坛说这个不知道是否会不合适,呵呵。。。有个看盘软件 TradingView 哪里有名国家的股票行情数据都有,也包含 A股,日线分钟线也还都很长,只是复盘的策略需要用他们的 pine script 来写,复盘 A股,用免费会员账号还是可以达成的,

如果策略不复杂,转写还是很快的。也写过几篇关于这些的博文,如果有兴趣可以百度 "sina boolapi"。


版主,如果有发言不合适的地方,请见谅,只是分享多一些方式,让有 A股复盘策略需求的交易朋友知道。

 
干的不错,支持一下。
 
ambercrystal #:

因为个人在2017年也设计过 mt4/mt5 借用 ea 架构来看盘 A股港股美股的设计,mt4 是走自己定义图表的方式,mt5 是和楼主一样用 mt5 custom symbol 的模式,只是改为 ea 自动联网行情数据导入,这样开市时才能自动刷新k线,只是产品是用来卖钱的,不好在这里多说。


但其实如果目的是要复盘 A股,是可以不用这么辛苦在 mt5 上搞 CustomSymbol 和 A股复盘。。。


只是在 MetaQuotes 这里的论坛说这个不知道是否会不合适,呵呵。。。有个看盘软件 TradingView 哪里有名国家的股票行情数据都有,也包含 A股,日线分钟线也还都很长,只是复盘的策略需要用他们的 pine script 来写,复盘 A股,用免费会员账号还是可以达成的,

如果策略不复杂,转写还是很快的。也写过几篇关于这些的博文,如果有兴趣可以百度 "sina boolapi"。


版主,如果有发言不合适的地方,请见谅,只是分享多一些方式,让有 A股复盘策略需求的交易朋友知道。

多谢分享