私たちのファンページに参加してください
- ビュー:
- 1743
- 評価:
- パブリッシュ済み:
- 2015.10.29 12:38
- アップデート済み:
- 2021.11.01 10:40
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
MQL5 Wizardを使えば、エキスパートアドバイザーを自動生成することができます。 (MQL5 Wizard: Creating Expert Advisors without Programmingを参照).
B.Williams氏が"Trading Chaos"で発表したアリゲーターに基づいたトレードシグナルを考えてみます。(MQL5ウィザードでEAを自動生成する際 )"Signals based on the Alligator" です。
3つの移動平均(ジョーの口、歯、顎)とその差のオシレーターに基づいています。トレンドに応じて3つの線が並んだ、アリゲーターのクロスの後にシグナルが形成されます。上昇トレンドの場合、口(最小期間のもの)が最も高くなり、次に歯、顎の順番に低くなります。下降トレンドでは、その逆になります。
トレードシグナル:
- 買いポジション: 上昇トレンド時のアリゲーターのクロスと、3つの線の差の増大;
- 買いポジション決済: 口と顎の上方のクロス;
- 売りポジション: 下降トレンド時のアリゲーターのクロスと、3つの線の差の拡大;
- 売りポジション決済: 口と顎の下方のクロス;
この手法は CSignalAlligator class にあります。
図1. アリゲーターに基づいたトレードシグナル
トレードシグナル
このトレード手法は CSignalAlligatorにあり、インジケーターの値に簡単にアクセスできるメソッドが含まれています。;
double Jaw(int ind) // returns the value of Jaw line of the bar double Teeth(int ind) // returns the value of Teeth line of the bar double Lips(int ind) // returns the value of Lips line of the bar double LipsTeethDiff(int ind) // returns the difference between the Lips and Teeth lines double TeethJawDiff(int ind) // returns the difference between the Teeth and Jaw lines double LipsJawDiff(int ind) // returns the difference between the Lips and Jaw lines bool CheckCross(); // used to check the crossover of Alligator lines
1. 買いポジション
トレード条件の確認には、口、歯、顎のシフトによる特徴が含まれます。
買いポジションの条件:
- CheckCrossは、ラインのクロスとライン間の差の増大によって決定されます。;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) and LipsTeethDiff(-1)>=LipsTeethDiff(0); 口と歯の差の増大;
- LipsTeethDiff(0)>=0.0; 歯よりも口が高い;
- TeethJawDiff(-2) >=TeethJawDiff(-1) かつ TeethJawDiff(-1) >=TeethJawDiff(0) ; 歯と顎の差の増大;
- TeethJawDiff(0) >=0.0; 顎よりも歯が高い
//+------------------------------------------------------------------+ //| Checks conditions to open long position (buy) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. 買いの決済
買いポジションの決済 (ラインのシフト):
- LipsTeethDiff(-1)<0; (シフトによる)次の足の口が歯よりも低い;
- LipsTeethDiff(0)>=0; 現在足の口が歯より高いか同等;
- LipsTeethDiff(1)>0; 前の確定足の口が歯よりも高い
//+------------------------------------------------------------------+ //| Checks conditions to close long position | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. 売りポジション
売りポジションの条件:
- CheckCrossは、ラインのクロスとライン間の差の増大によって決定されます。;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) かつ LipsTeethDiff(-1)<=LipsTeethDiff(0); 口と歯の差が増大;
- LipsTeethDiff(0)<=0.0; 現在足の口が歯よりも低い;
- TeethJawDiff(-2)<=TeethJawDiff(-1) かつ TeethJawDiff(-1)<=TeethJawDiff(0); 歯と顎の差の増大;
- TeethJawDiff(0) <=0.0; 現在足の歯が顎よりも低い;
//+------------------------------------------------------------------+ //| Checks conditions to open short position (sell) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. 売りポジションの決済
売りポジションの決済条件:
- LipsTeethDiff(-1)>0; (シフトによる)次の足の口が歯よりも高い;
- LipsTeethDiff(0)<=0; 現在足の口が歯よりも低いか同等;
- LipsTeethDiff(1)<0; 前の確定足の口が歯よりも低い
//+------------------------------------------------------------------+ //| Checks conditions to close short position | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
MQL5 WizardでEAを生成する
このロジックに基づいたトレードロボットを生成するには、MQL5 Wizardの"Creating Ready-Made Expert Advisors"の"Signals based on the Alligator"を選択してください。:
図2. MQL5 Wizardの"Signals based on the Alligator" を選択してください。
次に、trailing stop とmoney and risk management の有無を選択します。エキスパートアドバイザーのコードは自動的に生成されるので、コンパイルすれば、MetaTrader 5 client terminalの Strategy Testerでテスト可能です。
テスト結果
過去データでエキスパートアドバイザーをテストしてみましょう。 (EURUSD M15, テスト期間: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
エキスパートアドバイザーの生成において、今回は固定ロット(Trading Fixed Lot, 0.1), トレーリングストップ(Trailing not used)はなしを選択しました。
図3. アリゲーターに基づいたトレードシグナルのエキスパートアドバイザーのトレード結果
フィルターと時間帯ごと相場の特徴を考慮に入れれば、収益を増大させることが可能です。CSignalITF class を使えば、ざらば時間帯フィルターをかけることができます。どの時間帯が最も良いかは、MetaTrader 5 client terminal のStrategy Tester で検証可能です。サンプルは MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filterを参照してください。
アタッチメント: SignalAlligator.mqh と CSignalAlligator class がterminal_data_folder\MQL5\Include\Expert\Signal folder になければなりません。
MQL5 Wizardで生成したエキスパートアドバイザーは、expert_alligator.mq5 です。
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/267

ザラバフィルター付きの2つの指数平滑移動平均のクロスによるトレードシグナルを考えます。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。

MACD(CSignalMACD from MQL5 Standard Library)のメインラインとシグナルラインのクロスに基づいたトレードシグナルを検証することができます。 この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。

ロウソク足の転換によるシグナルです。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。

このトレードシグナルは、ストキャスティクスをフィルターとした"3 Black Crows/3 White Soldiers"ロウソク足パターンです。この戦略のエキスパートのコードは、MQL5ウィザードで自動生成させることができます。