English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
さまざまな移動平均システムを設計する方法を学ぶ

さまざまな移動平均システムを設計する方法を学ぶ

MetaTrader 5トレーディング | 9 5月 2022, 09:54
1 019 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

取引経験の期間に関わらず、「トレンドは友達です」という言葉を聞いたことがあると思います。聞いたことがないとしたら、ここで何を意味するのかというと、さまざまなタイプの市場の方向性や価格変動の傾向があることを知っているということです。

  • 上昇トレンド: 高値と安値が上がった場合に見ることができます
  • 下降トレンド: 価格が上昇トレンドの反対である場合(高値と安値が下がった場合)に見ることができます
  • 横向き: 上昇トレンドと下降トレンドを除くすべての動きです。

次の図では、上昇トレンドと下降トレンドを折れ線グラフとして示しています。それらを除くすべての動きは横向きです。

上昇トレンド

下降トレンド

これでトレンドを特定しましたが、トレンドはなぜ友達なのでしょうか。

上昇トレンドと下降トレンドのどちらにも明確な動きがあるため、ここではそれらについて説明します。ある特定の市場参加者のコントロールを見てみます。上昇トレンドの間は、供給が何であれ買い手が価格が押し上げるので、買い手がコントローラーであることがわかります。この市場を強気市場と呼びます。逆に、下降トレンドの間は、売り手が価格を押し下げるため、売り手がコントローラーであることがわかります。この市場を弱気市場と呼びます。

ただし、場合によっては、ホイップソーまたは誤ったブレイクアウトと呼ばれるものが発生することがあります。偽のブレイクアウトは取引結果に害を及ぼす可能性があります。どうしてでしょうか。ここでは何が発生するかを見ていきますが、まずホイップソーまたは偽のブレイクアウトとは何かを特定しましょう。

偽のブレイクアウトは、決定を下すきっかけとなるが、決定を下した後で市場がその決定に反対するようなシグナルです。この手の決定は間違いなく取引結果に悪影響を及ぼします。これらの偽のブレイクアウトまたはホイップソーは、多くのストラテジーでフィルタリングすることで減らすことができます。それを行う最良のストラテジーの1つは移動平均を使用することです。これは、移動平均ストラテジーのいくつかを使用する方法と、それらのアルゴリズム取引システムを設計して正確、簡単、体系的に使用する方法を学ぶというこの記事の主題です。

この記事では、次のトピックについて説明します。

免責事項: この記事の内容はすべて、教育のみを目的として作成されており、他を目的にしていません。したがって、この記事の内容はいかなる種類の結果も保証するものではないため、この記事の内容に基づいて何らかのアクションを取る場合は自己責任となります。この記事の主な目的は教育目的のみであると述べましたが、すべてのストラテジーでは、より良い結果を得るために事前のテストと最適化が必要になる場合があります。

すべてのコードはMQL5によって記述され、MT5でテストされます。

この記事の主題である移動平均自体を使用する場合でも、任意のストラテジーに基づいて生成されたシグナルをフィルタリングするために使用できるストラテジーはたくさんあります。この記事の目的は、移動平均ストラテジーのいくつかと、アルゴリズム取引システムを設計する方法を共有して、何ができるか、そしてどのように取引戦略を発展させることができるかについて知らせそして目を開くことです。それでは、このテーマ「さまざまな移動平均システムの設計方法を学ぶ」について説明します。これを皆さんと共有できることを非常にうれしく思います…


移動平均の定義


移動平均はテクニカル分析で一般的に使用される指標であり、特定の期間の価格から平均を与えるように計算されます。つまり、短期的な動きのランダムまたは変動を軽減するためにチャート上の価格データを平滑化するのに役立ちます。

移動平均には多くの種類があり、それらの違いは、次のトピックで詳しく説明するように、計算の違いに関連しています。しかし、ここでさらに詳しく知ってほしいのは、最良の結果を得るための計算のために、多くのタイプとそれらの違いがあるということです。

移動平均は、価格によって計算されるため、トレンドフォロー系指標です。したがって、価格が特定のトレンドで移動する場合、移動平均は同じトレンドに従います。

移動平均は、価格の後に移動するための遅行指標です。指標は価格によって計算されるので価格が最初に移動する必要があるため、これは正常です。つまり、最初に価格データを取得する必要があります。その後、これらの価格データを計算して移動平均データを見つけることができます。

移動平均の性質によれば、移動平均は次のように理解できます。

  • 平均を与えます。
  • トレンドのある市場でうまく機能します。
  • トレンドがあることを確認するか、トレンドを特定するのに役立ちます。
  • 価格からノイズやランダムな動きを取り除きます。
  • ランダムな動きによるホイップソーや誤ったブレイクアウトを排除して回避するのに役立ちます。
  • その他…...

移動平均の種類


使用できる移動平均には多くの種類があり、最も一般的に使用されるのは次のとおりです。

  • 単純移動平均
  • 加重移動平均
  • 指数移動平均

前に述べたように、それらの主な違いは、より良い結果を得るための計算の違いに関連しています。

そこで、これらの種類の移動平均を特定し、それらの違いを探ります。また、これらの移動平均をMQL5で使用する方法、または特定の種類の移動平均を使用する場合にそれらを呼び出す方法についても説明します。

単純移動平均:

移動平均の最も単純な形式またはタイプであり、一般的に使用される略称はSMAです。

特定の期間における特定の値のセットの算術平均をとることによって計算されます。または、価格のセットを合計してから、セット内の価格の数で除算します。

SMA

例: 5取引日があり、この5日間の終値は次のとおりだとします。

  • Day1 = 10
  • Day2 = 15
  • Day3 = 20
  • Day4 = 30
  • Day5 = 35

この5日間のSMAを取得する場合、次のように計算されます。


SMAの例

加重移動平均

一般的に使用される加重移動平均(WMA)は、特定の期間の価格の平均を示しますが、最近のデータの重みが大きくなるため、ここでの差があります。つまり、10取引日を計算すると、この種の平均では10取引日すべての重みは得られませんが、最近のデータにより多くの重みが与えられます。

次の式と同じように計算できます。

WMA


例:

同じ5取引日があり、この5日間の終値が次の場合:

  • Day1 = 10
  • Day2 = 15
  • Day3 = 20
  • Day4 = 30
  • Day5 = 35

この5日間のWMAを取得する場合、次のように計算されます。

WMAの例


WMAの例1


指数移動平均

一般的に使用される指数移動平均またはEMAです。価格の平均を示し、ここでの違いは、EMAがMAで計算された期間の前の期間をキャンセルしないことです。つまり、10 MAを計算する必要がある場合、それらの10取引日の前の期間が考慮されます。

次のように計算できます。

まず、間隔の重みを計算するための指数を表す「K」を計算し、間隔の数を表す「n」を計算します。

EMA

この場合

EMA

例:

同じ5取引日があり、この5日間の終値が次の場合:

  • Day1 = 10
  • Day2 = 15
  • Day3 = 20
  • Day4 = 30
  • Day5 = 35
  • Day6 = 40

この5日間のEMAを取得する場合、次のように計算されます。

EMAの例


EMAの例

ここでは、昨日のEMAがDay6で初めてEMAを計算するため、5日間のSMAを使用します(22)。


ここで、移動平均とは何か、移動平均の種類を特定した後、この記事で最も興味深い部分を見ていきます。移動平均ストラテジーと、それらのアルゴリズム取引システムを設計する方法について説明します。


ストラテジー1: 1つの移動平均クロスオーバー

この記事では、単純移動平均を選択しますが、コードでは任意の移動平均タイプを使用できます。

ストラテジーによれば、価格とSMAはティックごとに確認されます。

  • 価格>SMA: シグナルは買いで、このシグナルをチャートにコメントとして表示します。
  • 価格<SMA: シグナルは売りで、このシグナルをチャートにコメントとして表示します。
  • その他の場合は、何もしません。

次のスクリーンショットは、設計したい1つの単純移動平均の青写真を示しています。

1MA青写真


このストラテジーを設計するためのコードは次のとおりです。

//+------------------------------------------------------------------+
//|                                            One SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for price
   double myMovingAverageArray1[];
   
   //define Ask, Bid
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   //define the properties of  MAs - simple MA 24
   int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   
   //sort the price arrays current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   
   //Defined MA - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   
   //Check if we have a buy entry signal
   if (
      (Ask>myMovingAverageArray1[0])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (Bid<myMovingAverageArray1[0])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+

次のスクリーンショットは、コードの実行後に生成されたシグナルを示しています。

1MA - 買いシグナル

1MA - 売りシグナル

ストラテジー2: 2つの移動平均クロスオーバー

このストラテジーでは、2つの単純移動平均を使用します。短い単純移動平均期間は24で、長い1期間は50です。

このストラテジーによれば、ティックごとに2つの単純移動平均を確認する必要があります。

  • 24 SMA> 50 SMAの場合: シグナルは買いで、このシグナルをチャートにコメントとして表示します。
  • 24 SMA <50 SMAの場合:シグナルは売りで、このシグナルをチャートにコメントとして表示します。
  • その他の場合は、何もしません。

次のスクリーンショットは、設計したい2つの単純移動平均の青写真を示しています。

2MA青写真


このストラテジーを設計するためのコードは次のとおりです。

//+------------------------------------------------------------------+
//|                                            Two SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for several prices
   double myMovingAverageArray1[], myMovingAverageArray2[];
   
   //define the properties of  MAs - simple MA, 1st 24 / 2nd 50
   int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int movingAverage2 = iMA(_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE);
   
   //sort the price arrays 1, 2 from current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   ArraySetAsSeries(myMovingAverageArray2,true);
   
   //Defined MA1, MA2 - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2);
   
   //Check if we have a buy entry signal
   if (
      (myMovingAverageArray1[0]>myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray2[1])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (myMovingAverageArray1[0]<myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray2[1])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+

次のスクリーンショットは、コードの実行後に生成されたシグナルを示しています。

2MA - 買いシグナル


2MA - 売りシグナル


ストラテジー3: 3つの移動平均クロスオーバー

このストラテジーでは、3つの単純移動平均を使用します。短い単純移動平均期間は10、長い1期間は48、間の期間は24です。

ストラテジーによれば、ティックごとに3つの単純移動平均を確認する必要があります。

  • 10 SMA>24 SMA、10 SMA>48 SMA、24 SMA>48 SMAの場合: シグナルは買いで、このシグナルをチャートにコメントとして表示します。
  • 10 SMA<24 SMA、10 SMA<48 SMA、24 SMA<48 SMAの場合: シグナルは売りで、このシグナルをチャートにコメントとして表示します。
  • その他の場合は、何もしません。

次のスクリーンショットは、設計したい3つの単純移動平均の青写真を示しています。

3MA青写真


このストラテジーを設計するためのコードは次のとおりです。

//+------------------------------------------------------------------+
//|                                          Three SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for several prices
   double myMovingAverageArray1[], myMovingAverageArray2[],myMovingAverageArray3[];
   
   //define the properties of  MAs - simple MA, 1st 10 / 2nd 24, 3rd 48
   int movingAverage1 = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int movingAverage2 = iMA(_Symbol,_Period,24,0,MODE_SMA,PRICE_CLOSE);
   int movingAverage3 = iMA(_Symbol,_Period,48,0,MODE_SMA,PRICE_CLOSE);
   
   //sort the price arrays 1, 2, 3 from current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   ArraySetAsSeries(myMovingAverageArray2,true);
   ArraySetAsSeries(myMovingAverageArray3,true);
   
   //Defined MA1, MA2, MA3 - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2);
   CopyBuffer(movingAverage3,0,0,3,myMovingAverageArray3);
   
   //Check if we have a buy entry signal
   if (
      (myMovingAverageArray1[0]>myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray2[1])
   && (myMovingAverageArray1[0]>myMovingAverageArray3[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray3[1])
   && (myMovingAverageArray2[0]>myMovingAverageArray3[0])
   && (myMovingAverageArray2[1]<myMovingAverageArray3[1])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (myMovingAverageArray1[0]<myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray2[1])
   && (myMovingAverageArray1[0]<myMovingAverageArray3[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray3[1])
   && (myMovingAverageArray2[0]<myMovingAverageArray3[0])
   && (myMovingAverageArray2[1]>myMovingAverageArray3[1])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+

次のスクリーンショットは、コードの実行後に生成されたシグナルを示しています。

3MA - 買いシグナル


3MA - 売りシグナル


終わりに

この記事では、3つの異なるストラテジーを共有することにより、最も一般的に使用され、重要な指標の1つに言及しました。また、これらの指標をどのように使用できるか、およびそれらのそれぞれに基づいてアルゴリズム取引システムを設計する方法を示すことも試みました。事前テストと最適化の後で、これらのストラテジーはもちろん正確かつ効果的に使用できるようになります。



MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/3040

チャートをより面白くする: 背景の追加 チャートをより面白くする: 背景の追加
多くのワークステーションには、ユーザーに関する何かを語る代表的な画像が含まれています。これらの画像は、作業環境をより美しくエキサイティングなものにします。背景を追加してチャートをより面白くする方法を見てみましょう。
単一チャート上の複数インジケータ(第01部): 概念 単一チャート上の複数インジケータ(第01部): 概念
今日は、チャート上の個別の領域を占有せずに1つのチャートで同時に実行される複数のインジケータを追加する方法を学習します。多くのトレーダーは、一度に複数のインジケータ(例: RSI、STOCASTIC、MACD、ADX)を監視する、または場合によってはインデックスを構成している異なるアセットで監視することによって、自信を高めることができます。
DoEasyライブラリのグラフィックス(第96部): フォームオブジェクトのグラフィックとマウスイベントの処理 DoEasyライブラリのグラフィックス(第96部): フォームオブジェクトのグラフィックとマウスイベントの処理
本稿では、フォームオブジェクトでマウスイベントを処理する機能の作成を開始し、銘柄オブジェクトに新しいプロパティとそのトラッキングを追加します。さらに、チャート銘柄で新しいプロパティが考慮/追加されて追跡されるため、銘柄オブジェクトクラスを改善します。
単一チャート上の複数インジケータ(第02部): 実験1 単一チャート上の複数インジケータ(第02部): 実験1
前回の「単一チャート上の複数インジケータ」稿では、単一のチャートで複数のインジケータを使用する方法の概念と基本を説明しました。この記事では、ソースコードを提供して詳しく説明します。