MetaTrader 4交易終端的策略測試器允許您測試EA在歷史數據上的表現。
在測試交易機器人時,需要考慮策略測試儀的程序測試和優化特性:
策略測試器中的功能限制
客戶端策略測試儀的部分功能存在操作限制。調用該函數會導致錯誤4059(測試模式下不允許使用該函數)。
Sleep() 函數
在策略測試器中不會導致任何延遲
Print() 和 PrintFormat() 函數
為了提高性能,在優化交易機器人的參數時不執行Print()和PrintFormat()函數。例外情況是在初始化處理程序OnInit()中使用這些函數。這允許您在錯誤發生時很容易地找到原因。
Alert(), MessageBox(), PlaySound(), SendFTP, SendMail(), SendNotification(), WebRequest() 函數
用于與“外部世界”交互的設計不會在策略測試器中執行。
OrderSend(), OrderModify(), OrderDelete(), OrderClose(), OrderCloseBy() 函數
交易操作不是在與測試符號不同的符號上進行的。
客戶機終端的全局變量
由于測試人員是客戶端終端的一部分,所以他們共享公共的全局變量。因此,它們的名稱不應該與工作應用程序的全局變量的名稱重疊。這可能導致程序操作錯誤和測試結果不準確。
在策略測試器中模擬時間
測試時,根據歷史數據模擬時間。TimeLocal()本地時間總是等于TimeCurrent()服務器時間。反過來,服務器時間總是等于GMT - TimeGMT()對應的時間。這樣,所有這些函數在測試期間都可以同時顯示。
在測試器中故意提供GMT、本地時間和服務器時間之間的差異,以防與服務器的連接丟失。無論是否有連接,測試結果應該總是相同的。關于服務器時間的信息沒有存儲在本地中, 而從服務器獲取。
測試中的圖形物件
在可視化過程中,EA與真實的圖表交互。如果沒有可視化,EA將使用一個不顯示的“虛擬”圖表。前一種情況有其特殊性。在優化過程中,不支持使用圖形物件。
測試人員中的事件處理
在Strategy Tester中處理以下事件:在一次OnInit()運行之前初始化一個EA,在一次OnDeInit()運行之后初始化一個EA,并模擬一個新的tick OnTick()。
另外,OnTester()函數中處理的測試事件是在調用OnDeInit()反初始化函數之前生成的。當優化輸入參數時,這個函數返回的值被用作自定義的最大準則。
計時器和ChartEvent事件不在策略測試器中處理。