平均足をサブウィンドウに表示するMT4インジケーター

平均足サブウィンドウのアイキャッチ
  • URLをコピーしました!

平均足をチャートのサブウィンドウに表示する方法はありますか?

ホシノ

FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。

この無料EA不労所得が稼げます
累計テスト120年以上・リアル取引公開2020年~

BBF_MQL5-202401006
リアルトレード公開|EA BBF

このページでわかること・できること

〇平均足をサブウィンドウに表示する方法

〇インジケーターのダウンロード

〇インジケーターについての詳しい解説

目次

インジケーターのダウンロード

ここからファイルのダウンロードが可能。
ダウンロードするファイルは.ex4ファイルのため、MT4のデータフォルダにあるインジケーターフォルダへファイルを移動すればインジケーターは使用できるようになる。

インストール

ダウンロードしたインジケーターはMT4のデータフォルダからindicatorsフォルダを探しファイルを移動する。

ファイル>データフォルダを開く>MQL4>indicators

indicatorsフォルダにファイルを移動し、MT4を再起動するとインストールが完了する。

平均足とは?詳しく解説

平均足サブウィンドウのチャート画像
平均足をサブウィンドウに表示できるインジケーター

平均足(Heikin Ashi)について

平均足(Heikin Ashi)は、伝統的な日本のローソク足チャートに基づくテクニカル分析だ。通常のローソク足と同様に、視覚的に価格の動きを表示するが、平均足はトレンドの方向性を視覚的に捉えやすくし、市場のノイズを減らすために設計されている。これにより、トレーダーがトレンドの持続性を評価しやすくなる。

平均足の計算方法

平均足の各要素は、以下のように計算される:

  1. Open(始値):

    [math]\text{Open}{\text{HeikinAshi}} = \frac{\text{Open}{\text{Previous}} + \text{Close}_{\text{Previous}}}{2}[/math]
    ​​前のローソク足の「始値」と「終値」の平均値。これにより、価格の滑らかな遷移が表現される。
  2. Close(終値):

    [math]\text{Close}{\text{HeikinAshi}} = \frac{\text{Open}{\text{Current}} + \text{High}{\text{Current}} + \text{Low}{\text{Current}} + \text{Close}_{\text{Current}}}{4}[/math]
    現在のローソク足の「始値」、「高値」、「安値」、「終値」の平均値。これにより、価格の中央値が強調される
  3. High(高値):

    [math]\text{High}{\text{HeikinAshi}} = \max(\text{High}{\text{Current}}, \text{Open}{\text{HeikinAshi}}, \text{Close}{\text{HeikinAshi}})[/math]
    現在のローソク足の「高値」、現在の「始値」、現在の「終値」の最大値
  4. Low(安値):

    [math]\text{Low}{\text{HeikinAshi}} = \min(\text{Low}{\text{Current}}, \text{Open}{\text{HeikinAshi}}, \text{Close}{\text{HeikinAshi}})[/math]
    現在のローソク足の「安値」、現在の「始値」、現在の「終値」の最小値

平均足の特徴

  1. トレンドの明確化: 平均足はトレンドの持続性を示すため、長期間続く上昇トレンドや下降トレンドを視覚的に捉えやすくなる。通常、連続する陽線(緑色や白色)は上昇トレンド、連続する陰線(赤色や黒色)は下降トレンドを示している。
  2. ノイズの低減: 通常のローソク足チャートでは、価格の小さな変動が頻繁に表示されるため、トレンドの把握が難しくなる。平均足はこれらの小さな変動を平滑化することで、市場のノイズを低減している。
  3. リバーサルシグナルの検出: トレンドの反転(リバーサル)シグナルを検出するのに役立つ。例えば、連続する陽線の後に陰線が現れると上昇トレンドが終了し、下降トレンドに転じる可能性を示唆している。

平均足をサブウインドウに表示するメリット

  1. メインチャートのクリーンアップ: 平均足をサブウィンドウに表示することで、メインチャート上の視認性を保ちながら、通常のローソク足や他のインジケーターを使用できる。これにより、全体的な視覚的な混乱を減らし、各インジケーターの機能を明確に区別できる。
  2. トレンドの確認が容易: 平均足はトレンドの方向性を明確に示すため、サブウィンドウで表示するとメインチャートの他の指標と併用してトレンドの確認が容易になる。特に価格変動の激しい市場では、トレンドの方向性を迅速に把握できる。
  3. ローソク足の分析手法を組み合わせやすい: サブウィンドウに平均足を表示することで、メインチャートに表示されるローソク足のパターン分析が容易になる。平均足を重ねてしまうとローソク足の形状が見えなくなるため、ローソク足のパターンで分析する場合には平均足はサブウィンドウに表示されているのがよい。これにより、平均足を参照しながらもローソク足でのパターン分析が可能となる。

平均足は、トレンドフォロー型のトレーダーにとって非常に有用なツールであり、特にノイズの多い市場でのトレンド判定に役立つ。これにより、トレーダーはより一貫性のある取引戦略を構築できるようになる。

パラメーターについて

平均足サブウィンドウのパラメーター画面
パラメーター画面

インジケーターに適用されているパラメーターは、動作や表示をカスタマイズするための設定が可能となる。以下に主なパラメーターの説明を示す。

  1. 陽線の色
    • このパラメーターは陽線(価格が上昇しているローソク足)の色を設定する。標準は赤に設定されている。
  2. 陰線の色
    • このパラメーターは陰線(価格が下落しているローソク足)の色を設定する。標準はアクアに設定されている。
  3. 足の幅
    • このパラメーターは平均足の幅を設定する。ENUM_CANDLE_WIDTHという列挙型が使われており、設定値に応じて以下の幅が選べる:
      • CANDLE_2:2ピクセル
      • CANDLE_THIN:3ピクセル
      • CANDLE_MID:4ピクセル
      • CANDLE_THIK:5ピクセル(デフォルト)
  4. Bidライン表示
    • このパラメーターはBid価格ラインの表示を選択する。trueに設定されている場合、Bidラインが表示される。
  5. Askライン表示
    • このパラメーターはAsk価格ラインの表示を選択する。trueに設定されている場合、Askラインが表示される。

トレードで平均足を有効的に使う方法

平均足はトレンドの転換をわかりやすく示す性質があり、ローソク足に比べてトレンドの継続を判別しやすいという側面もある。ここではその性質をいかした活用方法を紹介する。

移動平均線からの順行をエントリーとする

平均足サブウィンドウの使用例
平均足サブウィンドウを使ってエントリーする

画像は平均足サブウィンドウとメインチャートに20SMAを表示したチャートだ。
垂直ラインはエントリーのポイントを示し、エントリーのルールは以下となる。

  1. 移動平均線の角度でトレンドを判別
  2. トレンド方向の押し目として移動平均線内での反発を待つ
  3. 値の反発は平均足の反転とする
  4. 反転が確定した次の足でエントリー

これはトレンドの方向を移動平均線でフィルターとし、平均足が順行した場合にエントリーとしている。
値の反発を移動平均線上とすることで、押し、戻りのポイントを見極めている。

足の反転でクローズする

トレンドに乗れた場合、クローズする判断には移動平均線を2本使ったクロスや値のクロスなどが有効だが、平均足の反転もクローズの判断に利用できる。
判断は早めになるため、短期売買の場合などに向いている。

上位足をフィルターとする

平均足を上位足に表示させることで、トレンド方向のフィルターとして利用できる。
例えば5分足チャートからエントリーポイントを判断している場合、上位足の1時間足や4時間足などに平均足を表示させる。
上位足の足色を確認し、同方向へのエントリーに絞るといったフィルタリングは有効である。

インジケーターのプログラム

//+------------------------------------------------------------------+
//|                                               HeikinAshi Sub.mq4 |
//|                                     Copyright 2024, FX-Bonus.net |
//|                                            https://fx-bonus.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, FX-Bonus.net"
#property link      "https://fx-bonus.net/"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_plots   8

//--- Red_CLOSEのプロット設定
#property indicator_label1  "Red_CLOSE"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5
//--- Red_OPENのプロット設定
#property indicator_label2  "Red_OPEN"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrWhite
#property indicator_style2  STYLE_SOLID
#property indicator_width2  5
//--- Red_HIGHのプロット設定
#property indicator_label3  "Red_HIGH"
#property indicator_type3   DRAW_HISTOGRAM
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- Red_LOWのプロット設定
#property indicator_label4  "Red_LOW"
#property indicator_type4   DRAW_HISTOGRAM
#property indicator_color4  clrWhite
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

//--- Aqua_OPENのプロット設定
#property indicator_label5  "Aqua_OPEN"
#property indicator_type5   DRAW_HISTOGRAM
#property indicator_color5  clrAqua
#property indicator_style5  STYLE_SOLID
#property indicator_width5  5
//--- Aqua_CLOSEのプロット設定
#property indicator_label6  "Aqua_CLOSE"
#property indicator_type6   DRAW_HISTOGRAM
#property indicator_style6  STYLE_SOLID
#property indicator_color6  clrWhite
#property indicator_width6  5
//--- Aqua_HIGHのプロット設定
#property indicator_label7  "Aqua_HIGH"
#property indicator_type7   DRAW_HISTOGRAM
#property indicator_color7  clrAqua
#property indicator_style7  STYLE_SOLID
#property indicator_width7  1
//--- Aqua_LOWのプロット設定
#property indicator_label8  "Aqua_LOW"
#property indicator_type8   DRAW_HISTOGRAM
#property indicator_style8  STYLE_SOLID
#property indicator_color8  clrWhite
#property indicator_width8  1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum ENUM_CANDLE_WIDTH
  {
   CANDLE_2=2,    // 2ピクセル幅のローソク足
   CANDLE_THIN=3, // 3ピクセル幅のローソク足
   CANDLE_MID=4,  // 4ピクセル幅のローソク足
   CANDLE_THIK=5  // 5ピクセル幅のローソク足
  };
sinput color Red_CANDLE=clrRed; // 陽線の色:
sinput color Aqua_CANDLE=clrAqua; // 陰線の色:
sinput ENUM_CANDLE_WIDTH CANDLE_WIDTH=CANDLE_THIK; // 足の幅:
sinput bool SHOW_BID=true; // Bidライン表示
sinput bool SHOW_ASK=true; // Askライン表示
color bg; // 背景色
//--- インディケーターバッファ
double         Red_HIGH[];
double         Red_OPEN[];
double         Red_CLOSE[];
double         Red_LOW[];
double         Aqua_HIGH[];
double         Aqua_OPEN[];
double         Aqua_CLOSE[];
double         Aqua_LOW[];
// BidおよびAskライン
string shortName; // インディケーターの短い名前
long chart;     // チャートID
int subwin;    // サブウィンドウID
int indId;     // サブウィンドウ内のインディケーターID
string prefix; // 共通オブジェクトの接頭辞

string hlineBid; // Bidラインオブジェクト
color colorBid;  // Bidラインの色

string hlineAsk; // Askラインオブジェクト
color colorAsk;  // Askラインの色
//+------------------------------------------------------------------+
//| インディケーターの初期化関数                                     |
//+------------------------------------------------------------------+
int OnInit()
  {
   string obj;
   IndicatorDigits(_Digits); // インディケーターの小数点以下の桁数を設定
   chart=ChartID(); // チャートIDを取得
   MathSrand((int)GetMicrosecondCount()); // 乱数の種を設定
   // メインサブウィンドウを決定
   shortName=StringFormat("HAshi_sub %d",MathRand()); // インディケーターの短い名前を設定
   IndicatorShortName(shortName); // インディケーターの短い名前を設定
   int total,totalWin;
   totalWin=(int)ChartGetInteger(chart,CHART_WINDOWS_TOTAL); // サブウィンドウの総数を取得
   for(subwin=1;subwin<totalWin;subwin++) // 各サブウィンドウをチェック
     {
      total=ChartIndicatorsTotal(chart,subwin); // サブウィンドウ内のインディケーター総数を取得
      for(indId=0;indId<total;indId++) // 各インディケーターをチェック
        {
         printf("check %s vs %s",ChartIndicatorName(chart,subwin,indId),shortName); // インディケーター名をチェック
         if(ChartIndicatorName(chart,subwin,indId)==shortName) break; // 同じ名前のインディケーターが見つかったらループを抜ける
        }
      if(indId!=total) break; // 同じ名前のインディケーターが見つかったらサブウィンドウループを抜ける
     }
   if(subwin==totalWin) // サブウィンドウが見つからない場合
     {
      return INIT_FAILED; // 初期化失敗を返す
     }
   shortName=StringFormat("Heiken Ashi %s",_Symbol); // インディケーターの短い名前を設定
   IndicatorShortName(shortName); // インディケーターの短い名前を設定
   // インディケーターオブジェクトを作成(hlineAsk & hlineBid)
   prefix=StringFormat("%dHashi_sub%s",MathRand(),_Symbol); // オブジェクトの接頭辞を設定
   if(SHOW_BID)
     {
      obj=hlineBid=prefix+"hlineBid"; // Bidラインオブジェクトを作成
      if(!ObjectCreate(chart,obj,OBJ_HLINE,subwin,0,Bid) || ObjectType(obj)!=OBJ_HLINE) // Bidラインオブジェクトを作成し、タイプをチェック
        {
         return INIT_FAILED; // 初期化失敗を返す
        }
      colorBid=(color)ChartGetInteger(chart,CHART_COLOR_GRID); // Bidラインの色を取得
      ObjectSetInteger(chart,obj,OBJPROP_COLOR,colorBid); // Bidラインの色を設定
      ObjectSetInteger(chart,obj,OBJPROP_WIDTH,1); // Bidラインの幅を設定
      ObjectSetInteger(chart,obj,OBJPROP_STYLE,STYLE_SOLID); // Bidラインのスタイルを設定
      ObjectSetDouble(chart,obj,OBJPROP_PRICE,Bid); // Bidラインの価格を設定
     }
   if(SHOW_ASK)
     {
      obj=hlineAsk=prefix+"hlineAsk"; // Askラインオブジェクトを作成
      if(!ObjectCreate(chart,obj,OBJ_HLINE,subwin,0,Bid) || ObjectType(obj)!=OBJ_HLINE) // Askラインオブジェクトを作成し、タイプをチェック
        {
         return INIT_FAILED; // 初期化失敗を返す
        }
      colorAsk=(color)ChartGetInteger(chart,CHART_COLOR_ASK); // Askラインの色を取得
      ObjectSetInteger(chart,obj,OBJPROP_COLOR,colorAsk); // Askラインの色を設定
      ObjectSetInteger(chart,obj,OBJPROP_WIDTH,1); // Askラインの幅を設定
      ObjectSetInteger(chart,obj,OBJPROP_STYLE,STYLE_SOLID); // Askラインのスタイルを設定
      ObjectSetDouble(chart,obj,OBJPROP_PRICE,Ask); // Askラインの価格を設定
     }
   bg=(color)ChartGetInteger(ChartID(),CHART_COLOR_BACKGROUND); // 背景色を取得
//--- インディケーターバッファのマッピング
   SetIndexBuffer(0,Red_CLOSE); SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,(int)CANDLE_WIDTH,Red_CANDLE);
   SetIndexBuffer(1,Red_OPEN);  SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,(int)CANDLE_WIDTH,bg);
   SetIndexBuffer(2,Red_HIGH);  SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1,Red_CANDLE);
   SetIndexBuffer(3,Red_LOW);   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1,bg);
   SetIndexBuffer(4,Aqua_OPEN); SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,(int)CANDLE_WIDTH,Aqua_CANDLE);
   SetIndexBuffer(5,Aqua_CLOSE);SetIndexStyle(5,DRAW_HISTOGRAM,STYLE_SOLID,(int)CANDLE_WIDTH,bg);
   SetIndexBuffer(6,Aqua_HIGH); SetIndexStyle(6,DRAW_HISTOGRAM,STYLE_SOLID,1,Aqua_CANDLE);
   SetIndexBuffer(7,Aqua_LOW);  SetIndexStyle(7,DRAW_HISTOGRAM,STYLE_SOLID,1,bg);
//---
   return(INIT_SUCCEEDED); // 初期化成功を返す
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(hlineBid!="") ObjectDelete(chart,hlineBid); // Bidラインオブジェクトを削除
   if(hlineAsk!="") ObjectDelete(chart,hlineAsk); // Askラインオブジェクトを削除
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
                  )
  {
   if(id==CHARTEVENT_CHART_CHANGE) // チャートが変更されたとき
     {
      color b;
      b=(color)ChartGetInteger(ChartID(),CHART_COLOR_BACKGROUND); // 新しい背景色を取得
      if(b!=bg) // 背景色が変更された場合
        {
         bg=b; // 新しい背景色を設定
         SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,5,b); // インデックススタイルを更新
         SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1,b); // インデックススタイルを更新
         SetIndexStyle(5,DRAW_HISTOGRAM,STYLE_SOLID,5,b); // インデックススタイルを更新
         SetIndexStyle(7,DRAW_HISTOGRAM,STYLE_SOLID,1,b); // インデックススタイルを更新
        }
      if(hlineBid!="") // Bidラインが存在する場合
        {
         b=(color)ChartGetInteger(ChartID(),CHART_COLOR_GRID); // 新しいグリッド色を取得
         if(b!=colorBid) // グリッド色が変更された場合
           {
            colorBid=b; // 新しいグリッド色を設定
            ObjectSetInteger(chart,hlineBid,OBJPROP_COLOR,colorBid); // Bidラインの色を更新
           }
        }
      if(hlineAsk!="") // Askラインが存在する場合
        {
         b=(color)ChartGetInteger(ChartID(),CHART_COLOR_ASK); // 新しいAskライン色を取得
         if(b!=colorAsk) // Askライン色が変更された場合
           {
            colorBid=b; // 新しいAskライン色を設定
            ObjectSetInteger(chart,hlineAsk,OBJPROP_COLOR,colorAsk); // Askラインの色を更新
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| カスタムインディケーターの計算関数                                |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int bar;
   double hashi_open,hashi_high,hashi_low,hashi_close;

   AllArraysAsNormal(open,high,low,close); // 配列を通常の順序に設定

   for(bar=prev_calculated;bar<rates_total;bar++)
     {
      Red_OPEN[bar]=Red_HIGH[bar]=Red_LOW[bar]=Red_CLOSE[bar]=EMPTY_VALUE; // 初期化
      Aqua_OPEN[bar]=Aqua_HIGH[bar]=Aqua_LOW[bar]=Aqua_CLOSE[bar]=EMPTY_VALUE; // 初期化

      if(bar<1) continue; // 最初のバーはスキップ
      hashi_open=(open[bar-1]+close[bar-1])/2; // Heikin Ashiのオープン値を計算
      hashi_close=(open[bar]+close[bar]+high[bar]+low[bar])/4; // Heikin Ashiのクローズ値を計算
      hashi_high=MathMax(high[bar],MathMax(hashi_open,hashi_close)); // Heikin Ashiの高値を計算
      hashi_low=MathMin(low[bar],MathMin(hashi_open,hashi_close)); // Heikin Ashiの安値を計算

      if(hashi_open>=hashi_close) // 陰線の場合
        {
         Aqua_OPEN[bar]=hashi_open; // Aqua_OPENに値を設定
         Aqua_HIGH[bar]=hashi_high-_Point; // Aqua_HIGHに値を設定
         Aqua_LOW[bar]=hashi_low; // Aqua_LOWに値を設定
         Aqua_CLOSE[bar]=hashi_close-_Point; // Aqua_CLOSEに値を設定
        } else { // 陽線の場合
         Red_OPEN[bar]=hashi_open; // Red_OPENに値を設定
         Red_HIGH[bar]=hashi_high-_Point; // Red_HIGHに値を設定
         Red_LOW[bar]=hashi_low; // Red_LOWに値を設定
         Red_CLOSE[bar]=hashi_close-_Point; // Red_CLOSEに値を設定
        }
     }
   if(hlineBid!="") ObjectSetDouble(chart,hlineBid,OBJPROP_PRICE,Bid); // Bidラインの価格を更新
   if(hlineAsk!="") ObjectSetDouble(chart,hlineAsk,OBJPROP_PRICE,Ask); // Askラインの価格を更新
   return(rates_total-2); // 計算結果を返す
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void AllArraysAsNormal(const double &open[],const double &high[],const double &low[],const double &close[])
  {
   ArraySetAsSeries(Red_HIGH,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_OPEN,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_CLOSE,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_LOW,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_HIGH,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_OPEN,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_CLOSE,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_LOW,false); // 配列を通常の順序に設定

   ArraySetAsSeries(open,false); // open配列を通常の順序に設定
   ArraySetAsSeries(high,false); // high配列を通常の順序に設定
   ArraySetAsSeries(low,false); // low配列を通常の順序に設定
   ArraySetAsSeries(close,false); // close配列を通常の順序に設定
  }
//+------------------------------------------------------------------+

ソースコードについて詳しく解説

ヘッダプロパティ

#property strict
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_plots   8
  • #property strict:厳密なコンパイルモードを有効にする。
  • #property indicator_separate_window:インジケーターをサブウィンドウに表示する。
  • #property indicator_buffers 8:8つのバッファを使用。
  • #property indicator_plots 8:8つのプロットを設定。

プロット設定

各プロットの設定は以下のように行われる。

#property indicator_label1  "Red_CLOSE"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5
  • #property indicator_label1:プロットのラベル。
  • #property indicator_type1:プロットのタイプ(ここではヒストグラム)。
  • #property indicator_color1:プロットの色。
  • #property indicator_style1:プロットのスタイル(ここではソリッド)。
  • #property indicator_width1:プロットの幅。

この設定が8回繰り返され、それぞれ異なるバッファとプロットに適用される。

列挙型と入力パラメータ

enum ENUM_CANDLE_WIDTH
  {
   CANDLE_2=2,    // 2ピクセル幅のローソク足
   CANDLE_THIN=3, // 3ピクセル幅のローソク足
   CANDLE_MID=4,  // 4ピクセル幅のローソク足
   CANDLE_THIK=5  // 5ピクセル幅のローソク足
  };
sinput color Red_CANDLE=clrRed; // 陽線の色:
sinput color Aqua_CANDLE=clrAqua; // 陰線の色:
sinput ENUM_CANDLE_WIDTH CANDLE_WIDTH=CANDLE_THIK; // 足の幅:
sinput bool SHOW_BID=true; // Bidライン表示
sinput bool SHOW_ASK=true; // Askライン表示
color bg; // 背景色
  • ENUM_CANDLE_WIDTH:ローソク足の幅を定義する列挙型。
  • sinput:入力パラメータ(設定画面で変更可能)。
  • Red_CANDLEAqua_CANDLE:陽線と陰線の色。
  • CANDLE_WIDTH:ローソク足の幅。
  • SHOW_BIDSHOW_ASK:BidラインとAskラインを表示するかどうか。
  • bg:背景色。

インディケーターバッファ

double         Red_HIGH[];
double         Red_OPEN[];
double         Red_CLOSE[];
double         Red_LOW[];
double         Aqua_HIGH[];
double         Aqua_OPEN[];
double         Aqua_CLOSE[];
double         Aqua_LOW[];

各ローソク足の値(高値、始値、終値、安値)を格納するためのバッファ。

BidおよびAskライン

string shortName; // インディケーターの短い名前
long chart;     // チャートID
int subwin;    // サブウィンドウID
int indId;     // サブウィンドウ内のインディケーターID
string prefix; // 共通オブジェクトの接頭辞

string hlineBid; // Bidラインオブジェクト
color colorBid;  // Bidラインの色

string hlineAsk; // Askラインオブジェクト
color colorAsk;  // Askラインの色

これらは、BidおよびAskラインのオブジェクトおよびプロパティを管理するための変数。

インディケーターの初期化関数

int OnInit()
  • OnInit()関数は、インディケーターが初期化される際に呼び出される。
  • チャートIDやサブウィンドウID、インディケーターの短い名前を設定。
  • BidおよびAskラインのオブジェクトを作成し、それぞれの色やスタイルを設定。
  • インディケーターバッファをマッピングし、スタイルを設定。

OnDeinit関数

void OnDeinit(const int reason)
  {
   if(hlineBid!="") ObjectDelete(chart,hlineBid); // Bidラインオブジェクトを削除
   if(hlineAsk!="") ObjectDelete(chart,hlineAsk); // Askラインオブジェクトを削除
  }

インディケーターが削除されるときに呼び出され、BidおよびAskラインのオブジェクトを削除する。

OnChartEvent関数

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
                  )
  • チャートイベントが発生したときに呼び出される。
  • チャートの背景色やグリッド色が変更された場合、それに応じてインディケーターのスタイルを更新する。

OnCalculate関数

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int bar;
   double hashi_open,hashi_high,hashi_low,hashi_close;

   AllArraysAsNormal(open,high,low,close); // 配列を通常の順序に設定

   for(bar=prev_calculated;bar<rates_total;bar++)
     {
      Red_OPEN[bar]=Red_HIGH[bar]=Red_LOW[bar]=Red_CLOSE[bar]=EMPTY_VALUE; // 初期化
      Aqua_OPEN[bar]=Aqua_HIGH[bar]=Aqua_LOW[bar]=Aqua_CLOSE[bar]=EMPTY_VALUE; // 初期化

      if(bar<1) continue; // 最初のバーはスキップ
      hashi_open=(open[bar-1]+close[bar-1])/2; // Heikin Ashiのオープン値を計算
      hashi_close=(open[bar]+close[bar]+high[bar]+low[bar])/4; // Heikin Ashiのクローズ値を計算
      hashi_high=MathMax(high[bar],MathMax(hashi_open,hashi_close)); // Heikin Ashiの高値を計算
      hashi_low=MathMin(low[bar],MathMin(hashi_open,hashi_close)); // Heikin Ashiの安値を計算

      if(hashi_open>=hashi_close) // 陰線の場合
        {
         Aqua_OPEN[bar]=hashi_open; // Aqua_OPENに値を設定
         Aqua_HIGH[bar]=hashi_high-_Point; // Aqua_HIGHに値を設定
         Aqua_LOW[bar]=hashi_low; // Aqua_LOWに値を設定
         Aqua_CLOSE[bar]=hashi_close-_Point; // Aqua_CLOSEに値を設定
        } else { // 陽線の場合
         Red_OPEN[bar]=hashi_open; // Red_OPENに値を設定
         Red_HIGH[bar]=hashi_high-_Point; // Red_HIGHに値を設定
         Red_LOW[bar]=hashi_low; // Red_LOWに値を設定
         Red_CLOSE[bar]=hashi_close-_Point; // Red_CLOSEに値を設定
        }
     }
   if(hlineBid!="") ObjectSetDouble(chart,hlineBid,OBJPROP_PRICE,Bid); // Bidラインの価格を更新
   if(hlineAsk!="") ObjectSetDouble(chart,hlineAsk,OBJPROP_PRICE,Ask); // Askラインの価格を更新
   return(rates_total-2); // 計算結果を返す
  }
  • OnCalculate()関数は新しいデータがチャートに追加されたときに呼び出される。
  • Heikin Ashiの値を計算し、それに基づいて各バッファを更新する。
  • 陽線と陰線の違いに応じて、対応するバッファに値を設定。

AllArraysAsNormal関数

void AllArraysAsNormal(const double &open[],const double &high[],const double &low[],const double &close[])
  {
   ArraySetAsSeries(Red_HIGH,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_OPEN,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_CLOSE,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Red_LOW,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_HIGH,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_OPEN,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_CLOSE,false); // 配列を通常の順序に設定
   ArraySetAsSeries(Aqua_LOW,false); // 配列を通常の順序に設定
  }

まとめ

平均足をサブウィンドウに表示するインジケーターはこのページでダウンロードが可能。
サブウィンドウに表示することでメインチャートがクリアになり、ローソク足のパターン分析の併用が容易となる。
平均足はトレンドの転換や継続性を計るのに適したインジケーターであり、エントリーやクローズの判断に利用できる。

MT4インジケーターまとめ

  • URLをコピーしました!
  • URLをコピーしました!

このEAを使って、将来の見通しが立ちました

収入を増やしたい、将来のための資産が欲しい、支払いに縛られない自由な生活がしたい

このEAを使うと将来が見通せます。

22年以上で無敗の安定取引。リスク0%運用も可能なロジック。年利100%越えの上級者向け取引も可能。

マネーマシンとして育て上げることで大きな不労所得を得られます。

BBF-Girl
ドリームEA_BBF 無料ダウンロード
BBF_MQL5-202401006
リアルトレード公開|EA BBF

ポジション監視の時間

集中力は続いてますか?


オートクローズツールを使ってポジション管理を自動化


自動ポジション管理だから万が一でも大丈夫

あなたは空いた時間を自由に、効率的に使えます

自動決済ルールは独自にカスタム可能

ストップ、リミット変更にも対応。

エントリー後のポジション管理をすべて自動化できるトレーディングサポートツール。

トレード中のちょっとした離席など、念のためセットといった使い方も可能。

MT4用自動決済ツール【AutoCloseTool】は無料で入手できます。

オートクローズツール

取引ごとにキャッシュバックが発生します

もらわないだけ損している
取引ごとに毎回発生する現金のキャッシュバック
海外FXのキャッシュバックはメリットしかないサービスです

取引ごとにキャッシュバック
目次