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

相対的活力指数による取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 14 12月 2022, 09:28
538 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

新しいテクニカルツールを詳しく学び、このツールで簡単な取引システムを設計する連載の新しい記事へようこそ。今回は相対的活力指数(RVI、Relative Vigor Index)という指標を、以下のトピックスを通して解説していきます。

  1. 相対的活力指数の定義
  2. 相対的活力指数戦略
  3. 相対的活力指数戦略の設計図
  4. 相対的活力指数取引システム
  5. 結論

MQL5 (MetaQuotes Language 5) IDE を使ってコードを書き、MetaTrader 5取引ターミナルを使って取引システムを実行します。初心者がコーディングスキルを向上させるためには、練習がとても大切なので、これから学ぶことを自分で実践してみることをお勧めします。MetaTrader 5とMQL5のダウンロードと使用方法がわからない場合は、私の過去記事から「MetaEditorでMQL5のコードを書く」トピックを読んでみてください。

前述したように、この記事とこれらの簡単な戦略の主な目的は、その背後にある主な概念を学ぶことです。最適化が必要ですが、すべての言及した戦略が教育目的のみのためであるため、これは正常です。実際の口座で使用する前に、よくテストして、ご自分の取引に役立つことを確認する必要があります。

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


相対的活力指数の定義

このトピックでは、相対的活力指数(RVI、Relative Vigor Index)とは何かについて詳しく学びます。それはモメンタムでオシレーターのテクニカル指標です。終値と始値を比較することで、トレンドの強弱を判断する指標です。上昇トレンドの時は終値が始値を上回り、下降トレンドの時は終値が始値を下回ります。さらに、単純移動平均を使用して結果が平滑化されています。このRVI指標は、その性質上、レンジ相場よりもトレンド相場でより良いパフォーマンスを発揮します。このRVIの計算はストキャスティックオシレーターと似ていますが、RVIは終値と始値を比較する一方、ストキャスティックオシレーターは終値と特定期間の価格帯を比較していることが判ります。RVIを手動で計算したい場合は、以下の手順で計算することができます。

RVI= (CLOSE - OPEN) / (HIGH - LOW)

ここで、

CLOSE = 終値

OPEN = 始値

HIGH = 高値

LOW=安値

ただし、通常使用されるRVIは、計算上、異なる成分を持つ2本の線として表され、その計算方法は以下の通りです。

1- 1行目の計算:

  • 分子の計算

MovAverage = (CLOSE-OPEN) +2* (CLOSE-1 - OPEN-1) +2* (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

ここで、

CLOSE = 現在の終値

CLOSE 1, CLOSE 2, CLOSE 3 = 1, 2, 3期間前の終値

OPEN = 現在の始値

OPEN 1、OPEN 2、OPEN 3 = 1、2、3期間前の始値

  • 分母の計算

RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

ここで、

HIGH = 直近の高値

HIGH, HIGH 2, HIGH 3 = 1, 2, 3期間前の直近の高値

LOW = 直近の安値

LOW 1、LOW 2、LOW 3 = 1、2、3期間前の直近の安値

  • これらの平均の和を以下のように計算します。

RVI平均

2 - 2行目の計算:

RVIsignal = (RVIaverage +2* RVIaverage-1 +2* RVIaverage-2 + RVIaverage-3)/6

さて、手動で計算する方法を学んでこの指標の主要概念を理解しましたが、この指標はMetaTrader 5取引ターミナルで計算されるので、手動で計算する必要はありません。必要なのは利用可能な指標からこの指標を選択することです。以下は、チャートへの挿入方法についてです。

MetaTrader 5取引ターミナルを開き、[挿入] -> [インディケータ] -> [オシレーター] -> [Relative Vigor Index]をクリックします。

RVIの挿入

[Relative Vigor Index]を押すと、以下のようなパラメータウィンドウが表示されます。

RVIパラメータ

1 - 期間を決定する

2 - RVI線の色を決定する

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

4 - RVI線の太さを決定する

5 - シグナル線の色を決定する

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

7 - 線の太さを決定する

すべてのパラメータを決定した後、以下のような指標が接続されていることがわかります。

RVIの接続

先ほどのチャートにあるように、RVI指標はチャートに接続されており、2本の線がゼロレベルを中心に振動しています。


相対的活力指数戦略

RVIの主要概念を学んだ後、その主要概念に基づいた使い方を簡単な戦略で学びます。ここでもう一度確認しておきたいのは、どの戦略も実際の口座で使用する前に必ずテストして、自分の取引に適しているか、利益が出るかを確認する必要があるということです。

  • 戦略1:RVI Crossover - Uptrend

この戦略では、特定の条件下で上昇トレンド中の売買シグナルを取得します。RVI現在値とRVIシグナル現在値がゼロレベルを上回ると同時にRVI現在値がRVIシグナル現在値を上回ると、買いシグナルとなります。その逆で、RVI現在値がRVIシグナル現在値を下回ると同時にRVI現在値とRVIシグナル現在値がゼロレベルを下回ると、決済シグナルとなります。

単純に言うと次のようになります。

RVI値 > 0かつRVIシグナル値 > 0かつRVI値 > RVIシグナル値 -> 買い

RVI値 < 0かつRVIシグナル値 < 0かつRVI値 < RVIシグナル値 -> 決済

  • 戦略2:RVI Crossover - Downtrend

この戦略では、売りとカバーのシグナルを得る必要があるため、前回のRVI Crossover - Uptrend戦略と逆のシグナルを得る必要があります。RVI現在値とRVIシグナル現在値が同時にゼロレベルを下回る場合、売りシグナルとなります。その逆で、RVI現在値がRVIシグナルの現在値を上回ると同時にRVIシグナルの現在値がゼロレベルを上回る場合、カバーシグナルとなります。

単純に言うと次のようになります。

RVI値 < 0かつRVIシグナル値 < 0かつRVI値 < RVIシグナル値 -> 売り

RVI値 > 0かつRVIシグナル値 > 0かつRVI値 > RVIシグナル値 -> カバー 

  • 戦略3:RVI and MA Crossover

この戦略では、終値が100期移動平均線を上回ると同時に現在のRVI値が現在のRVIシグナル値を上回る場合に買いシグナルを出すため、特定の条件下で売買シグナルを得る必要があります。もう1つのシナリオは、現在のRVI値が現在のRVIシグナル値を下回ると同時に、終値が100期間移動平均を下回るときで、売りシグナルを得る必要があります。

単純に言うと次のようになります。

終値 > 100-移動平均、かつ、RVI値 > RVIシグナル値 -> 買い

終値 < 100-移動平均、かつ、RVI値 < RVIシグナル値 -> 売り


相対的活力指数戦略の設計図

今回紹介した戦略を通じてRVIの使い方を学んだ後は、各戦略のステップバイステップの設計図を作成し、スムーズに取引システムを構築できるようにします。

  • 戦略1: RVI Crossover - Uptrend

この戦略では、以下の値を継続的に確認することで、上昇トレンド中に買いシグナルと売りシグナルを出す売買システムを作ります。

  • 現在のRVI値
  • 現在のRVIシグナルの値
  • RVI指標のゼロレベル

現在のRVI値がゼロレベルを上回り、現在のRVIシグナル値がゼロレベルを上回り、現在のRVI値が現在のRVIシグナル値を上回る場合、取引システムは以下の値をチャートにコメントとして返します。

  • 買いシグナル
  • RVI値
  • RVIシグナル値

もう1つのシナリオは、現在のRVI値がゼロレベルを下回り、現在のRVIシグナル値がゼロレベルを下回り、現在のRVI値が現在のRVIシグナル値を下回る場合で、取引システムは以下の値をチャート上のコメントとして返します。

  • 決済シグナル
  • RVI値
  • RVIシグナル値

以下は、この戦略のステップバイステップの設計図です。

RVI crossover - Uの設計図

  • 戦略2: RVI Crossover - Downtrend

この戦略では、下降トレンドにあるときに、先ほどの戦略と同じ値を継続的に確認することで、売りとカバーのシグナルを出すことができる取引システムを作成します。

  • 現在のRVI値
  • 現在のRVIシグナルの値
  • RVI指標のゼロレベル

ただし、希望するシグナルによって条件は若干異なります。現在のRVI値がゼロレベルを下回り、同時に現在のRVIシグナル値がゼロレベルを下回る場合、取引システムは以下の値をチャート上のコメントとして返します。

  • 売りシグナル
  • RVI値
  • RVIシグナル値

一方、現在のRVI値がゼロレベルを上回ると同時に現在のRVIシグナルの値がゼロレベルを上回り、RVI値がRVIシグナル値を上回る場合、取引システムは以下の値をチャート上のコメントとして返します。

  • カバー
  • RVI値
  • RVIシグナル値

この取引システムを作るための設計図は以下の通りです。

RVI crossoverの設計図

  • 戦略3:RVI & MA Crossover

この戦略に従って、以下の値を継続的に確認して売買シグナルを出す取引システムを作ります。

  • 終値
  • 100期間移動平均(MA)
  • 現在のRVI値
  • 現在のRVIシグナルの値

終値が100期感MAを上回り、現在のRVI値が現在のRVIシグナル値を上回る場合、取引システムは以下の値をチャートにコメントとして返す必要があります。

  • 買いシグナル
  • 終値
  • MA値
  • RVI値
  • RVIシグナル値

一方、終値が100期間MAを下回り、現在のRVI値が現在のRVIシグナル値を下回る場合、取引システムは以下の値をチャートにコメントとして返します。

  • 売りシグナル
  • 終値
  • MA値
  • RVI値
  • RVIシグナル値

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

 RVI, MA crossoverの設計図

相対的活力指数取引システム

簡単な戦略を通してRVIの使い方を学び、各戦略のステップバイステップの設計図を作成したので、これを取引システムを構築するために役立てます。ここで紹介した各戦略について、取引システムを作成します。まず、現在のRVIの値をチャートにコメントとして返す簡単な取引システムを作成します。以下は、この取引システムを作成するためのコードをステップバイステップで説明します。

RVIとRVIシグナル用に2つのdouble配列を作成します。

   double rviArray[];
   double rviSignalArray[];

配列にAS_SERIESフラグを設定し、ArraySetAsSeries関数でブール値であるtrueまたはfalseを返します。

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Relative Vigor Index指標のハンドルを返すiRVI関数によってRVIを定義します。そのパラメータは次の通りです。

  • symbol:現在の銘柄に適用(_Symbolを使用) 
  • period:現在の期間または時間枠に適用(_Periodを使用) 
  •  ma_period::平均化期間(10を使用)
int rviDef = iRVI(_Symbol,_Period,10);

CopyBuffer関数を使って、RVI指標のバッファからデータを取得します。そのパラメータは次の通りです。 

  • indicator_handle:定義済み指標ハンドル(rviDef,、rviDefを使用)
  • buffer_num: 指標バッファの番号(0、1を使用)
  • start_pos:開始位置(0、0を使用)
  • count:コピーする量(3、3を使用)
  • buffer[]:コピー先配列(rviArray、rviSignalArrayを使用)
   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

NormalizeDouble関数を用いてRVIおよびRVIの値を定義し、double型の値を返します。そのパラメータは次の通りです。

  • value:正規化された数値(rviArray[0]、rviSignalArray[0]を使用)
  • digits:小数点以下の桁数(3を使用)
   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

Comment関数を使って、現在のRVI指数の値をチャートのコメントとして返します。

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

完全なコードは以下のようになります。

//+------------------------------------------------------------------+
//|                                                   Simple RVI.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 rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

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

このコードをコンパイルすると、エキスパートアドバイザー(EA)がナビゲータウィンドウに以下のように表示されます。

RVIナビ

EAをダブルクリックして取引ターミナルで実行すると、このEAのウィンドウが以下のように表示されます。

Simple RVIウィンドウ

[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、次のようにチャートにEAが接続されます。

Simple RVIの接続

さて、この取引システムに基づいて生成されたシグナルを取得する準備が整いました。以下と同じようなシグナルが出ます。

Simple RVIのシグナル

グラフの左上には、現在のRVI値を示すコメントが表示されています。

  • 戦略1: RVI Crossover - Uptrend

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

//+------------------------------------------------------------------+
//|                                      RVI Crossover - 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 rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


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

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

戦略の条件は次の通りです。

買いシグナルの場合

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

閉じる場合

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

このコードをコンパイルして、Simple RVI取引システムで述べたのと同じように取引ターミナルで実行すると、以下のようにチャートにEAが接続されていることが分かります。

RVI crossover - Uの接続

この取引システムに基づき、次のようなシグナルを生成することができます。

買いシグナルの場合

RVI crossover - U - 買いシグナル

チャートの左上でわかるように、次のような値のシグナルを受信しています。

  • 買いシグナル
  • RVI値
  • RVIシグナル値

決済シグナルの場合

RVI crossover - U - 決済シグナル

チャートの左上でわかるように、次のような値のシグナルを受信しています。

  • 終値
  • RVI値
  • RVIシグナル値

このシグナルは、私たちが言及した取引戦略とその上昇トレンド中の条件に基づいて必要とするものと同じであることは明らかです。

  • 戦略2: RVI Crossover - Downtrend

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

//+------------------------------------------------------------------+
//|                                    RVI Crossover - 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 rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
  }
//+------------------------------------------------------------------+  

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

戦略の条件は次の通りです。

売りシグナルの場合

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

カバーの場合

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

このコードを前回学習したのと同じようにコンパイルして実行すると、以下のようにチャートにEAが接続されていることがわかります。

 RVI crossover - Dの接続

これで、この戦略と取引システムに基づいたシグナルを受信する準備が整いました。以下は、テストからのシグナルの例です。

売りシグナルの場合:

 RVI crossover - D - 売りシグナル

チャートの左上でわかるように、次のような値のシグナルを受信しています。

  • 売りシグナル
  • RVI値
  • RVIシグナル値 

カバーの場合:

RVI crossover - D - カバーシグナル

次のような値のシグナルがあることがわかります。

  • カバー
  • RVI値
  • RVIシグナル値

さて、今回はRVI Crossover - Downtrendという戦略に基づいて、下降トレンドの時にシグナルを発生させる取引システムを作成しました。

  • 戦略3: RVI & MA Crossover

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

//+------------------------------------------------------------------+
//|                                           RVI & MA 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()
  {
   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


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

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

4つの配列(pArray、maArray、rviArray、rviSignalArray)を作成します。pArray以外は先ほどと同じようにdoubleを使い、pArrayには価格、出来高、スプレッドの情報を格納するMqlRates関数を使います。

   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

配列にAS_SERIESフラグを設定し、ArraySetAsSeries関数でブール値であるtrueまたはfalseを返します。MqlRates構造体の履歴データを取得するCopyRates関数を使用したデータの定義とそのパラメータは以下の通りです。

  • symbol_name:現在の銘柄に適用(_Symbolを使用)
  • timeframe:期間を現在の期間に適用(_Periodを使用)
  • start_pos:開始位置(0を使用) 
  • count:コピーするデータカウント(1を使用)
  • rates_array[]: コピー先配列(pArrayを使用)
   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

RVIは先ほどと同じiRVI関数で定義し、移動平均はiMA関数で移動平均指標のハンドルを返し、そのパラメータは次の通りです。

  • symbol:銘柄(_Symbolを使用) 
  • period: タイムフレームの期間を決定するために、(_period) を使用します。
  • ma_period:移動平均の期間(100を使用) 
  • ma_shift: 水平方向のシフト(0を使用) 
  • ma_method: 移動平均の種類(指数MAを使用) 
  • applied_price:価格の種類(終値を使用) 
   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

CopyBuffer関数を使って、RVI指標とMA指標のバッファからデータを取得します。

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

NormalizeDouble関数によってRVI、RVIシグナル、MA値を定義します。

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

戦略の条件

買いシグナルの場合

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

売りシグナルの場合

   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

このコードをコンパイルし、ターミナルでEAを実行すると、以下のようにチャートにEAが接続されていることがわかります。

 RVI, MA crossoverの接続

さて、この戦略に基づいて生成されたシグナルは、以下のテストの例と同じものであることがわかります。

買いシグナルの場合

RVI, MA crossover - 買いシグナル

先のチャートの左上にあるように、次のような値を持つシグナルがあることがわかります。

  • 買いシグナル
  • 終値
  • MA値
  • RVI値
  • RVIシグナル値

売りシグナルの場合

RVI, MA crossover - 売りシグナル

次のような値を持つシグナルがあります。

  • 売りシグナル
  • 終値
  • MA値
  • RVI値
  • RVIシグナル値

さて、記載した各戦略について、その条件に基づいて自動でシグナルを生成する取引システムを作成しました。


結論

この記事のこれまでのトピックを経て、この指標について詳しく学んだことで、深く理解できたと思います。RVIとは何か、何を測定するのか、どのように手動で計算するのかを学び、RVI指標の主な考え方を理解しました。3つの簡単な戦略によって使い方を学びました。

  • RVI Crossover - Uptrend:上昇トレンド時に買いシグナルと終値シグナルを生成
  • RVI Crossover - Downtrend:下降トレンド時に売りとカバーのシグナルを生成
  • RVI & MA Crossover:特定のクロスオーバー手法に基づく売買シグナルを生成

言及された戦略ごとにステップバイステップの設計図を設計し、その戦略のための取引を円滑かつ容易に作成することができるようにしました。MetaTrader 5で戦略を実行した後、自動でシグナルが発生するように、それぞれの戦略に対して取引システムを作成しました。

この記事から最大限の効果を得てプログラミングのスキルを伸ばすためには、学んだことを自分で実践して頂けたと思います。また、この記事が読者の取引結果を改善し、記事のトピックまたは関連するトピックに関連する有用な洞察を得るために有用であったことを望みます。同じような記事をもっと読みたい方は、最も人気のあるテクニカル指標に基づいて取引システムを設計する方法についての本連載の他の記事をお読みください。

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

DoEasy-コントロール(第18部):TabControlでタブをスクロールする機能 DoEasy-コントロール(第18部):TabControlでタブをスクロールする機能
この記事では、ヘッダーバーがコントロールのサイズに収まらない場合に備えて、TabControl WinFormsオブジェクトにヘッダースクロールコントロールボタンを配置します。また、トリミングされたタブヘッダーをクリックしたときのヘッダーバーのシフトを実装します。
ニューラルネットワークが簡単に(第29部):Advantage Actor-Criticアルゴリズム ニューラルネットワークが簡単に(第29部):Advantage Actor-Criticアルゴリズム
本連載のこれまでの記事で、2つの強化学習アルゴリズムを見てきました。それぞれに長所と短所があります。このような場合ではよくあることですが、次に、2つの方法の良いところを組み合わせてアルゴリズムにすることが考え出されます。そうすれば、それぞれの欠点が補われることになります。今回は、そのような手法の1つを紹介します。
オーサムオシレーター(Awesome Oscillator)による取引システムの設計方法を学ぶ オーサムオシレーター(Awesome Oscillator)による取引システムの設計方法を学ぶ
連載の今回の新しい記事では、私たちの取引に役立ちそうな新しいテクニカルツールについてご紹介します。これは、オーサムオシレーター(Awesome Oscillator、AO)という指標です。この指標を使用した取引システムの設計方法を学びます。
DoEasy-コントロール(第17部):オブジェクトの非表示部分の切り取り、補助矢印ボタンのWinFormsオブジェクト DoEasy-コントロール(第17部):オブジェクトの非表示部分の切り取り、補助矢印ボタンのWinFormsオブジェクト
この記事では、コンテナの外側にあるオブジェクトセクションを非表示にする機能を作成します。また、他のWinFormsオブジェクトの一部として使用する補助矢印ボタンオブジェクトを作成します。