English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
標準偏差による取引システムの設計方法を学ぶ

標準偏差による取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 31 10月 2022, 10:05
373 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

連載の新しい記事へようこそ。この連載を通じて、最も人気のあるテクニカル指標で取引システムを作成する方法を学びます。この新しい記事では、取引を強化するために使用できる新しいツールについて詳しく学び、その背後にある基本概念に基づいて取引システムを作成する方法を学びます。この新しい指標は、標準偏差指標です。この指標を次のトピックを通して詳しくカバーしていきます。

  1. 標準偏差の定義
  2. 標準偏差戦略
  3. 標準偏差戦略の設計図
  4. 標準偏差取引システム
  5. 結論

「標準偏差の定義」トピックを通じて、標準偏差とは何か、それが測定するもの、およびその値を手動で計算してその背後にある基本概念を学習する方法をより詳細に学習し、それを例に適用して標準偏差を計算します。その後、「標準偏差戦略」トピックに移り、指標の基本概念に基づく簡単な戦略を通じて標準偏差指標を使用する方法を学びます。次に、「標準偏差戦略の設計図」トピックに移り、各戦略の取引システムを作成するのに役立つ設計図を設計します。この設計図は、この取引システムをスムーズに作成するためのアイデアを整理するための段階的な設計図になります。その後、この記事で最も興味深いトピックに移動します。これは、MetaTrader 5でシグナルを自動的に生成するために使用される各戦略の取引システムを作成するための「標準偏差取引システム」です。

MetaTrader 5とMetaEditorを使用してMQL5(MetaQuates言語)コードを記述し、取引システムを作成します。MetaEditorをダウンロードして使用する方法がわからない場合は、以前の記事の「MetaEditorでMQL5コードを書く」トピックを読んで詳しく学ぶことができます。

記事の情報を最大限に活用するために、自分で学んだことを適用して理解を深め、トピックまたは関連トピックについてより多くの洞察を得ることをお勧めします。それに加えて、実際の講座で使用する前に自分で戦略をテストして、それが役立つことを確認する必要があります。すべての人に適した戦略は存在しません。

免責条項:すべての情報は「現状有姿」で提供され、情報提供のみを目的としており、取引目的やアドバイスを目的としたものではありません。いかなる結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。

トピックを開始して、新しいツールを学びましょう。


標準偏差の定義

このトピックでは、標準偏差指標とは何かを定義してそれが測定するものを知ることによってより詳しく学習し、手動で計算してその背後にある基本概念を学習します。次に、この計算を例に適用します。

標準偏差は統計学の用語です。この統計用語は、平均値を中心とした分散を測定します。でも、分散とは何でしょうか。簡単に言えば、実際の値と平均値との差です。分散が高いほど標準偏差が高くなり、分散が低いほど標準偏差は低くなります。標準偏差指標は、ボラティリティを測定します。

ここで、標準偏差を計算する方法を学びます。これは、次の手順で簡単におこなうことができます。

1 - 希望する期間の平均値を計算する

2 - 平均値から各終値を減算して偏差を計算する

3 - 計算された各偏差を二乗する

4 - 偏差の二乗を合計し、それを観測数で徐算する

5 - 手順4の結果の平方根に等しい標準偏差を計算する

理解を深めるために、以下はこの計算を適用する例です。ある商品について、次のようなデータがあったとします。

# 終値
1 1.05535
2 1.05829
3 1.0518
4 1.04411
5 1.04827
6 1.04261
7 1.04221
8 1.02656
9 1.01810
10 1.01587
11 1.01831

手順1:10期間の移動平均を計算し、10番目の移動平均までのすべての移動平均が同じ移動平均であると見なします。以下はそれを計算した結果です。

手順1

手順2:偏差を計算します。以下は計算後の結果です。

手順2

手順3:偏差の二乗を計算します。

手順3

手順4:偏差の2乗の10期間の平均を計算します。

手順4

手順5:標準偏差(=手順4の結果の平方根)を計算します。

手順5

前の手順で、標準偏差値を計算しました。今日ではMetaTrader 5取引プラットフォームの組み込み指標であって手動で計算する必要がないので、非常に幸運です。取引プラットフォームで利用可能な指標から選択するだけです。以下は、それをおこなう方法です。

MetaTrader 5取引プラットフォームを開き、[挿入]タブで、[インディケータ] > [トレンド系] > [Standard Deviation]の順に選択します。

 Std Devの挿入

その後、次の指標パラメータ用のウィンドウが表示されます。

 Std Devのパラメータ

1 - 使用する期間を決定する

2 - 必要に応じて、指標の線の水平シフトの量を決定する

3 - 移動平均の種類を選択する

4 - 計算に使用する価格の種類を選択する

5 - 指標の色を決定する

6 - 線のスタイルを決定する

7 - DIの線の太さを決定する

必要なパラメータを決定した後、次のように指標がチャートに挿入されたのがわかります。

 Std Dev指標の接続

前の図でわかるように、標準偏差指標が挿入され、標準偏差値に基づく振動線として下のウィンドウに表示されます。

このトピックを通じて、標準偏差指標について詳しく学び、標準偏差指標とは何か、それが測定するもの、および手動で計算してその背後にある基本概念を理解し、この計算を例に適用する方法を学びました。


標準偏差戦略

このトピックでは、標準偏差指標について詳しく学び、その主な概念を学習した後、その背後にある基本概念に基づいて、この標準偏差指標を使用する方法を学習します。3つの簡単な戦略を通じて、標準偏差指標の使用方法を学習します。最初のSimple Std Dev - Volatility指標は、ボラティリティがあるかどうかを知るために使用されます。2つ目のSimple Std Dev - Std and MAでは、移動平均を使用して売買シグナルを取得します。3つ目のStd Dev - Std, Avg, and MAは、売買シグナルを得るために高いボラティリティを確認した後、移動平均とともに使用されます。

  • 戦略1:Simple Std Dev - Volatility

この戦略では、現在の標準偏差値と前回の5つの標準偏差値の平均との比較に基づいてボラティリティを測定する必要があります。現在の標準偏差値が標準偏差値の5期間平均を上回る場合、これは高ボラティリティシグナルになります。現在の標準偏差値が標準偏差値の5期間平均を下回る場合、これは低ボラティリティになります。

現在の標準偏差値 > 標準偏差値の平均 -- > 高ボラティリティ

現在の標準偏差値 < 標準偏差値の平均 -- > 低ボラティリティ

  • 戦略2:Simple Std Dev - Std and MA

この戦略では、特定の条件に基づいて売買シグナルを取得する必要があります。現在の標準偏差値が前回の標準偏差値を上回り、売値が移動平均を上回る場合、これは買いシグナルになります。現在の標準偏差値が前回の標準偏差値を上回り、買値が移動平均を下回る場合、これは売りシグナルになります。

現在の標準偏差値 > 前回の標準偏差値かつ売値 > MA -- > 買いシグナル

現在の標準偏差値 > 前回の標準偏差値かつ買値 < MA -- > 売りシグナル

  • 戦略3:Simple Std Dev - Std, Std AVG, and MA

この戦略では、他の条件に基づいて売買シグナルを取得する必要があります。現在の標準偏差値が標準偏差値の平均を上回り、売値が移動平均を上回る場合、これは買いシグナルになります。現在の標準偏差値が標準偏差値の平均を上回り、買値が移動平均を下回る場合、これは売りシグナルになります。

現在の標準偏差値 > 標準偏差値の平均かつ売値 > MA -- > 買いシグナル

現在の標準偏差値 > 標準偏差値の平均かつ買値 < MA -- > 売りシグナル

前回の戦略を通じて、ボラティリティを測定し、2つの異なる条件セットに基づいて売買シグナルを取得するための3つの簡単な戦略を通じて標準偏差指標を使用する方法を学びました。また、他のテクニカル指標を併合して、取引計画と戦略に基づいて、金融商品の複数の観点からより多くの洞察を得ることもできます。


標準偏差戦略の設計図

このトピックでは、言及された各戦略に基づいて取引システムを作成するのに役立つように、各戦略の段階的な設計図を設計する方法を学びます。私の意見では、取引システムをスムーズかつ簡単に作成するのに役立つ方法でアイデアを整理するのに役立つため、この手順は非常に重要です。次に、正確に何をする必要があるかをコンピューターに知らせるのに役立つ設計図を紹介します。

  • 戦略1:Simple Std Dev - Volatility

この戦略によれば、2つの値を確認し、それらを継続的に比較する取引システムが必要です。これら2つの値は、現在の標準偏差値と前回の5つの標準偏差値の平均です。その後、取引システムでどちらが大きいかを判断します。現在の標準偏差値が平均を上回る場合は、チャートに次のコメントを表示します。

  • 高ボラティリティ
  • 現在の標準偏差値
  • 標準偏差値の5期間平均

現在の標準偏差値が平均を下回る場合は、チャートに次のコメントを表示します。

  • 低ボラティリティ
  • 現在の標準偏差値
  • 標準偏差値の5期間平均
次の図は、Simple Std Dev - Volatility戦略の段階的な設計図です。

Simple Std Dev - Volatilityの設計図

  • 戦略2:Simple Std Dev - Std and MA

この戦略では、4つの値を確認し、継続的に比較を実行する取引システムが必要です。これらの4つの値は、現在の標準偏差、前回の標準偏差、売値、移動平均値です。これらの値を確認した後、それに基づいて適切なシグナルを決定して表示する取引システムが必要です。

現在の標準偏差値が前回の標準偏差値を上回り、売値が移動平均を上回る場合、取引システムが次の値でチャートにコメントを生成します。

  • 買いシグナル
  • 現在の標準偏差値
  • 前回の標準偏差値
  • 売値
  • 移動平均値

現在の標準偏差値が前回の標準偏差値を上回り、買値が移動平均を下回る場合、取引システムが次の値でチャートにコメントを生成します。

  • 売りシグナル
  • 現在の標準偏差値
  • 前回の標準偏差値
  • 買値
  • 移動平均値
次の図は、Simple Std Dev - Std and MA戦略の段階的な設計図です。

 Simple Std Dev - Std _ MAの設計図

  • 戦略3:Simple Std Dev - Std, Avg, and MA

この戦略では、取引システムは4つの値を継続的に確認して、これらの値の比較に基づいてどのシグナルを確認する必要があるかを判断する必要があります。これらの値は、現在の標準偏差値、標準偏差値の平均、売値、移動平均です。

現在の標準偏差値が標準偏差値の平均を上回り、売値が移動平均を上回る場合、取引システムは、次の値を持つチャートのコメントとしてシグナルを生成します。

  • 買いシグナル
  • 現在の標準偏差値
  • 標準偏差の平均値
  • 売値
  • 移動平均値

現在の標準偏差値が標準偏差値の平均を上回り、買値が移動平均を下回る場合、取引システムは、次の値を持つチャートのコメントとしてシグナルを生成します。

  • 売りシグナル
  • 現在の標準偏差値
  • 標準偏差の平均値
  • 買値
  • 移動平均値
次の図は、Simple Std Dev - Std, Std Avg, and MA戦略の段階的な設計図です。

Simple Std Dev - Std Dev _ Avg _ MAの設計図

ここでは、各戦略の段階的な設計図を設計して、組織化された手順でそれらの取引システムを作成するのに役立つことを学びました。 


標準偏差取引システム

このトピックでは、言及された各戦略の取引システムをMetaTrader 5に適用されるMQL5で設計する方法を学びます。最初に、標準偏差値を使用して目的のチャートにコメントを生成する簡単な標準偏差の取引システムを設計します。この取引システムを基盤として使用して、各戦略の取引システムを設計します。  

  • 小数値を表すdoubleを使用して標準偏差の配列を作成します。doubleは、データ型の1つである浮動小数点型の1つです。
double StdDevArray[];
  • この配列を現在のデータから並び替えます。これにはArraySetAsSeries関数を使用してtrueまたはfalseのブール値を返します。ArraySetAsSeriesのパラメータは次の通りです。
    • 配列
    • フラグ
ArraySetAsSeries(StdDevArray,true);
  • 標準偏差指標のハンドルを返すiStdDev関数を使用して、標準偏差を定義するStdDevDefの整数変数を作成します。この関数のパラメータは次の通りです。
    • _Symbol:現在のチャートに適用される銘柄名
    • _Period:現在の時間枠に適用される期間
    • ma_period:移動平均の長さ(デフォルトの20を使用)
    • ma_shift:水平シフト(0を使用)、必要に応じて各自設定
    • ma_method:移動平均のタイプ、単純移動平均(MODE_SMA)を使用
    • applied_price:使用する価格タイプを、終値(PRICE_CLOSE)を使用
int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
  • CopyBuffer関数を使用して価格データを標準偏差の配列にコピーし、コピーされたデータ数を返すか、エラーが発生した場合は-1を返します。この関数のパラメータは次の通りです。
    • indicator_handle:指標の定義(「StdDevDef」を指定)
    • buffer_num:指標のバッファ番号(0を指定)
    • start_pos:開始位置(0を指定)
    • count:コピーする量(3を指定)
    • buffer[]:コピーのターゲット配列(「StdDevArray」を指定)
CopyBuffer(StdDevDef,0,0,3,StdDevArray);
  • double変数StdDevValを作成した後、NormalizeDouble関数を使用してdouble型の標準偏差値を取得します。Normalizedoubleのパラメータは次の通りです。
    • value:正規化された数値(「StdDevArray[0]」を指定)
    • digits:小数点以下の桁数(6を指定)
double StdDevVal = NormalizeDouble(StdDevArray[0],6);
  • Comment関数を使用して、現在の標準偏差値でチャートにコメントを表示します。戻り値はありませんが、定義されたコメントが出力されます。
Comment("StdDev Value is",StdDevVal);

 このコードをコンパイルすると、エラーや警告がないことがわかります。この取引システムのエキスパートアドバイザー(EA)がナビゲータウィンドウで次のように表示されるようになります。

標準偏差n1

目的のチャートにドラッグ&ドロップすると、取引システムの次のウィンドウが表示されます。

Simple Std Devウィンドウ

[アルゴリズム取引を許可する]の横にチェックを入れて[OK]を押すと、この取引システムのEAが以下のようにチャートに追加されます。

 Simple Std Devの接続

前の図の右隅にあるように、EAがチャートに接続されていることがわかります。

次の図は、この取引システムに従って生成されたシグナルが表示されているテストからの例です。

Simple Std Devのシグナル

次の図は、この取引システムのEAを接続してシグナルを自動的に生成した後の別の例です。同時に、組み込みの標準偏差指標を挿入して、両方の標準偏差値が同じであることを確認します。

 Simple Std Devの同じシグナル 

  • 戦略1:Simple Std Dev - Volatility

ここで、Simple Std Dev - Volatility戦略用の取引システムを作成します。以下は、この戦略に基づいて取引システムを作成するための完全なコードです。

//+------------------------------------------------------------------+
//|                                  Simple Std Dev - Volatility.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"
//+------------------------------------------------------------------+
void OnTick()
  {
   double StdDevArray[];

   ArraySetAsSeries(StdDevArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

  }
//+------------------------------------------------------------------+

このコードの違いは、以下の通りです。

現在の標準偏差値を定義するだけでなく、現在の値を定義するのと同じ関数を使用して前回の5つの値を定義しますが、正規化された数値で異なる数値を使用して目的の値を提供します。

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);

前回の5つの値の平均を計算します。

double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

戦略の条件:

ボラティリティが高い場合

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

ボラティリティが低い場合

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

このコードをコンパイルすると、ナビゲータに次のように表示されます。

標準偏差n2

目的のチャートにドラッグ&ドロップすると、この取引システムのウィンドウが次のように表示されます。

 Simple Std Dev - Volatilityのウィンドウ

[OK]を押すと、以下のようにEAがチャートに添付され、この戦略に従ってシグナルの生成を開始します。

Simple Std Dev - Volatilityの接続

前の図の右上隅にあるように、Simple Std Dev - Volatility取引システムのEAが接続されていることがわかります。

次の図では、この取引システムに従って生成されたシグナルのテストからの例を確認できます。

高ボラティリティの場合

 Simple Std Dev - Volatility - 高シグナル

前の図でわかるように、チャートの左上隅に3行のコメントがあります。

  • 高ボラティリティ
  • 現在の標準偏差値
  • 前回の5つの標準偏差値の平均

低ボラティリティの場合

Simple Std Dev - Volatility - 低シグナル

前の図でわかるように、チャートの左上隅に次の3行のコメントが追加されています。

  • 低ボラティリティ
  • 現在の標準偏差値
  • 前回の5つの標準偏差値の平均
ここまでで、測定値としてボラティリティを知らせるシグナルを生成できる取引システムを作成する方法を学びました。
  • 戦略2:Simple Std Dev - Std and MA

次のコードは、このSimple Std Dev - Std and MA戦略の取引システムを作成する方法を示しています。

//+------------------------------------------------------------------+
//|                                    Simple Std Dev - Std & MA.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"
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,3,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

   double MAValue = NormalizeDouble(PArray[0],6);


   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }

//+------------------------------------------------------------------+

このコードの違いは、次の通りとなります。

NormalizeDouble関数を使用してdouble型の値を返し、SymbolInfoDoubleを正規化された数値として使用して、特定の銘柄の対応するプロパティを返すことにより、売値および買値を定義します。  SymbolInfoDoubleのパラメータは次の通りです。

  • 銘柄の名前:現在の銘柄チャートに適用される「_Symbol」を使用
  • prop_id:プロパティを定義(ここでは「SYMBOL_ASK」)
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

価格の配列をもう1つ作成します。

double PArray[];

この配列を現在のデータから並べ替えます。

ArraySetAsSeries(PArray,true);

MADefの整数変数を作成した後、iMA関数を使用して移動平均を定義します。

int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

この作成された配列に価格データをコピーします。

CopyBuffer(MADef,0,0,10,PArray);

前回の標準偏差値を定義します。

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

移動平均の値を定義します。

double MAValue = NormalizeDouble(PArray[0],6);

戦略の条件:

買いシグナルの場合

   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

売りシグナルの場合

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

このコードをコンパイルすると、ナビゲータウィンドウに下図のように表示されます。

標準偏差n3

ダブルクリックすると、次の図のように、このEAの次のウィンドウが表示されます。

Simple Std Dev MAウィンドウ

[アルゴリズム取引を許可する]の横にチェックを入れ、[OK]を押すと、下の図のようにEAがチャートに追加されます。

Simple Std Devの接続

チャートの右上にEAが添付されていることがわかります。次にあるのは、この戦略に従ってテストした例です。

買いシグナルの場合

 Simple Std Dev - Std _ MA - 買いシグナル

前回の買いシグナルの例からわかるように、チャートの左上隅に5行のコメントがあります。

  • 買いシグナル
  • 現在の標準偏差値
  • 前回の標準偏差値
  • 売値
  • MA値

売りシグナルの場合

 Simple Std Dev - Std _ MA - 売りシグナル

前回の売りシグナルの例からわかるように、チャートの左上隅に5行のコメントがあります。

  • 売りシグナル
  • 現在の標準偏差値
  • 前回の標準偏差値
  • 買値
  • MA値

ここまでで、標準偏差と移動平均に基づいて売買シグナルを生成するために使用できる取引システムを作成する方法を学びました。

  • 戦略3:Simple Std Dev - Std Dev, Std Avg, and MA

以下は、この戦略の取引システムを作成するための完全なコードです。

//+------------------------------------------------------------------+
//|                  Simple Std Dev - Std Dev & AVG Std Dev & MA.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"
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);
   double MAValue = NormalizeDouble(PArray[0],6);

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }
  
//+------------------------------------------------------------------+

このコードにおける相違点は次の通りです。

戦略条件:

買いシグナルの場合

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

売りシグナルの場合

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

このコードをコンパイルすると、ナビゲータウィンドウに下図のように表示されます。

標準偏差n4

チャート上でダブルクリックまたはドラッグ&ドロップすると、次のようなウィンドウが表示されます。

Simple Std Dev - Std Dev _ Avg _ MAウィンドウ

[OK]を押すと、EAが下の図のようにチャートに添付されていることがわかります。

 Simple Std Dev - Std Dev _ Avg _ MAの接続

チャートの右上隅でEAが接続されていることがわかります。

次に、この取引システムに基づいて生成されたシグナルの例を確認する必要があります。次の例をご覧ください。

買いシグナルの場合

Simple Std Dev - Std Dev _ Avg _ MA - 買いシグナル

前回の例のチャートの左上隅からわかるように、この取引システムは5行のコメントを生成しています。

  • 買いシグナル
  • 現在の標準偏差値
  • 標準偏差の平均値
  • 売値
  • MA値

売りシグナルの場合

 Simple Std Dev - Std Dev _ Avg _ MA - 売りシグナル

前回の売りシグナルの例からわかるように、この取引システムに基づいた5行のコメントがあります。

  • 売りシグナル
  • 現在の標準偏差値
  • 標準偏差の平均値
  • 買値
  • MA値

ここまでで、自動シグナルを生成するために使用できる、前述の各戦略に基づいて取引システムを作成する方法を学びました。


結論

これまでのトピックで、標準偏差指標について、それが何であるか、それが何を通知して何を測定するかを学び、実践を通じて指標の理解を深めるために手動で計算する方法を学びました。例に適用することによって、標準偏差指標についてさらに学習しました。指標をよく理解した後は、指標の基本的な概念に基づいた簡単な戦略を通じて、どのように使用できるかを学びました。Simple Std Dev - Volatility戦略を通じてボラティリティ測定として使用する方法を学び、Simple Std Dev - Std and MA戦略とStd, Std Avg, MA戦略を通じて、2つの異なる条件に基づいて売買シグナルを取得するために使用する方法を学びました。その後、各戦略の取引システムをスムーズかつ簡単に作成できるように、各戦略の段階的な設計図を設計する方法を学びました。その後、前述の各戦略に基づいてMQL5による取引システムを作成しました。MetaTrader 5が使用するシグナルを自動的に生成して時間を節約し、特定の条件に基づいて正確なシグナルを取得し、明確なシグナルを取得することで有害な感情や主観性を回避することができます。これらはプログラミングの利点によるものです。

これはテクニカル分析の機能の1つであるため、明確な洞察を得るためには、取引システムを設計する際に、この指標を他のテクニカル指標と一緒に使用して、金融商品の最も重要な要素について複数の視点からより多くの洞察を得ようとすると便利です。

ここでの主な目的は教育のみです。自分にとって有用または適切であることを確認するためには、戦略を使用する前に各自でテストする必要があることを再度確認したいと思います。読者がこの記事のトピックを理解し、取引を強化するのに役立つ新しいアイデアを得ることで、この記事がお役に立つことを願っています。

この記事がお役に立ち、同様の記事をお読みになりたい場合は、この連載の過去の記事を読んで、人気のあるテクニカル指標に基づいて取引システムを設計する方法を学んでください。

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

一からの取引エキスパートアドバイザーの開発(第24部):システムの堅牢性の提供(I) 一からの取引エキスパートアドバイザーの開発(第24部):システムの堅牢性の提供(I)
この記事では、堅牢で安全な使用を保証するために、システムの信頼性を高めます。望ましい堅牢性を実現する方法の1つは、コードを可能な限り再利用して、常にさまざまな場合にテストされるようにすることです。しかし、これは方法の1つにすぎません。もう1つは、OOPを使用することです。
DoEasy-コントロール(第11部):WinFormsオブジェクト—グループ、CheckedListBox WinFormsオブジェクト DoEasy-コントロール(第11部):WinFormsオブジェクト—グループ、CheckedListBox WinFormsオブジェクト
この記事では、WinFormsオブジェクトのグループ化と、CheckBoxオブジェクトリストオブジェクトの作成について検討します。
DoEasy-コントロール(第12部):基本リストオブジェクト、ListBoxおよびButtonListBox WinFormsオブジェクト DoEasy-コントロール(第12部):基本リストオブジェクト、ListBoxおよびButtonListBox WinFormsオブジェクト
この記事では、WinFormsオブジェクトリストの基本オブジェクトと、2つの新しいオブジェクトを作成します。ListBoxとButtonListBoxです。
価格変動モデルとその主な規定(第2回)。価格場の確率的発展方程式と観測されたランダムウォークの発生 価格変動モデルとその主な規定(第2回)。価格場の確率的発展方程式と観測されたランダムウォークの発生
この記事では、確率的な価格場の発展方程式と、今後の価格高騰の基準について考察しています。また、チャート上での価格値の本質と、そのランダムウォークが発生するメカニズムも明らかにします。