平均足をサブウィンドウに表示するMT4インジケーター
平均足をチャートのサブウィンドウに表示する方法はありますか?
FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。
この無料EAで不労所得を得てます
テスト累計100年越え・リアル取引公開2020年~
このページでわかること・できること
〇平均足をサブウィンドウに表示する方法
〇インジケーターのダウンロード
〇インジケーターについての詳しい解説
インジケーターのダウンロード
ここからファイルのダウンロードが可能。
ダウンロードするファイルは.ex4ファイルのため、MT4のデータフォルダにあるインジケーターフォルダへファイルを移動すればインジケーターは使用できるようになる。
インストール
ダウンロードしたインジケーターはMT4のデータフォルダからindicatorsフォルダを探しファイルを移動する。
indicatorsフォルダにファイルを移動し、MT4を再起動するとインストールが完了する。
平均足とは?詳しく解説
平均足(Heikin Ashi)について
平均足(Heikin Ashi)は、伝統的な日本のローソク足チャートに基づくテクニカル分析だ。通常のローソク足と同様に、視覚的に価格の動きを表示するが、平均足はトレンドの方向性を視覚的に捉えやすくし、市場のノイズを減らすために設計されている。これにより、トレーダーがトレンドの持続性を評価しやすくなる。
平均足の計算方法
平均足の各要素は、以下のように計算される:
- Open(始値):
[math]\text{Open}{\text{HeikinAshi}} = \frac{\text{Open}{\text{Previous}} + \text{Close}_{\text{Previous}}}{2}[/math]
前のローソク足の「始値」と「終値」の平均値。これにより、価格の滑らかな遷移が表現される。 - 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]
現在のローソク足の「始値」、「高値」、「安値」、「終値」の平均値。これにより、価格の中央値が強調される - High(高値):
[math]\text{High}{\text{HeikinAshi}} = \max(\text{High}{\text{Current}}, \text{Open}{\text{HeikinAshi}}, \text{Close}{\text{HeikinAshi}})[/math]
現在のローソク足の「高値」、現在の「始値」、現在の「終値」の最大値 - Low(安値):
[math]\text{Low}{\text{HeikinAshi}} = \min(\text{Low}{\text{Current}}, \text{Open}{\text{HeikinAshi}}, \text{Close}{\text{HeikinAshi}})[/math]
現在のローソク足の「安値」、現在の「始値」、現在の「終値」の最小値
平均足の特徴
- トレンドの明確化: 平均足はトレンドの持続性を示すため、長期間続く上昇トレンドや下降トレンドを視覚的に捉えやすくなる。通常、連続する陽線(緑色や白色)は上昇トレンド、連続する陰線(赤色や黒色)は下降トレンドを示している。
- ノイズの低減: 通常のローソク足チャートでは、価格の小さな変動が頻繁に表示されるため、トレンドの把握が難しくなる。平均足はこれらの小さな変動を平滑化することで、市場のノイズを低減している。
- リバーサルシグナルの検出: トレンドの反転(リバーサル)シグナルを検出するのに役立つ。例えば、連続する陽線の後に陰線が現れると上昇トレンドが終了し、下降トレンドに転じる可能性を示唆している。
平均足をサブウインドウに表示するメリット
- メインチャートのクリーンアップ: 平均足をサブウィンドウに表示することで、メインチャート上の視認性を保ちながら、通常のローソク足や他のインジケーターを使用できる。これにより、全体的な視覚的な混乱を減らし、各インジケーターの機能を明確に区別できる。
- トレンドの確認が容易: 平均足はトレンドの方向性を明確に示すため、サブウィンドウで表示するとメインチャートの他の指標と併用してトレンドの確認が容易になる。特に価格変動の激しい市場では、トレンドの方向性を迅速に把握できる。
- ローソク足の分析手法を組み合わせやすい: サブウィンドウに平均足を表示することで、メインチャートに表示されるローソク足のパターン分析が容易になる。平均足を重ねてしまうとローソク足の形状が見えなくなるため、ローソク足のパターンで分析する場合には平均足はサブウィンドウに表示されているのがよい。これにより、平均足を参照しながらもローソク足でのパターン分析が可能となる。
平均足は、トレンドフォロー型のトレーダーにとって非常に有用なツールであり、特にノイズの多い市場でのトレンド判定に役立つ。これにより、トレーダーはより一貫性のある取引戦略を構築できるようになる。
パラメーターについて
インジケーターに適用されているパラメーターは、動作や表示をカスタマイズするための設定が可能となる。以下に主なパラメーターの説明を示す。
- 陽線の色:
- このパラメーターは陽線(価格が上昇しているローソク足)の色を設定する。標準は赤に設定されている。
- 陰線の色:
- このパラメーターは陰線(価格が下落しているローソク足)の色を設定する。標準はアクアに設定されている。
- 足の幅:
- このパラメーターは平均足の幅を設定する。ENUM_CANDLE_WIDTHという列挙型が使われており、設定値に応じて以下の幅が選べる:
CANDLE_2
:2ピクセルCANDLE_THIN
:3ピクセルCANDLE_MID
:4ピクセルCANDLE_THIK
:5ピクセル(デフォルト)
- このパラメーターは平均足の幅を設定する。ENUM_CANDLE_WIDTHという列挙型が使われており、設定値に応じて以下の幅が選べる:
- Bidライン表示:
- このパラメーターはBid価格ラインの表示を選択する。
true
に設定されている場合、Bidラインが表示される。
- このパラメーターはBid価格ラインの表示を選択する。
- Askライン表示:
- このパラメーターはAsk価格ラインの表示を選択する。
true
に設定されている場合、Askラインが表示される。
- このパラメーターはAsk価格ラインの表示を選択する。
トレードで平均足を有効的に使う方法
平均足はトレンドの転換をわかりやすく示す性質があり、ローソク足に比べてトレンドの継続を判別しやすいという側面もある。ここではその性質をいかした活用方法を紹介する。
移動平均線からの順行をエントリーとする
画像は平均足サブウィンドウとメインチャートに20SMAを表示したチャートだ。
垂直ラインはエントリーのポイントを示し、エントリーのルールは以下となる。
- 移動平均線の角度でトレンドを判別
- トレンド方向の押し目として移動平均線内での反発を待つ
- 値の反発は平均足の反転とする
- 反転が確定した次の足でエントリー
これはトレンドの方向を移動平均線でフィルターとし、平均足が順行した場合にエントリーとしている。
値の反発を移動平均線上とすることで、押し、戻りのポイントを見極めている。
足の反転でクローズする
トレンドに乗れた場合、クローズする判断には移動平均線を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_CANDLE
、Aqua_CANDLE
:陽線と陰線の色。CANDLE_WIDTH
:ローソク足の幅。SHOW_BID
、SHOW_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インジケーターまとめ
-
海外FXのEA_MT4TSIのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4平均足Smoothdのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4Schaff Trend Cycleのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4ローソク足の残り時間をカウントダウン表示するMT4インジケーター
-
海外FXのEA_MT4【MT4】ピボットのインジケーター特集【無料】
-
海外FXのEA_MT4平均足をサブウィンドウに表示するMT4インジケーター
-
海外FXのEA_MT4【無料】スキャルピングトレードのサインがでるMT4インジケーター特集【最新23選】
-
海外FXのEA_MT4GMMA・グッピーのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4市場の時間をチャートに表示するMT4インジケーター|MarketCrock
-
海外FXのEA_MT4MT4【ZigZag】ジグザグの無料インジケーター特集【最新版】
-
海外FXのEA_MT4BSIのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4TEMAのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4SuperTrendスーパートレンドのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4RCIインジケーターのダウンロードと解説|MT4
-
海外FXのEA_MT4【無料】マルチタイムフレームのMT4インジケーター特集【最新版】
-
海外FXのEA_MT4Aroonのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4TTFのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4【MT4】スキャルピングで使えるオシレーター解説【無料インジケーター】
-
海外FXのEA_MT4TMAのダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4T3のダウンロードと解説|MT4インジケーター
-
海外FXのEA_MT4【MT4】高値と安値がわかる無料インジケーター特集|High Low【海外FX】
-
海外FXのEA_MT41日の区切りに垂直ラインを引くMT4インジケーター|OneDayLine
-
海外FXのEA_MT4エントリーサインをだすMT4インジケーター特集
-
海外FXのEA_MT4ボリンジャーバンドをサブウインドウに表示するMT4インジケーター