量化軟件下載:在赫茲量化中探索標(biāo)準(zhǔn)庫的交易策略類
首先要注意的是,#include 文件通過向?qū)砑又辽傻拇a。我們可以看到:
Expert.mqh
SignalRSI.mq
SignalMA.mqh
然后是代碼的下述部分:
//--- Creating filter CSignalRSI ? CSignalRSI *filter0=new CSignalRSI; ? if(filter0==NULL) ? ? { ? ? ?//--- failed ? ? ?printf(__FUNCTION__+": error creating filter0"); ? ? ?ExtExpert.Deinit(); ? ? ?return(-3); ? ? } ? signal.AddFilter(filter0);
正如標(biāo)題所示,“過濾器”將被應(yīng)用至附加到圖表或在策略測試程序中測試的生成 EA 的市場情形。而 filter0 是索引為 0 的第一個過濾器,對于此過濾器,我們在示例中選擇 RSI。
CSignalRSI 表示類信號 RSI。此類用于調(diào)用 RSI 指標(biāo),并向其應(yīng)用一些條件以通過使用向?qū)У哪J竭壿媱?chuàng)建買入或賣出信號。RSI 是我們的第一個過濾器(過濾器編號 0)。
在代碼接下來的部分中,有一些過濾器參數(shù),然后是追蹤止損部分(我們已選擇無追蹤),再往后是有關(guān)資金管理的代碼部分。
接下來是:
//--- Tuning of all necessary indicators ? if(!ExtExpert.InitIndicators()) ? ? { ? ? ?//--- failed ? ? ?printf(__FUNCTION__+": error initializing indicators"); ? ? ?ExtExpert.Deinit(); ? ? ?return(-10); ? ? } //--- ok ? return(0); ?}
此部分屬于 Expert.mqh 包含文件。這是關(guān)于“EA 交易”操作所需指標(biāo)的初始化。
生成的 EA 代碼的最后一部分是關(guān)于取消初始化和其他常見“EA 交易”事件:
//+------------------------------------------------------------------+ //| Deinitialization function of the expert ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ void OnDeinit(const int reason) ?{ ? ExtExpert.Deinit(); ?} //+------------------------------------------------------------------+ //| "Tick" event handler function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ void OnTick() ?{ ? ExtExpert.OnTick(); ?} //+------------------------------------------------------------------+ //| "Trade" event handler function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ void OnTrade() ?{ ? ExtExpert.OnTrade(); ?} //+------------------------------------------------------------------+ //| "Timer" event handler function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ void OnTimer() ?{ ? ExtExpert.OnTimer(); ?} //+------------------------------------------------------------------+
實(shí)際上,此 EA 使用了兩個指標(biāo)(RSI 和 MA),通過利用“過濾器”和“權(quán)重”邏輯的交易類的標(biāo)準(zhǔn)庫用于交易決策。您可以在“MQL5 參考”的交易信號模塊部分找到更多相關(guān)信息。但我們的目的是將我們自己的交易策略用作新的過濾器。
因此,針對第一步(使用我們自己的交易策略),我們要對 MyExpert.mq5 稍事修改。首先,我們添加另一個過濾器。它將是 filter2,并且我們要將它放置在緊接著 filter1 代碼部分的后面。
//--- Creating filter CSignalCCIxx ? CSignalCCIxx *filter2=new CSignalCCIxx; ? if(filter2==NULL) ? ? { ? ? ?//--- failed ? ? ?printf(__FUNCTION__+": error creating filter2"); ? ? ?ExtExpert.Deinit(); ? ? ?return(-4); ? ? } ? signal.AddFilter(filter2); //--- Set filter parameters ? filter2.PeriodCCIxx(Signal_CCIxx_PeriodCCI); ? filter2.Applied(Signal_CCIxx_Applied); ? filter2.Weight(Signal_CCIxx_Weight);
讓我們回到作為過濾器和市場決策核心的 #include 文件。第一個是 #include <Expert\Expert.mqh> 文件。此包含文件反過來包含其他文件:
#include "ExpertBase.mqh"
#include "ExpertTrade.mqh"
#include "ExpertSignal.mqh"
#include "ExpertMoney.mqh"
#include "ExpertTrailing.mqh"
這些包含文件分別是 EA、交易結(jié)構(gòu)、信號、資金和追蹤止損處理的主要結(jié)構(gòu)。我們不打算深入分析這些文件或是對它們進(jìn)行改動。我們的目的主要是通過使用來自 赫茲量化 標(biāo)準(zhǔn)指標(biāo)組的現(xiàn)有指標(biāo)添加我們自己的策略以及添加它們的包含文件。
在 MyExpert.mq5 代碼中,我們有在本例中用作交易的市場決策的信號/過濾器的 RSI 和 MA 指標(biāo)的 #include 文件。此時,讓我們添加我們自己的自定義包含文件。為此,我們將使用屬于 CCI 指標(biāo)的修改(“改善”)版信號。
//+------------------------------------------------------------------+ //| Include ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalRSI.mqh> #include <Expert\Signal\SignalMA.mqh> #include <Expert\Signal\SignalCCIxx.mqh> ? // This is our own 'custom' indicator for custom Signal management of the EA
SignalCCIxx.mqh 文件應(yīng)位于 \MQL5\Include\Expert\Signal\ 文件夾中,并且與向?qū)?EA 的可集成性相一致,就像標(biāo)準(zhǔn)庫的其他 #include 交易類一樣 - 信號文件已經(jīng)在此文件夾中(SignalRSI.mqh 和 SignalMA.mqh)。
對于此示例,我們將復(fù)制原始 CCI 文件,創(chuàng)建另一個名為 CCIxx 的文件并對代碼稍事修改,然后將其用作 #include 文件?,F(xiàn)在,為簡單起見,我們只是使用標(biāo)準(zhǔn)庫的 CCI 指標(biāo)的復(fù)制版。
我們需要做的就是將 "\MQL5\Include\Expert\Signal\SignalCCI.mqh" 文件復(fù)制到 "\MQL5\Include\Expert\Signal\SignalCCIxx.mqh" 文件。這樣做最簡單的方法是在文件夾中制作文件的一個副本,然后重新命名它。
我們現(xiàn)在來看一看這個文件。在向?qū)傻?MyExpert.mq5 中整合此“自定義”方式即是已完成的文件。如上文所述,我們添加了 filter2 代碼,現(xiàn)在我們將完成后續(xù)部分。因此我們將不再關(guān)注 MyExpert.mq5 文件,而是從現(xiàn)在開始關(guān)注 SignalCCIxx.mqh 文件 - 由于其 CCI 指標(biāo)的 filter2 交易信號,它是 EA 的真正核心部分。
自定義策略
我們返回去添加我們稱之為 CCIxx 的“半自定義”策略過濾器,它是 SignalCCI.mqh 的修改版。我將其定義為半自定義,因?yàn)槭聦?shí)上它不是一個全新的自定義信號,相反,它是來自隨 赫茲量化 一起提供的標(biāo)準(zhǔn)指標(biāo)組的 CCI 指標(biāo)的重新設(shè)計版本。這樣,即便是缺乏經(jīng)驗(yàn)的用戶和編程人員也能夠使用大量的現(xiàn)有指標(biāo)對 MQL5 向?qū)傻?EA 的模式和過濾器稍事修改。換句話說,您可以創(chuàng)建自己的過濾器和模式版本,用于生成買入和賣出市場信號。這仍然是使用策略的絕佳基礎(chǔ)。
我們來看一看這個示例。這對于那些僅僅需要這個功能(將一些自定義模式添加至現(xiàn)有指標(biāo))的用戶以及那些希望僅僅通過使用向?qū)砜焖賱?chuàng)建具有某種自定義的功能完善(且有效)的 EA 參加自動交易錦標(biāo)賽的用戶而言十分有用。
這可以通過 1 小時的工作實(shí)現(xiàn) - 創(chuàng)建一個“錦標(biāo)賽友好”EA,它功能完善,具有追蹤止損、資金管理以及競爭性交易所需的一切。再次將重心移至 EA 由向?qū)傻氖聦?shí),正如我將其命名為“錦標(biāo)賽友好”,這實(shí)際上意味著生成的代碼沒有錯誤,因此參賽者無需作出任何修改或擔(dān)心出現(xiàn)漏洞或錯誤。
EA 將只是交易并且是完美地交易,至少對于那些希望參賽但不會編程也不想在工作服務(wù)(對于錦標(biāo)賽參賽者而言是個不錯的選擇)中訂購 EA 的參賽者而言是如此。有大量的輸入?yún)?shù)可供指定,以使您的自動交易盡可能貼近于您腦海中的策略構(gòu)思。
但實(shí)際上,您可以僅僅使用標(biāo)準(zhǔn)指標(biāo)組以及 MetaQuotes 經(jīng)由向?qū)Ш徒灰撞呗灶惖臉?biāo)準(zhǔn)庫提供的標(biāo)準(zhǔn)過濾器/模式組。由于指標(biāo)具有很多參數(shù)(時間框架、交易品種)以及指標(biāo)自身的參數(shù)(例如,周期、應(yīng)用的價格等),這就提供了大量的組合和成功交易的可能性。通過本文您將快速、輕松地學(xué)會如何為 赫茲量化 標(biāo)準(zhǔn)指標(biāo)自定義和添加模式/過濾器。
我們繼續(xù)來看 SignalCCIxx.mqh 文件,以自定義和修改其行為,制作我們自己的 CCI 信號交易模型 (CCIxx)。首先,讓我們在 MyExpert.mq5 文件中為輸入部分中的新代碼添加新的變量,如下例所示(請參見高亮顯示的代碼):