
さまざまな移動平均システムを設計する方法を学ぶ
はじめに
取引経験の期間に関わらず、「トレンドは友達です」という言葉を聞いたことがあると思います。聞いたことがないとしたら、ここで何を意味するのかというと、さまざまなタイプの市場の方向性や価格変動の傾向があることを知っているということです。
- 上昇トレンド: 高値と安値が上がった場合に見ることができます
- 下降トレンド: 価格が上昇トレンドの反対である場合(高値と安値が下がった場合)に見ることができます
- 横向き: 上昇トレンドと下降トレンドを除くすべての動きです。
次の図では、上昇トレンドと下降トレンドを折れ線グラフとして示しています。それらを除くすべての動きは横向きです。
これでトレンドを特定しましたが、トレンドはなぜ友達なのでしょうか。
上昇トレンドと下降トレンドのどちらにも明確な動きがあるため、ここではそれらについて説明します。ある特定の市場参加者のコントロールを見てみます。上昇トレンドの間は、供給が何であれ買い手が価格が押し上げるので、買い手がコントローラーであることがわかります。この市場を強気市場と呼びます。逆に、下降トレンドの間は、売り手が価格を押し下げるため、売り手がコントローラーであることがわかります。この市場を弱気市場と呼びます。
ただし、場合によっては、ホイップソーまたは誤ったブレイクアウトと呼ばれるものが発生することがあります。偽のブレイクアウトは取引結果に害を及ぼす可能性があります。どうしてでしょうか。ここでは何が発生するかを見ていきますが、まずホイップソーまたは偽のブレイクアウトとは何かを特定しましょう。
偽のブレイクアウトは、決定を下すきっかけとなるが、決定を下した後で市場がその決定に反対するようなシグナルです。この手の決定は間違いなく取引結果に悪影響を及ぼします。これらの偽のブレイクアウトまたはホイップソーは、多くのストラテジーでフィルタリングすることで減らすことができます。それを行う最良のストラテジーの1つは移動平均を使用することです。これは、移動平均ストラテジーのいくつかを使用する方法と、それらのアルゴリズム取引システムを設計して正確、簡単、体系的に使用する方法を学ぶというこの記事の主題です。
この記事では、次のトピックについて説明します。
免責事項: この記事の内容はすべて、教育のみを目的として作成されており、他を目的にしていません。したがって、この記事の内容はいかなる種類の結果も保証するものではないため、この記事の内容に基づいて何らかのアクションを取る場合は自己責任となります。この記事の主な目的は教育目的のみであると述べましたが、すべてのストラテジーでは、より良い結果を得るために事前のテストと最適化が必要になる場合があります。
すべてのコードはMQL5によって記述され、MT5でテストされます。
この記事の主題である移動平均自体を使用する場合でも、任意のストラテジーに基づいて生成されたシグナルをフィルタリングするために使用できるストラテジーはたくさんあります。この記事の目的は、移動平均ストラテジーのいくつかと、アルゴリズム取引システムを設計する方法を共有して、何ができるか、そしてどのように取引戦略を発展させることができるかについて知らせそして目を開くことです。それでは、このテーマ「さまざまな移動平均システムの設計方法を学ぶ」について説明します。これを皆さんと共有できることを非常にうれしく思います…
移動平均の定義
移動平均はテクニカル分析で一般的に使用される指標であり、特定の期間の価格から平均を与えるように計算されます。つまり、短期的な動きのランダムまたは変動を軽減するためにチャート上の価格データを平滑化するのに役立ちます。
移動平均には多くの種類があり、それらの違いは、次のトピックで詳しく説明するように、計算の違いに関連しています。しかし、ここでさらに詳しく知ってほしいのは、最良の結果を得るための計算のために、多くのタイプとそれらの違いがあるということです。
移動平均は、価格によって計算されるため、トレンドフォロー系指標です。したがって、価格が特定のトレンドで移動する場合、移動平均は同じトレンドに従います。
移動平均は、価格の後に移動するための遅行指標です。指標は価格によって計算されるので価格が最初に移動する必要があるため、これは正常です。つまり、最初に価格データを取得する必要があります。その後、これらの価格データを計算して移動平均データを見つけることができます。
移動平均の性質によれば、移動平均は次のように理解できます。
- 平均を与えます。
- トレンドのある市場でうまく機能します。
- トレンドがあることを確認するか、トレンドを特定するのに役立ちます。
- 価格からノイズやランダムな動きを取り除きます。
- ランダムな動きによるホイップソーや誤ったブレイクアウトを排除して回避するのに役立ちます。
- その他…...
移動平均の種類
使用できる移動平均には多くの種類があり、最も一般的に使用されるのは次のとおりです。
- 単純移動平均
- 加重移動平均
- 指数移動平均
前に述べたように、それらの主な違いは、より良い結果を得るための計算の違いに関連しています。
そこで、これらの種類の移動平均を特定し、それらの違いを探ります。また、これらの移動平均をMQL5で使用する方法、または特定の種類の移動平均を使用する場合にそれらを呼び出す方法についても説明します。
単純移動平均:
移動平均の最も単純な形式またはタイプであり、一般的に使用される略称はSMAです。
特定の期間における特定の値のセットの算術平均をとることによって計算されます。または、価格のセットを合計してから、セット内の価格の数で除算します。
例: 5取引日があり、この5日間の終値は次のとおりだとします。
- Day1 = 10
- Day2 = 15
- Day3 = 20
- Day4 = 30
- Day5 = 35
この5日間のSMAを取得する場合、次のように計算されます。
加重移動平均
一般的に使用される加重移動平均(WMA)は、特定の期間の価格の平均を示しますが、最近のデータの重みが大きくなるため、ここでの差があります。つまり、10取引日を計算すると、この種の平均では10取引日すべての重みは得られませんが、最近のデータにより多くの重みが与えられます。
次の式と同じように計算できます。
例:
同じ5取引日があり、この5日間の終値が次の場合:
- Day1 = 10
- Day2 = 15
- Day3 = 20
- Day4 = 30
- Day5 = 35
この5日間のWMAを取得する場合、次のように計算されます。
指数移動平均
一般的に使用される指数移動平均またはEMAです。価格の平均を示し、ここでの違いは、EMAがMAで計算された期間の前の期間をキャンセルしないことです。つまり、10 MAを計算する必要がある場合、それらの10取引日の前の期間が考慮されます。
次のように計算できます。
まず、間隔の重みを計算するための指数を表す「K」を計算し、間隔の数を表す「n」を計算します。
この場合
例:
同じ5取引日があり、この5日間の終値が次の場合:
- Day1 = 10
- Day2 = 15
- Day3 = 20
- Day4 = 30
- Day5 = 35
- Day6 = 40
この5日間のEMAを取得する場合、次のように計算されます。
ここでは、昨日のEMAがDay6で初めてEMAを計算するため、5日間のSMAを使用します(22)。
ここで、移動平均とは何か、移動平均の種類を特定した後、この記事で最も興味深い部分を見ていきます。移動平均ストラテジーと、それらのアルゴリズム取引システムを設計する方法について説明します。
ストラテジー1: 1つの移動平均クロスオーバー
この記事では、単純移動平均を選択しますが、コードでは任意の移動平均タイプを使用できます。
ストラテジーによれば、価格とSMAはティックごとに確認されます。
- 価格>SMA: シグナルは買いで、このシグナルをチャートにコメントとして表示します。
- 価格<SMA: シグナルは売りで、このシグナルをチャートにコメントとして表示します。
- その他の場合は、何もしません。
次のスクリーンショットは、設計したい1つの単純移動平均の青写真を示しています。
このストラテジーを設計するためのコードは次のとおりです。
//+------------------------------------------------------------------+ //| 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"); } } //+------------------------------------------------------------------+
次のスクリーンショットは、コードの実行後に生成されたシグナルを示しています。
ストラテジー2: 2つの移動平均クロスオーバー
このストラテジーでは、2つの単純移動平均を使用します。短い単純移動平均期間は24で、長い1期間は50です。
このストラテジーによれば、ティックごとに2つの単純移動平均を確認する必要があります。
- 24 SMA> 50 SMAの場合: シグナルは買いで、このシグナルをチャートにコメントとして表示します。
- 24 SMA <50 SMAの場合:シグナルは売りで、このシグナルをチャートにコメントとして表示します。
- その他の場合は、何もしません。
次のスクリーンショットは、設計したい2つの単純移動平均の青写真を示しています。
このストラテジーを設計するためのコードは次のとおりです。
//+------------------------------------------------------------------+ //| 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"); } } //+------------------------------------------------------------------+
次のスクリーンショットは、コードの実行後に生成されたシグナルを示しています。
ストラテジー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つの単純移動平均の青写真を示しています。
このストラテジーを設計するためのコードは次のとおりです。
//+------------------------------------------------------------------+ //| 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"); } } //+------------------------------------------------------------------+
終わりに
この記事では、3つの異なるストラテジーを共有することにより、最も一般的に使用され、重要な指標の1つに言及しました。また、これらの指標をどのように使用できるか、およびそれらのそれぞれに基づいてアルゴリズム取引システムを設計する方法を示すことも試みました。事前テストと最適化の後で、これらのストラテジーはもちろん正確かつ効果的に使用できるようになります。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/3040





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索