動的移動平均線クロスシステム

 「移動平均線のクロスで売買する」では、短期移動平均線と長期移動平均線の2本の移動平均線がクロス(ゴールデンクロスorデッドクロス)した後に売買を行うEA(2MA Cross EA.mq4)の作成方法について解説していますが、「2MA Cross EA.mq4は、短期及び長期移動平均線の計算期間を固定して売買を行うシステムとなっています。

 しかし、相場は常に変動するものである以上、パラメーターを固定したシステムの運用では、その時々の相場状況に応じた最適な基準による売買を行うことは極めて困難であるということができます。

 したがって、その時々の相場状況に応じた最適な基準による売買を行うためには、システムによる売買の基準を提供するパラメーターを適宜調整していくことが必要となります。

 そこで、「トレードシステムはどう作ればよいのか①」に掲載されている「動的移動平均線クロスシステム」(Dynamic 2MA Cross EA.mq4)の作成方法について解説します。


>>Amazonで購入する

 「動的移動平均線クロスシステム」のロジックは以下のとおりです。

  • 2つの移動平均線を計算する
    1.短期移動平均線の計算期間は「12」日からスタートする。
    2.長期移動平均線の計算期間は「41」日からスタートする。
  • 2つの移動平均線の交差でトレードする
    1.短期移動平均線が長期移動平均線を下から上に上抜いたら(=ゴールデンクロス)、次のバーの始値で買いエントリーする。
    2.短期移動平均線が長期移動平均線を上から下に下抜いたら(=デッドクロス)、次のバーの始値で売りエントリーする。
  • ボラティリティを標準偏差で表す
    1.今日の終値から始まる過去20日の終値の標準偏差(「x」とする。)を計算する。
    2.昨日の終値から始まる過去20日の終値の標準偏差(「y」とする。)を計算する。
    3.今日の終値から始まる過去30日の終値の標準偏差(「xx」とする。)を計算する。
    4.昨日の終値から始まる過去30日のバーの終値の標準偏差(「yy」とする。)を計算する。
    5.1.と2.」及び「3.と4.」のボラティリティのデルタ(=変動)を計算する(前者を「デルタ1」、後者を「デルタ2」とする。)。
    デルタ1=(x-y)÷x
    デルタ2=(xx-yy)÷xx
  • 移動平均線の長さを調整する
    1.現在の短期移動平均線の計算期間に「1+デルタ1」を乗ずる。
    2.現在の長期移動平均線の計算期間に「1+デルタ2」を乗ずる。
    3.短期移動平均線の計算期間が長期移動平均線の計算期間を下回るようにするために、以下の制約を課す。
    ⑴ 12日 ≦ 短期移動平均線の計算期間 ≦ 23日
    ⑵ 41日 ≦ 長期移動平均線の計算期間 ≦ 50日
  • 移動平均線を新しい計算期間で計算しなおす
  1. 2MA Cross EA.mq4を修正する
    ⑴ 変数の宣言を修正する
    ⑵ インジケーターの値の計算を修正する
  2. 関連ツール
  3. 関連書籍

1.2MA Cross EA.mq4を修正する

 「動的移動平均線クロスシステム」の作成は、「移動平均線のクロスで売買する」で解説した「2MA Cross EA.mq4」を修正することによって行います。

 修正する箇所は、以下のとおりです。

  • 変数の宣言
  • インジケーターの値の計算

⑴ 変数の宣言を修正する

 「2MA Cross EA.mq4」では、短期移動平均線及び長期移動平均線の計算期間と注文に付するコメントを、以下のように宣言しています。


extern int Magic       = 1111;
extern int FMA_Period  = 12;
extern int SMA_Period  = 26;
extenr string Comments = “2MA Cross”;

 上記を、「Dynamic 2MA Cross EA.mq4」では、以下のように修正します。


extern int Magic       = 2222;
extern string Comments = “Dynamic 2MA Cross”;
int FMA_Period         = 12;
int SMA_Period         = 41;

 「FMA_Period」と「SMA_Period」を外部変数としていないのは、「Dynamic 2MA Cross EA.mq4」では、短期移動平均線及び長期移動平均線の計算期間の最小が、それぞれ、「12」及び「41」に固定されているからです。

 また、「Magic」と「Comments」を変更しているのは、「2MA Cross EA.mq4Dynamic 2MA Cross EA.mq4を識別するためです。

>>目次に戻る

⑵ インジケーターの値の計算を修正する

 「Dynamic 2MA Cross EA.mq4」では、インジケーターの値の計算を、以下のように修正します。

Download (PDF, 648KB)

ア 過去20日間の終値の標準偏差

 標準偏差の計算式は、以下のとおりです。

標準偏差
標準偏差の計算式
(ア) 今日の終値から始まる過去20日間の終値の標準偏差

 以下の変数を宣言したうえで、今日の終値から始まる過去20日間の終値の標準偏差を算出しています。

  • double x
    標準偏差の値を格納する変数です。
  • double Sum_1_SC
    期間内の終値の2乗の合計を格納する変数です。
  • double Sum_2_SC
    期間内の終値の合計の2乗を格納する変数です。

 具体的な処理内容の解説については「こちら」を参照してください。

(イ) 昨日の終値から始まる過去20日間の終値の標準偏差

 (ア)と同様の手順で、昨日の終値から始まる過去20日間の終値の標準偏差を算出しています。

イ 過去30日間の終値の標準偏差

 アと同様の手順で、「今日の終値から始まる過去30日間の終値の標準偏差」と「昨日の終値から始まる過去30日間の終値の標準偏差」を算出しています。

ウ デルタ
  • double Delta_1
    今日の終値から始まる過去20日間の終値の標準偏差」と「昨日の終値から始まる過去20日間の終値の標準偏差」の変動率を算出して、変数「Delta_1」に格納しています。
  • double Delta_2
    今日の終値から始まる過去30日間の終値の標準偏差」と「昨日の終値から始まる過去30日間の終値の標準偏差」の変動率を算出して、変数「Delta_2」に格納しています。
エ 短期移動平均線の計算期間

 短期移動平均線の計算期間を変数「Old_Period_F」に格納したうえで、変数「Old_Period_F」に「1+Delta_1」を乗じて、その値を変数「FMA_Period」に格納し、新たな短期移動平均線の計算期間としています。

 その後、短期移動平均線の計算期間は「12以上23以下なので、MathMax()関数及びMathMin()関数を使用して、新たな短期移動平均線の計算期間が、「12未満となったり、23超となったりしないようにしています

  • MathMax()関数の詳細については「こちら」を参照してください。
  • MathMin()関数の詳細については「こちら」を参照してください。
オ 長期移動平均線の計算期間

 エと同様の手順で、新たな長期移動平均線の計算期間を算出しています。

カ 移動平均線の値

 エ及びオで算出した移動平均線の計算期間を用いて、短期及び長期移動平均線の値を算出してます。

  • iMA()関数の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。

>>目次に戻る

2.関連ツール

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
『EAつくーる』
『EAつくーる』 | fx-on.com

『EAつくーる』
『EAつくーる』 | fx-on.com

 上記ツール(EAつくーる『EAつくーる』 | fx-on.com)の詳細については「こちら『EAつくーる』 | fx-on.com」を参照してください。

>>目次に戻る

3.関連書籍

 「動的移動平均クロスシステム」は、「トレードシステムはどう作ればよいのか①」に掲載されているコードを参考に作成したものです。

 「トレードシステムはどう作ればよいのか①」には、そのほかにも様々なトレードシステムの検証が掲載されているので、独自のトレードシステムの参考にされるとよいと思います。


>>Amazonで購入する

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説