期貨量化軟件:赫茲量化中開發(fā) EA 構造函數(shù)的一次嘗試
從一開始,我的預定目標就是使用標準庫。 我的首要任務是實現(xiàn)最簡單的功能:包括 CTrade 交易類,及執(zhí)行買入或賣出的方法。 我之所以選擇標準庫,是因為它可以生成更簡潔的代碼。以下以腳本形式執(zhí)行的短代碼以交易量 1.0 手執(zhí)行開多頭倉位:
//+------------------------------------------------------------------+ //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Open Buy.mq5 | //| ? ? ? ? ? ? ? ? ? ? ? ? Copyright ? 2018-2021, Vladimir Karputov | //+------------------------------------------------------------------+ #property copyright "Copyright ? 2018-2021, Vladimir Karputov" #property version ? "1.001" //--- #include <Trade\Trade.mqh> CTrade ? ? ? ? m_trade; ? ? ? ? ? ? ? ? ? ? ?// trading object //+------------------------------------------------------------------+ //| Script program start function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ void OnStart() ?{ //--- ? m_trade.Buy(1.0); // open Buy position, volume 1.0 lot ?}
漸漸地,需求變得越來越復雜,我?guī)缀趺看卧诰帉懶碌闹悄芙灰紫到y(tǒng)(EA)時都會遇到交易錯誤。 故此,我對編寫正確代碼的渴望變得越來越強烈。 最終,一篇非常重要的文章《交易機器人在市場發(fā)布前必須通過的檢查》問世了。 當這篇文章發(fā)表時,我已經(jīng)意識到需要針對交易指令的執(zhí)行進行可靠控制的函數(shù)。 從那一刻起,我開始逐漸積攢了大量經(jīng)過驗證的函數(shù),這些函數(shù)可以通過復制->粘貼,輕松添加到 EA 之中。
由于 EA 的操作幾乎總是涉及到使用指標,因此我開始積攢創(chuàng)建正確指標句柄,以及接收指標數(shù)據(jù)的函數(shù)。
NB: MQL5 樣式意味著指標句柄只能創(chuàng)建一次。 作為一條規(guī)定,這是在 OnInit 中完成的。
自 2.XXX, 版起,我開始維護兩個開發(fā)分支 — 正常的面向過程代碼,和類形式的代碼(類的主要目標是實現(xiàn)多幣種 EA)。
在我的工作動向中,構造函數(shù)逐漸接受了最流行的設置:
止損和止盈,
尾隨,
依據(jù)風險百分比、或恒定/最小手數(shù)計算手數(shù),
控制交易運作內的時間間隔,
場內只存在一筆持倉,
反轉交易信號,
在出現(xiàn)翻轉信號的情況下強制平倉...
每個輸入都牽扯到創(chuàng)建代碼模塊和新函數(shù)。
對于日常使用,我決定在 Trading engine 3.mq5 EA 當中收集所有最流行的函數(shù)和完整的輸入集合。事實上,這是一個成品 EA,它能把我們從大量日常工作中解脫出來。 我們所要做的就是在每種特定情況下添加/刪除函數(shù),或更改代碼模塊之間的交互。
1. 構造函數(shù)之后的 EA 功能
由構造函數(shù)創(chuàng)建的 EA 立即擁有多個設置,可以組合這些設置來創(chuàng)建獨特的策略。 版本 4.XXX 應用了以下規(guī)則:
使用當前品種符號(EA 啟動時所在圖表的品種符號)
止盈、止損和尾隨都在輸入中設定。 Points — 依據(jù)報價貨幣計量的當前品種符號點數(shù)大小,例如 “EURSD” 1.00055-1.00045=10 個點。