Psychological

ここではサイコロジカルラインのインジケータ―やEAの作り方について解説します。

サイコロジカルラインとは
サイコロジカルライン(Psychological line)とは、投資家心理を数値化したオシレーター分析のインジケーターです。(n日間で終値比プラスの日数)÷ n × 100で算出され、75%で買われ過ぎ、25%で売られ過ぎと判断します。

インジケーターの作り方

次のリンクから今回作成したサイコロジカルラインのインジケーターファイルがダウンロードできます。

今回完成したインジケーターファイル【Psychological.mq4】をダウンロード

インジケーター新規作成

MetaEditorで新規作成ボタンでMQL4ウィザードを開き、「カスタムインディケータ」にチェックを入れます。
次へボタンをクリック。

インジケーターの名前を入力し、パラメーターを作るため追加ボタンをクリックします。
パラメーターを次のように設定します。

名前 タイプ 初期値
Psycho_Period int 12

次へボタンをクリック×2。

「サブウインドウに表示」にチェックを入れて、
「最小値」「最大値」にチェックして、最小値を0、最大値を100にします。

インジケーター用配列を作るため、追加ボタンをクリックします。
今回は、次のように設定しました。

ラベル タイプ カラー
Psychological Line Yellow

完了ボタンをクリック。

これで、サイコロジカルラインを描画させる大まかな枠組みが出来ているので、後はOnCalculate()関数内にサイコロジカルの計算を追加するだけです。

OnCalculate()関数内の処理

OnCalculate()関数内でサイコロジカルの計算をします。

変数を宣言

使用するローカル変数を次のように宣言します。

   int i, j, limit;

過去の部分から描画するコード

過去の部分のサイコロジカルラインも描画させるため、次のコードを追加します。

   if (prev_calculated == 0)              // 最初
      limit = rates_total - 1;               // 左端のローソク足から全部
   else                                   // それ以外
      limit = rates_total - prev_calculated; // ローソク足増加時「1」、通常「0」
   
   for (i=limit; i>=0; i--)               // limit本前から現在のローソク足を処理
   {
      // ここでサイコロジカルを計算
   }

このコードは、インジケーターを作成する場合によく使用しますので、覚えておくと便利です。

サイコロジカルを計算

上記for()文の{}括弧内に次のコードを追加します。

      if (i + Psycho_Period >= rates_total) continue;
      
      PsychologicalBuffer[i] = 0;
      for(j=0; j<Psycho_Period; j++)
      {
         if(Close[i+j] > Close[i+j+1]) PsychologicalBuffer[i] += 100;
         if(Close[i+j] == Close[i+j+1]) PsychologicalBuffer[i] += 50;
      }
      PsychologicalBuffer[i] /= Psycho_Period;
もし、i + Psycho_Period がローソク足本数以上の場合はスキップ

PsychologicalBuffer[i] に 0 を代入しておいて、
ローソク足Psycho_Period本分の終値比較を実行する
{
 もし、今回終値が前回終値より大きい場合、PsychologicalBuffer[i] に 100 を足す
 もし、今回終値と前回終値が等しい場合、PsychologicalBuffer[i] に 50 を足す
}
PsychologicalBuffer[i] を Psycho_Period で割る

これで、(n日間で終値比プラスの日数)÷ n × 100が計算されて、サイコロジカルラインが描画されるようになります。

EAの作り方

次のリンクから今回作成したサイコロジカルラインを使用したEAファイルがダウンロードできます。

今回完成したEAファイル【Psychological_EA.mq4】をダウンロード

テンプレートEAを利用する

過去の記事【EA作成の為のテンプレート】でダウンロードできるテンプレートEA最新版「Template_2019.mq4」をカスタマイズしてサイコロジカルラインによるEAを作成します。

過去の記事【EA作成の為のテンプレート】へ

パラメーターを追加・変更する

パラメーター変数に次のコードを追加します。(UseMA_Exitは削除します)

extern int           Psycho_Period     = 12;
extern double        Psycho_SellLevel  = 75;
extern double        Psycho_BuyLevel   = 25;
extern bool          UsePsycho_Exit    = true;

シグナル判定を変更する

MAによるシグナル判定を、サイコロジカルラインによるシグナル判定に変更して、ma_signをpsycho_signに変更します。

   int psycho_sign = 0;
   
   double psycho_1 = iCustom(NULL, 0, "Psychological", Psycho_Period, 0, 1);
   double psycho_2 = iCustom(NULL, 0, "Psychological", Psycho_Period, 0, 2);
   
   if (psycho_2 > Psycho_BuyLevel && psycho_1 <= Psycho_BuyLevel) psycho_sign = 1;
   if (psycho_2 < Psycho_SellLevel && psycho_1 >= Psycho_SellLevel) psycho_sign = -1;
   int entry_sign = 0;
   
   if (psycho_sign == 1)
      if (filter_ok_buy == true) entry_sign = 1;
   
   if (psycho_sign == -1)
      if (filter_ok_sell == true) entry_sign = -1;

あとがき

サイコロジカルラインは意外と簡単な計算ですので、iCustom()関数を使わずにEA内で算出しても良いですね。
では今回はこのへんで。