アイディア提供者: Gatis。
MQL5コード提供者: Vladimir Karputov。
このEAは4つのパラメーターを分析します:
- バー#1のMACDのメインラインの値(macd_main_1)
- バー#1のMACDのシグナルラインの値(macd_signal_1)
- バー#1のSARの値(sar_1)と価格Bid(m_symbol.Bid())の関係
これらのパラメーターは、買いと売りのシグナルの基本的な式に組み合わされます:
bool open_buy = (macd_main_1>macd_signal_1 && macd_signal_1<0 && sar_1<m_symbol.Bid()); bool open_sell = (macd_main_1<macd_signal_1 && macd_signal_1>0 && sar_1>m_symbol.Bid());
ただし、シグナルの値<や>は、式のあらゆる部分で最適化できます。そのために、各シグナルの<と>に対して、それぞれ独自の変数(InpMoreLessBuy_1, InpMoreLessBuy_2, InpMoreLessBuy_3, InpMoreLessSell_1, InpMoreLessSell_2, InpMoreLessSell_3)を導入します。これらの変数を使って、基本的な式は次のように修正されます:
bool open_buy= (InpMoreLessBuy_1 ? macd_main_1>macd_signal_1 : macd_main_1<macd_signal_1) && (!InpMoreLessBuy_2 ? macd_signal_1 < 0 : macd_signal_1 > 0 ) && (!InpMoreLessBuy_3 ? sar_1 < m_symbol.Bid() : sar_1 > m_symbol.Bid() ); bool open_sell=(!InpMoreLessSell_1 ? macd_main_1<macd_signal_1 : macd_main_1>macd_signal_1) && (InpMoreLessSell_2 ? macd_signal_1 > 0 : macd_signal_1 < 0 ) && (InpMoreLessSell_3 ? sar_1 > m_symbol.Bid() : sar_1 < m_symbol.Bid() );
このEAは新しいバーが出現した時のみ動作します。シグナルを受け取ると、受け取ったシグナルに対して逆のポジションがクローズされます。
式の最適化を行う際には、ポジション数を最適化することも合理的です:

コメント 0