赫茲股票量化交易軟件:分離策略在趨勢(shì)和盤整條件下的優(yōu)化

當(dāng)開(kāi)發(fā)交易策略時(shí),第一個(gè)任務(wù)就是設(shè)置入場(chǎng)交易的條件、跟蹤倉(cāng)位的方法和出場(chǎng)點(diǎn)。為此會(huì)使用各種數(shù)學(xué)、統(tǒng)計(jì)學(xué)和其它分析方法。它們通常被現(xiàn)成的、用于以指標(biāo)形式評(píng)估市場(chǎng)特征的自治系統(tǒng)所強(qiáng)化。在制定任何交易策略時(shí),一個(gè)主要問(wèn)題是缺乏通用性。一個(gè)交易系統(tǒng)不能在所有可能的市場(chǎng)條件下以同等的效率運(yùn)作。所以,交易者在開(kāi)發(fā)EA交易時(shí)通常選擇條件來(lái)偵測(cè)某種(潛在獲利)的市場(chǎng)條件。 另外,每個(gè)交易系統(tǒng)都有自己的缺點(diǎn),跟隨趨勢(shì)的策略在延長(zhǎng)的盤整變化中會(huì)虧損,而基于盤整的策略在強(qiáng)方向變化時(shí)會(huì)錯(cuò)誤進(jìn)場(chǎng),為了減少錯(cuò)誤信號(hào)的影響,提高盈利能力,系統(tǒng)變得靈活,這意味著它們有一些特定的設(shè)置或輸入數(shù)據(jù),這是合理的,因?yàn)槭袌?chǎng)行為不斷變化。 隨著時(shí)間的推移,任何交易系統(tǒng)的效率都會(huì)降低,因此,有必要調(diào)整其參數(shù)以適應(yīng)新的條件。內(nèi)建的赫茲股票量化策略測(cè)試器就是解決這個(gè)問(wèn)題的方法,此工具有助于分析歷史上任何EA交易的性能,并為其在實(shí)際交易中的進(jìn)一步使用定義最佳設(shè)置。 分離優(yōu)化的概念 在本文中,赫茲股票量化將在更大范圍內(nèi)探討策略測(cè)試器的應(yīng)用。顯然,大多數(shù)交易系統(tǒng)是雙向交易(在特定條件下買賣)。圖 1 顯示了一個(gè)實(shí)際交易策略的簡(jiǎn)單例子,想法很簡(jiǎn)單 - 低買高賣。

編輯切換為居中
圖1. 趨勢(shì)跟蹤策略 通常,一組設(shè)置用于確定這樣一個(gè)系統(tǒng)中的上升和下降趨勢(shì),并入場(chǎng)條件類似。但關(guān)鍵是,市場(chǎng)增長(zhǎng)和下跌的具體情況在許多特征上可能非常不同,例如速度和持續(xù)時(shí)間。在這方面,我建議考慮一個(gè)系統(tǒng),該系統(tǒng)分別確定上升趨勢(shì)和下降趨勢(shì)條件下的入場(chǎng)交易。 為了實(shí)現(xiàn)這一點(diǎn),赫茲股票量化需要兩組定義市場(chǎng)進(jìn)入和退出條件的參數(shù)。在這一點(diǎn)上,我們提出了“分離優(yōu)化”的概念。分離優(yōu)化意味著利用策略測(cè)試器為上升和下降趨勢(shì)分別定義交易系統(tǒng)的最佳參數(shù)。 為了測(cè)試分離優(yōu)化,我決定選擇兩個(gè)交易系統(tǒng):跟隨趨勢(shì)的系統(tǒng)和基于盤整的系統(tǒng)。在跟隨趨勢(shì)的策略中,我們將分別優(yōu)化上升和下降趨勢(shì),而在盤整策略中,赫茲股票量化將評(píng)估在通道中進(jìn)行交易的優(yōu)化。 選擇一個(gè)跟隨趨勢(shì)的策略 我將使用 J. F. Ehlers 的重心指標(biāo),它表現(xiàn)為彩色的 OSMA 柱形圖 (CenterOfGravityOSMA),來(lái)測(cè)試分離的優(yōu)化。它的信號(hào)是由計(jì)算價(jià)格平均速度的指標(biāo)確認(rèn)的。
參數(shù)
描述
使用的指標(biāo)
CenterOfGravityOSMA
使用的指標(biāo)
平均速度
時(shí)間框架
H1
買入條件
重心指標(biāo)的柱形圖顯示增長(zhǎng)(指標(biāo)值小于0), 而平均速度指標(biāo)值高于閾值 (在參數(shù)中預(yù)設(shè))
賣出條件
重心指標(biāo)的柱形圖顯示下跌(指標(biāo)值大于0), 而平均速度指標(biāo)值高于閾值 (在參數(shù)中預(yù)設(shè))
退場(chǎng)條件
獲利/止損
策略在圖2中顯示從上表可以看出,交易策略明確了買入和賣出時(shí)進(jìn)入市場(chǎng)的條件。由于這是一種趨勢(shì)跟隨策略,買入條件對(duì)應(yīng)上升趨勢(shì),而賣出條件對(duì)應(yīng)下降趨勢(shì)。

編輯切換為居中
圖 2. 跟隨趨勢(shì)策略的入場(chǎng)條件 在 MetaEditor 中實(shí)施該策略時(shí),赫茲股票量化應(yīng)該設(shè)置EA工作條件,以便它只能在上升趨勢(shì)、下降趨勢(shì)或這兩種情況下使用。 我們也應(yīng)當(dāng)考慮下面這些:
能夠管理向上和向下趨勢(shì)以及這兩種情況的測(cè)試模式?!?/p>
對(duì)于單獨(dú)的優(yōu)化,需要分別使用EA進(jìn)行上升趨勢(shì)、下降趨勢(shì)和聯(lián)合操作;
上升趨勢(shì)和下降趨勢(shì)應(yīng)具有各自獨(dú)立的參數(shù)。這是必要的,以便在聯(lián)合交易中使用它們;
要滿足這些EA開(kāi)發(fā)條件,輸入以下代碼: //+------------------------------------------------------------------+ //| 操作模式枚舉 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ enum Trend_type ? { ? ?UPTREND = 1, ? ? ? ? ? ?//上升趨勢(shì) ? ? ? ? ? DOWNTREND, ? ? ? ? ? ? ?//下降趨勢(shì) ? ?BOTH ? ? ? ? ? ? ? ? ? ?//兩種趨勢(shì) ? }; 輸入?yún)?shù)集看起來(lái)如下: //+------------------------------------------------------------------+ //| EA 的輸入?yún)?shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ input string ? ? ? ? ? ? ? Inp_EaComment="Trend Strategy"; ? ? ? ? ? ? ?//EA 注釋 input double ? ? ? ? ? ? ? Inp_Lot=0.01; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//手?jǐn)?shù) input MarginMode ? ? ? ? ? Inp_MMode=LOT; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //資金管理 input Trend_type ? ? ? ? ? Inp_Trend_type=3; //趨勢(shì)類型 //--- 上升趨勢(shì)參數(shù) input string Inp_Str_label1="===Uptrend parameters==="; ? //標(biāo)簽 input int ? ? ? ? ? ? ? ? ?Inp_MagicNum1=1111; ? ? ? ? ? ? ? ? ? ? ? ? ?//幻數(shù) input int ? ? ? ? ? ? ? ? ?Inp_StopLoss1=40; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//止損(點(diǎn)數(shù)) input int ? ? ? ? ? ? ? ? ?Inp_TakeProfit1=60; ? ? ? ? ? ? ? ? ? ? ? ? ?//獲利(點(diǎn)數(shù)) //--- CenterOfGravityOSMA 指標(biāo)參數(shù) input uint ? ? ? ? ? ? ? ? Period_1=9; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//平均周期數(shù) input uint ? ? ? ? ? ? ? ? SmoothPeriod1_1=3; ? ? ? ? ? ? ? ? ? ? ? ? ? //平滑周期數(shù)1 input ENUM_MA_METHOD ? ? ? MA_Method_1_1=MODE_SMA; ? ? ? ? ? ? ? ? ? ? ?//平均方法1 input uint ? ? ? ? ? ? ? ? SmoothPeriod2_1=3; ? ? ? ? ? ? ? ? ? ? ? ? ? //平滑周期數(shù)2 input ENUM_MA_METHOD ? ? ? MA_Method_2_1=MODE_SMA; ? ? ? ? ? ? ? ? ? ? ?//平均方法2 input Applied_price_ ? ? ? AppliedPrice1=PRICE_OPEN_; ? ? ? ? ? ? ? ? ? //使用的價(jià)格 //--- 平均速度指標(biāo)的參數(shù) input int ? ? ? ? ? ? ? ? ?Inp_Bars1=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //天數(shù) input ENUM_APPLIED_PRICE ? Price1=PRICE_CLOSE; ? ? ? ? ? ? ? ? ? ? ? ? ?//使用的價(jià)格 input double ? ? ? ? ? ? ? Trend_lev1=2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//趨勢(shì)水平 //--- 下降趨勢(shì)參數(shù) input string Inp_Str_label2="===Downtrend parameters==="; //標(biāo)簽 input int ? ? ? ? ? ? ? ? ?Inp_MagicNum2=2222; ? ? ? ? ? ? ? ? ? ? ? ? ?//幻數(shù) input int ? ? ? ? ? ? ? ? ?Inp_StopLoss2=40; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//止損(點(diǎn)數(shù)) input int ? ? ? ? ? ? ? ? ?Inp_TakeProfit2=60; ? ? ? ? ? ? ? ? ? ? ? ? ?//獲利(點(diǎn)數(shù)) //--- CenterOfGravityOSMA 指標(biāo)參數(shù) input uint ? ? ? ? ? ? ? ? Period_2=9; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//平均周期數(shù) input uint ? ? ? ? ? ? ? ? SmoothPeriod1_2=3; ? ? ? ? ? ? ? ? ? ? ? ? ? //平滑周期數(shù)1 input ENUM_MA_METHOD ? ? ? MA_Method_1_2=MODE_SMA; ? ? ? ? ? ? ? ? ? ? ?//平均方法1 input uint ? ? ? ? ? ? ? ? SmoothPeriod2_2=3; ? ? ? ? ? ? ? ? ? ? ? ? ? //平滑周期數(shù)2 input ENUM_MA_METHOD ? ? ? MA_Method_2_2=MODE_SMA; ? ? ? ? ? ? ? ? ? ? ?//平均方法2 input Applied_price_ ? ? ? AppliedPrice2=PRICE_OPEN_; ? ? ? ? ? ? ? ? ? //使用的價(jià)格 //--- 平均速度指標(biāo)的參數(shù) input int ? ? ? ? ? ? ? ? ?Inp_Bars2=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //天數(shù) input ENUM_APPLIED_PRICE ? Price2=PRICE_CLOSE; ? ? ? ? ? ? ? ? ? ? ? ? ?//使用的價(jià)格 input double ? ? ? ? ? ? ? Trend_lev2=2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//趨勢(shì)水平 赫茲股票量化可以在代碼中看到, Inp_Trend_type 變量是用于選擇EA運(yùn)行模式的, 而針對(duì)Uptrend(上升趨勢(shì)) 和 Downtrend(下降趨勢(shì)) 模式,分別分離為 'Uptrend parameters(上升趨勢(shì)參數(shù))' 和 'Downtrend parameters(下降趨勢(shì)參數(shù))' 。當(dāng)選擇 Both 模式時(shí),兩個(gè)部分的參數(shù)都會(huì)使用,而主要邏輯實(shí)現(xiàn)的代碼在下面提供: //+------------------------------------------------------------------+ //| EA交易分時(shí)函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ void OnTick() ? { //--- 取得計(jì)算數(shù)據(jù) if(!GetIndValue()) ? ? ? return; ? ? if(Inp_Trend_type==1 && !Trade.IsOpenedByMagic(Inp_MagicNum1)) ? ? ?{ ? ? ? //--- 如果有買入信號(hào),開(kāi)啟訂單 if(BuySignal()) ? ? ? ? ?Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment); ? ? ?} ? ?else if(Inp_Trend_type==2 && !Trade.IsOpenedByMagic(Inp_MagicNum2)) ? ? ?{ ? ? ? //--- 如果有賣出信號(hào),開(kāi)啟訂單 if(SellSignal()) ? ? ? ? ?Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment); ? ? ?} ? ?else if(Inp_Trend_type==3) ? ? ?{ ? ? ? //--- 如果有買入信號(hào),開(kāi)啟訂單 if(BuySignal() && !Trade.IsOpenedByMagic(Inp_MagicNum1)) ? ? ? ? ?Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment); ? ? ? //--- 如果有賣出信號(hào),開(kāi)啟訂單 if(SellSignal() && !Trade.IsOpenedByMagic(Inp_MagicNum2)) ? ? ? ? ?Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment); ? ? ?} ? } //+------------------------------------------------------------------+ //| 買入條件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ bool BuySignal() ? { ? ?return(avr_speed1[0]>Trend_lev1 && cog1[1]<cog1[0] &&(cog1[1]<0 && cog1[0]<0))?true:false; ? } //+------------------------------------------------------------------+ //| 賣出條件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ bool SellSignal() ? { ? ?return(avr_speed2[0]>Trend_lev2 && cog2[1]>cog2[0] &&(cog2[1]>0 && cog2[0]>0))?true:false; ? } //+------------------------------------------------------------------+ //| 取得當(dāng)前指標(biāo)值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ bool GetIndValue() ? { ? ?return(CopyBuffer(InpInd_Handle1,0,0,2,cog1)<=0 || ? ? ? ? ? CopyBuffer(InpInd_Handle2,0,0,2,cog2)<=0 || ? ? ? ? ? CopyBuffer(InpInd_Handle3,0,0,2,avr_speed1)<=0 || ? ? ? ? ? CopyBuffer(InpInd_Handle4,0,0,2,avr_speed2)<=0 ? ? ? ? ? )?false:true; ? } //+------------------------------------------------------------------+ 針對(duì)上升趨勢(shì)和下降趨勢(shì)模式的交易規(guī)則都很簡(jiǎn)單: 在上升趨勢(shì)時(shí)買入而在下降趨勢(shì)時(shí)賣出,也就是跟隨趨勢(shì)。在 Both 模式下,這些系統(tǒng)一起工作并且相互獨(dú)立使用它們自己的輸入?yún)?shù) — Uptrend+Downtrend。測(cè)試交易策略
對(duì)于所選策略的測(cè)試和單獨(dú)優(yōu)化,可以合理地為上升模式選擇清晰的上升期,為下降模式選擇下降期。所以,我決定選擇下面圖3中顯示的時(shí)間段。

編輯切換為居中
圖 3. 選擇用于測(cè)試的時(shí)間段 這樣,讓我們總結(jié)以下測(cè)試設(shè)置。
時(shí)間段: 對(duì)于 Uptrend 模式: 10.04.2017 — 01.02.2018. 對(duì)于 Downtrend 模式: 08.05.2014 — 13.03.2015.
交易品種: EURUSD.
交易模式: No delay. 這些不是高頻交易策略,所以延遲的影響將很小。
測(cè)試: М1 OHLC. 預(yù)先在真實(shí)分時(shí)下的測(cè)試顯示了近似相同的結(jié)果。
初始存款: 1000 USD.
杠桿: 1:500.
服務(wù)器: MetaQuotes-Demo.
報(bào)價(jià): 5-digit.
測(cè)試和優(yōu)化的目標(biāo)是在策略中使用的指標(biāo)參數(shù),以及止損和獲利值。
上升趨勢(shì)的優(yōu)化結(jié)果如下:

編輯切換為居中
圖 4. 對(duì)于上升趨勢(shì)的測(cè)試和優(yōu)化結(jié)果
對(duì)于下降趨勢(shì)的優(yōu)化結(jié)果如下:

編輯切換為居中
圖 5. 對(duì)于下降趨勢(shì)的測(cè)試和優(yōu)化結(jié)果 在使用對(duì)所選模式有利的時(shí)間間隔進(jìn)行優(yōu)化來(lái)定義最佳參數(shù)后,是時(shí)候在既有向上趨勢(shì)又有向下趨勢(shì)的混合間隔上嘗試這些參數(shù)。這將使赫茲股票量化能夠測(cè)試交易策略的通用性。 我決定選擇以下時(shí)間間隔,這非常適合上述要求。

編輯切換為居中
圖 6. 為混合測(cè)試選擇的時(shí)間段 赫茲股票量化可以在圖6中看到,這個(gè)時(shí)間段都含有上升和下降趨勢(shì)以及回滾和盤整的時(shí)間段?,F(xiàn)在讓我們看看EA在這段不熟悉的時(shí)間段上的表現(xiàn)。

編輯切換為居中
圖 7. 優(yōu)化趨勢(shì)跟蹤策略在不利區(qū)間的檢驗(yàn)結(jié)果 考慮到這一趨勢(shì)的測(cè)試結(jié)果遵循策略,我們可以得出以下結(jié)論:
該策略在不利區(qū)間上顯示出積極的結(jié)果。
成功的多頭交易所占的比例比空頭交易所占的比例高。
此外,盈利能力和預(yù)期回報(bào)等參數(shù)表明,該策略通常在該測(cè)試間隔上表現(xiàn)出積極的動(dòng)力。
赫茲股票量化交易軟件:分離策略在趨勢(shì)和盤整條件下的優(yōu)化的評(píng)論 (共 條)
