English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
チャイキンオシレーター(Chaikin Oscillator)による取引システムの設計方法を学ぶ

チャイキンオシレーター(Chaikin Oscillator)による取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 7 11月 2022, 10:58
310 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

ここでは、最も人気のあるテクニカル指標によって取引システムを設計する方法を学ぶ連載の完結編として、新しいテクニカル指標であるチャイキンオシレーターを取り上げます。

このテクニカル指標について、以下のトピックを通して詳しく学びます。

  1. チャイキンオシレーターの定義
  2. チャイキンオシレーター戦略
  3. チャイキンオシレーター戦略の設計図
  4. チャイキンオシレーター 取引システム
  5. 結論

上記のトピックを通して、チャイキンオシレーターによる取引システムの作成と設計の方法を順を追って学んでいきます。チャイキンオシレーターとは何か、何を測定するのか、どのように手動で計算すればその背後にある主な概念を知ることができるのか、そのすべてを「チャイキンオシレーターの定義」を通して学びます。この指標の基本的な考え方に基づいた簡単な戦略を通して、この指標の使い方を「チャイキンオシレーター戦略」を通して学びます。その後、「チャイキンオシレーター戦略の設計図」を通じて、言及した各戦略の取引システムをスムーズに作成できるよう、段階的な設計図を作成します。その後、MetaTrader5で自動的にシグナルを取得し、実行するために、それぞれの戦略に対して取引システムを作成することになります。

MQL5(MetaQuotes言語)を使って取引戦略のコードを書き、それをMetaTrader 5で実行し、自動的にシグナルを出すようにします。MetaTrader 5をダウンロードしてMQL5を使う方法を知りたい方は、以前の記事から「MetaEditorでMQL5を書く」トピックをお読みください。

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

では、トピックで記事を始めましょう。


チャイキンオシレーターの定義

このセクションでは、チャイキンオシレーターの基本的な概念を理解するために、チャイキンオシレーター指標について詳しく学びます。チャイキンオシレーターはモメンタム指標です。Marc Chaikinによって作成され、その作成者の名前を冠した指標であることが明らかです。移動平均収束発散(moving average convergence divergence、MACD)式で累積分布線のモメンタムを測定します。このモメンタムを測定することで、蓄積分布線の方向性の変化を知ることができます。

チャイキンオシレーターの概念をより理解するために手動で計算したい場合、次の手順でおこなうことができます。

  1. マネーフロー倍率 = ((終値-安値) - (高値-安値))/(高値-安値)の算出
  2. マネーフローボリューム = マネーフロー倍率*ボリュームの算出
  3. ADL (Accumulation Distribution Line)の計算 = 前回のADL+今回のマネーフローボリューム
  4. チャイキンオシレーター = (ADLの3期間EMA) - (ADLの10期間EMA)

現在では、この指標はMetaTrader 5に内蔵されているため、チャートに挿入するだけで、手動で計算する必要はありません。利用可能な指標から選択するだけです。ただし、ここでは、その背後にある主な概念を学ぶために手動で計算します。

MetaTrader 5の[挿入]タブで、[インディケータ] --> [オシレーター] --> [Chaikin Oscillator]を選択して、チャートに挿入することができます。次の図は、これらの手順に対するものです。

チャイキンオシレーターの挿入

チャイキンオシレーターを選択すると、以下のような指標のパラメータウィンドウが表示されます。

 チャイキンオシレーターのパラメータ

1 - DIの線の種類を決定する

2 - 高速移動平均の期間を決定する

3 - 低速移動平均の期間を決定する

4 - 移動平均の種類を決定する

5 - 指標の色を決定する

6 - 指標のラインタイプを決定する

7 - 指標の線の太さを決定する

これらのパラメータを決定して[OK]を押すと、以下のようにチャートに指標が挿入されることがわかります。

チャイキンオシレーターの挿入

先ほどの画像の下側に指標が挿入されていることからわかるように、指標ラインはゼロレベルの上下に振動していることがわかります。


チャイキンオシレーター戦略

このトピックでは、チャイキンオシレーターの主要な概念に基づいて、指標を使用する簡単な戦略を学びます。別のテクニカルツールを使って、いかに自分の判断を強化し、重みを持たせるかを考えることは良いアプローチになります。これは、テクニカル分析を使うことの特徴の1つです。ここで確認しておきたいのは、どんな戦略でも、実際の口座で使う前に必ずテストして、自分に合うかどうかを確認するべきだということです。特に、ここのような教育的な題材で学んだ場合はなおさらです。

  • 戦略1:Chaikin Oscillator Crossover

この戦略では、現在のチャイキン値とゼロレベルのクロスオーバーに基づいて、売買シグナルを得ます。現在のチャイキン値がゼロレベルを上回ると、買いシグナルとなります。また、チャイキン値がゼロを下回ると、売りシグナルとなります。

単純に言うと

現在のチャイキン値 > ゼロレベル → 買いシグナル

現在のチャイキン値 < ゼロレベル → 売りシグナル

  • 戦略2:Chaikin Oscillator Movement

この戦略では、最後の2つの値に基づいて、チャイキン指標曲線の動きでシグナルを得ます。現在のチャイキン値が前回の値より大きくなると、上昇のシグナルとなります。逆に、現在のチャイキン値が前回の値より低い場合は、動きが低下しているシグナルとなります。

単純に言うと

現在のチャイキン値 > 前回のチャイキン値 → 上昇の動き

現在のチャイキン値 < 前回のチャイキン値 → 下降の動き

  • 戦略3:Chaikin Oscillator - Uptrend

この戦略では、上昇トレンドの時に、現在と過去の高値、現在のチャイキン値と過去のチャイキン値を評価して、強い上昇の動きがあるか、弱気のダイバージェンスがあるかを知る必要があります。現在の高値が前回の高値を上回り、現在のチャイキン値が前回のチャイキン値を上回れば、上昇トレンド中の強い上昇のシグナルとなります。現在の高値が前回の高値を上回り、現在のチャイキンが前回のチャイキン値を下回れば、弱気ダイバージェンスのシグナルとなります。

現在のAD > 前回のAD、現在の高値 >前回の高値 → 上昇トレンド中の強い上昇の動き

現在のAD < 前回のAD、現在の高値 > 前回の高値 → 弱気ダイバージェンス

  • 戦略4:Chaikin Oscillator - Downtrend

この戦略では、下降トレンド時に、現在と前回の安値、現在と前回のチャイキン値を評価し、強い下降の動きがあるか、強気のダイバージェンスがあるかどうかを知る必要があります。今回の安値が前回の安値を下回り、今回のチャイキン値が前回のチャイキン値を下回れば、下降トレンド中の強い下降となります。現在の安値が前回を下回り、現在のチャイキン値が前回を上回れば、強気ダイバージェンスのシグナルとなります。

現在のAD < 前回のAD、現在の安値 < 前回の安値→下降トレンド中の強い下降の動き

現在のAD > 前回のAD、現在の安値 < 前回の安値 → 強気ダイバージェンス


チャイキンオシレーター戦略の設計図

このトピックでは、取引システムを構築するためのステップバイステップの設計図を作成していきます。さっそく始めましょう。

  • 戦略1:Chaikin Oscillator Crossover

この戦略によると、特定の条件が満たされると、チャート上に特定のコメントを返す取引システムを作成する必要があります。取引システムは、毎ティックごとにチャイキンオシレーターの値を確認し、この値がゼロレベルを超えたら、チャート上に買いシグナルと現在のチャイキン値をそれぞれ別の行でコメントとして表示させます。あと1つのシナリオはチャイキン値がゼロレベルを下回ったときで、売りのシグナルと現在のチャイキン値をそれぞれ別の行でコメントとして返します。

以下はこの設計図です。

Chaikin Oscillator Crossoverの設計図

  • 戦略2:Chaikin Oscillator Movement

この戦略では、取引システムは1ティックごとに2つの値を確認し、どちらが大きいかを決定する必要があります。この2つの値は、現在のチャイキンオシレーターと前回のチャイキンオシレーターです。現在の値が以前の値より大きいとき、取引システムがコメントを返すようにします。チャイキンオシレーターが上昇し、現在のチャイキン値と前回のチャイキン値がそれぞれ別個の行に表示されています。現在の値が前回を下回る場合、取引システムは、「Chaikin Oscillator is declining、現在のチャイキン値、前回のチャイキン値」をコメントとして返します。

以下は、この戦略の設計図です。

Chaikin Oscillator Movementの設計図

  • 戦略3:Chaikin Oscillator - Uptrend

この戦略では、取引システムは1ティックごとに、現在の高値、前回の高値、現在のチャイキン値、前回のチャイキン値の4つの値を確認します。これらの値を確認した上で、取引システムは、現在と前回の高値、現在と前回のチャイキン値でどちらが大きいかを判断します。現在の高値が前回の高値を上回り、現在のチャイキン値が前回のチャイキン値を上回る場合、取引システムには、上昇トレンド中の強い上昇の動き、現在の高値、前回の高値、現在のチャイキン値、前回のチャイキン値それぞれの値を別々の行でコメントとして返してもらいます。もう1つのシナリオは、現在の高値が前回の高値を上回り、現在のチャイキン値が前回のチャイキン値を下回る場合、取引システムは弱気のダイバージェンス、現在の高値、前回の高値、現在のチャイキン値、前回のチャイキン値のそれぞれの値を別々の行にしてチャート上のコメントを返します。

この戦略の設計図は次の通りです。

チャイキンオシレーターの設計図

  • 戦略4:Chaikin Oscillator - Downtrend

この戦略では、現在の安値、前回の安値、現在のチャイキン値、前回のチャイキン値の4つの値を1ティックごとに連続的に確認し、現在の安値が前回の安値を下回り、現在のチャイキン値が前回のチャイキン値を下回れば、強い下降があったとして、チャートに現在の安値、前回の安値、現在のチャイキン値、前回のチャイキン値のそれぞれを別行のコメントとして返してくれる取引システムが必要です。もう1つのシナリオは現在の安値が前回の安値を下回り、現在のチャイキン値が前回のチャイキン値を上回る場合で、取引システムは、ダイバージェンスと現在の安値、前回の安値、現在のチャイキン値、前回のチャイキン値をそれぞれ別の行にしてコメントを返します。

次はこの設計図です。

Chaikin Oscillator - Downtrendの設計図

チャイキンオシレーターの上昇

チャイキンオシレーター取引システム

このセクションでは、MQL5によるプログラミングやコーディングによって、言及された戦略を自動的に動作する取引システムにする方法を学びます。そこで、チャイキンオシレーターの現在値を自動的にコメントとしてチャートに表示する簡単な売買システムのコードを書き始め、この取引システムを基盤にして、ここで言及する戦略を考えてみたいと思います。以下は、この取引システムを作成するためのものです。

  • 小数値を表すdoubleを使用して、チャイキンオシレーターの配列を作成します。 doubleは、データ型の1つである浮動小数点型の1つです。
double chaiArray[];
  • この作成した配列を現在のデータから並び替えるのですが、これにはブール値を返すArraySetAsSeries関数を使用します。ArraySetAsSeriesのパラメータは以下の通りです。
    • 配列
    • フラグ
ArraySetAsSeries(chaiArray,true);
  • iChaikin関数を使ってチャイキンオシレーターを定義するために、chaiDefの整数変数を作成します。この関数は、チャイキンオシレーター指標のハンドルを返します。この関数のパラメータは次のとおりです。
    • symbol - 銘柄名を設定。現在のチャートに適用される_Symbolを指定
    • period - 時間帯を設定。現在の時間帯に適用される_Periodを指定
    • fast_ma_period - 高速移動平均の長さを設定。デフォルトで3を設定
    • slow_ma_period - 低速移動平均の長さを設定。デフォルトで10を設定
    • ma_method - 移動平均の種類を設定。指数移動平均(MODE_EMA)を使用
    • applied_volume - ボリュームの種類を設定。ティックボリューム(VOLUME_TICK)を使用
int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);
  • CopyBuffer関数で価格データをchaiArrayの配列にコピーします。この関数は、コピーしたデータ数を返すか、エラーがあれば-1を返します。この関数のパラメータは次のとおりです。
    • indicator_handle - 指標定義chaiDefを指定
    • buffer_num - 指標バッファ数を設定。0を使用
    • start_pos - 開始位置を設定。0を使用
    • count - コピーする量を設定。3を使用
    • buffer[] - コピー先の配列を設定。chaiArrayを使用
CopyBuffer(chaiDef,0,0,3,chaiArray);
  • chaiValというdouble変数を作成し、double型のNormalizeDouble関数でチャイキンオシレーター値を取得します。NormalizeDoubleのパラメータは以下の通りです。
    • value - 正規化された数値を設定。chaiArray[0]を指定し、現在の値を返すために0を使用
    • digits - 小数点以下の桁数を設定。6を使用
int chaiVal = NormalizeDouble(chaiArray[0],6);
  • Comment関数を使って、現在のチャイキンオシレーターの値をチャートにコメントとして返します。
Comment("Chaikin Oscillator Value is ",chaiVal);

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

//+------------------------------------------------------------------+
//|                                    Simple Chaikin Oscillator.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 chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);

   Comment("Chaikin Oscillator Value is ",chaiVal);

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

このコードをコンパイルすると、Expert Advisorsフォルダ内のナビゲータウィンドウに、次のようなファイルが表示されます。

なびげーNav

このエキスパートアドバイザー(EA)を実行する必要がある場合、チャート上にドラッグ&ドロップすると、プログラムの次のウィンドウが表示されます。

Simple Chaikin Oscillatorのウィンドウ

[OK]を押すと、下図のようにEAがチャートに接続されます。

Simple Chaikin Oscillatorの接続

先ほどのチャートの右上にあるように、EAを接続しています。すると、次のような生成シグナルが見つかります。

Chaikin Oscillatorのシグナル

先ほどのテストの例でわかるように、チャートの左上には、現在のチャイキンオシレーターの値がコメントで表示されています。MetaTrader 5の内蔵指標で生成された値と同じであることを確認したい場合は、EAを装着した後に内蔵指標をパラメータで挿入すると、以下のように両者の値が同じになることが確認できます。

Chaikin Oscillator同一シグナル

チャートの右隅に表示されているように、EAがチャートに接続されており、左隅では、EAに従って生成された値を見つけることができます。これは、下のウィンドウに挿入された指標の値と同じです。 .

  • 戦略1:Chaikin Oscillator Crossover

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

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator 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"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);
   
   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

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

このコードの違いは次の通りです。

Chaikin Oscillator Crossoverの条件

買いシグナルの場合

   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

売りシグナルの場合

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

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

Nav1

チャート上にドラッグ&ドロップすると、EAのウィンドウは以下のように同じように表示されます。

Chaikin Oscillator Crossoverのウィンドウ

[OK]を押すと、次のようにEAがチャートに接続されます。

Chaikin Oscillator Crossoverの接続

右上にあるように、Chaikin Oscillator Crossover EAがチャートに添付されており、この戦略に従って生成されたシグナルを見ることができます。以下はその例です。

買いシグナルの場合

Chaikin Oscillator Crossover - 買いシグナル

チャートの左上隅にあるように、チャイキンオシレーターの値がゼロレベルを超えたときに買いシグナルが発生しました。

売りシグナルの場合

Chaikin Oscillator Crossover - 売りシグナル

チャートの左上にあるように、チャイキンオシレーターの値がゼロのレベルを下回ると、売りシグナルが発生しました。

  • 戦略2:Chaikin Oscillator movement

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

//+------------------------------------------------------------------+
//|                                  Chaikin Oscillator Movement.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 chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

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

現在のチャイキンオシレーター値と以前のチャイキンオシレーター値を定義します。

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

戦略の条件

上昇の場合

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

下降の場合

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

 Nav2

チャート上にEAをドラッグ&ドロップすると、次のようなプログラムのウィンドウが表示されます。

Chaikin Oscillator Movementのウィンドウ

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

Chaikin Oscillator Movementの接続

以下は、この戦略に基づき生成されたシグナルの例です。

現在のデータで上昇した場合

Chaikin Oscillator Movement - 現在のシグナルと上昇

前回のデータで上昇した場合

Chaikin Oscillator Movement - 前回のシグナルと上昇

これまでのチャートで見てきたように、左上には3行のコメントがあります。

  • チャイキンオシレーターが上昇中
  • チャイキンオシレーターの現在値
  • チャイキンオシレーターの前回値

もう1つのシナリオは、現在のデータで下降した場合です。

Chaikin Oscillator Movement - 現在のシグナルと下降

前回のデータで下降した場合

Chaikin Oscillator Movement - 前回のシグナルと下降

これまでのチャートで見てきたように、左上のチャートにコメントがあります。

チャイキンオシレーターが下降中

チャイキンオシレーターの現在値

チャイキンオシレーターの前回値

  • 戦略3:Chaikin Oscillator - Uptrend

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

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator - Uptrend.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 chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentHighVal=NormalizeDouble(priceArray[2].high,6);
   double prevHighVal=NormalizeDouble(priceArray[1].high,6);

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

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

ChaiArrayは学習したものと同じ、priceArrayは価格、数量、スプレッドの情報を格納する「MqlRates」関数を使用して2つの配列を作成します。

ArraySetAsSeries(chaiArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

現在および前回のチャイキンオシレーターの値を定義します。

int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

現在の高値と前回の高値の値を定義します。

double currentHighVal=NormalizeDouble(priceArray[2].high,6);
double prevHighVal=NormalizeDouble(priceArray[1].high,6);

この戦略の条件

上昇トレンド中の強い動きがあった場合

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

弱気ダイバージェンスの場合

   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

 Nav3

チャート上にドラッグ&ドロップしてEAを実行すると、EAのウィンドウが表示されます。

Chaikin Oscillator - Uptrendのウィンドウ

[OK]を押すと、下図のようにEAがチャートに表示されます。

Chaikin Oscillator - Uptrendの接続

本取引システムに基づき生成されたシグナルの一例を以下に示します。

現在のデータで強く動いた場合

Chaikin Oscillator - Uptrend - 強力 - 現在のデータ

前回のデータで強く動いた場合

Chaikin Oscillator - Uptrend - 強力 - 前回のデータ

前の2つのチャートでわかるように、チャートの左上には次のような5行のコメントがあります。

  •  上昇トレンド中の強い上昇の動き
  • 現在の高値
  • 前回の高値
  • 現在のチャイキン値
  • 前回のチャイキン値

もう1つのシナリオは、現在のデータで弱気のダイバージェンスがある場合で、次のような例を見ることができます。

Chaikin Oscillator -Uptrend - ダイバージェンス - 現在のデータ

前回のデータと弱気ダイバージェンスがある場合

Chaikin Oscillator -Uptrend - ダイバージェンス - 前回のデータ

前の2つのチャートでわかるように、5行のコメントがあります。

弱気のダイバージェンス

現在の高値

前回の高値

現在のチャイキン値

前回のチャイキン値

  • 戦略4:Chaikin Oscillator - Downtrend

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

//+------------------------------------------------------------------+
//|                               Chaikin Oscillator - Downtrend.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 chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentLowVal=NormalizeDouble(priceArray[2].low,6);
   double prevLowVal=NormalizeDouble(priceArray[1].low,6);

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

このコードで違うのは、この戦略の条件です。

下降トレンド中の強い上昇の動きがあった場合

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

強気ダイバージェンスの場合

   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

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

 Nav4

このEAをチャート上にドラッグ&ドロップすると、このプログラムのウィンドウが以下のように表示されます。

Chaikin Oscillator - Downtrendのウィンドウ

[OK]を押すと、下図のようにEAがチャートに表示されます。

Chaikin Oscillator - Downtrendの接続

以下は、この戦略に基づくテストによる生成シグナルの例である。

現在のデータで下降トレンド中に強い下げがあった場合

Chaikin Oscillator - Downtrend - 強力 - 現在のデータ

過去のデータで強い下降があった場合

Chaikin Oscillator - Downtrend - 強力 - 前回のデータ

前の2つのチャートでわかるように、5行のコメントがあります。

  • 下降トレンドの中で強い下降の動き
  • 現在の安値
  • 前回の安値
  • 現在のチャイキン値
  • 前回のチャイキン値

もう1つのシナリオである強気のダイバージェンスでは、次のようなシグナルが発生する例が見られます。

現在のデータで強気のダイバージェンスがある場合

Chaikin Oscillator - Downtrend - ダイバージェンス - 現在のデータ

前回のデータウィンドウでのブリッシュダイバージェンス:

Chaikin Oscillator - Downtrend - ダイバージェンス - 前回のデータ 

前の2つのチャートでわかるように、5行のコメントがあります。

  • 強気乖離
  • 現在の安値
  • 前回の安値
  • 現在のチャイキン値
  • 前回のチャイキン値


結論

前回のトピックスに続き、チャイキンオシレーターについて詳しく学びました。この指標とは何か、何を測定するのか、手動で計算する方法、そしてMetaTrader 5に組み込まれている指標の使用方法と挿入方法について学びました。また、戦略以上のものを学んだので、この指標のメインコンセプトに基づいてシンプルに使う方法を学びました。

  • Chaikin Oscillator Crossover:ゼロレベルのクロスオーバーに基づいて売買のシグナルを取得
  • Chaikin Oscillator Movement:上昇または下降している場合に指標の線の動きを知らせるシグナルを取得
  • Chaikin Oscillator - Uptrend:上昇トレンド中に強い上昇を見せた場合または弱気のダイバージェンスがあった場合にシグナルを取得
  • Chaikin Oscillator - Downtrend:下降トレンド中に強い下降があった場合または強気のダイバージェンスがあった場合にシグナルを取得

また、それぞれの戦略に対応した取引システムを構築するために、戦略ごとに設計図を作成しました。これは、目的をスムーズに達成するためにアイデアを整理するための非常に重要なステップです。MetaTrader 5で戦略を実行した後、自動的にシグナルを発生させ、取引を容易にし、時間を節約することに加えて、より良い結果を得るために、すべての戦略に対して取引システムを作成する方法を学びました。

しつこくなりますが、すべての人に適した戦略はないので、戦略は実際の口座で使用する前に必ずテストしてください。また、プログラミングのスキルを向上させるためには、学んだことを応用し、自分で練習することが重要なことも強調するべきです。この記事が読者の役に立ちことを願っています。さらに同様の記事を読みたい方は、この連載の他の記事を読んで、最も人気のあるテクニカル指標に基づいて取引システムを設計する方法について学んでください。

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

CCI指標:3つの変換ステップ CCI指標:3つの変換ステップ
今回は、この指標のロジックそのものに影響を与えるCCIの追加変更について説明します。さらに、これをメインチャートウィンドウで確認できるようになります。
ニューラルネットワークが簡単に(第22部):回帰モデルの教師なし学習 ニューラルネットワークが簡単に(第22部):回帰モデルの教師なし学習
モデルと教師なし学習アルゴリズムの研究を続けます。今回は、回帰モデルの学習に適用した場合のオートエンコーダの特徴について提案します。
DoEasy-コントロール(第13部):WinFormsオブジェクトのマウスによる操作の最適化、TabControl WinFormsオブジェクトの開発開始 DoEasy-コントロール(第13部):WinFormsオブジェクトのマウスによる操作の最適化、TabControl WinFormsオブジェクトの開発開始
今回は、マウスカーソルを離した後のWinFormsオブジェクトの外観の処理を修正および最適化して、TabControl WinFormsオブジェクトの開発を開始します。
データサイエンスと機械学習(第06回):勾配降下法 データサイエンスと機械学習(第06回):勾配降下法
勾配降下法は、ニューラルネットワークや多くの機械学習アルゴリズムの訓練において重要な役割を果たします。これは、その印象的な成果にもかかわらず、迅速でインテリジェントなアルゴリズムであり、多くのデータサイエンティストによっていまだに誤解されています。