3日足のローソク足を出し方を教えて下さい

 

3日足のローソク足をMT5で表示させたいのですが、やり方がさっぱりわかりません。

どなたかご存知の方がいましたら教えて下さい。

 
katsu miya:

3日足のローソク足をMT5で表示させたいのですが、やり方がさっぱりわかりません。

どなたかご存知の方がいましたら教えて下さい。

MT5で事前に定義されたチャート時間軸には、"3日"は無いようです。

チャート時間軸

https://www.mql5.com/ja/docs/constants/chartconstants/enum_timeframes


"3日足を描画"するカスタムインジケータを

・探す

・作る

・クリエーターに作成を依頼する

方法しか無いと思います。

MQL5のドキュメンテーション: 標準的な定数、 列挙と構造体 / チャート定数 / チャート時間軸
MQL5のドキュメンテーション: 標準的な定数、 列挙と構造体 / チャート定数 / チャート時間軸
  • www.mql5.com
事前定義されたチャート時間軸の全ては、一意の識別子を持っています。PERIOD_CURRENT 識別子は、MQL5 プログラムが実行されているチャートの現在の期間を意味します。 ENUM_TIMEFRAMES 例:   時系列識別子は iHighest() 及び iLowest()...
 

そうなんですね。教えていただきありがとうございます。

 
//+------------------------------------------------------------------+
//|                Pseudo_3Day_OHLC_SimpleCenter.mq5                 |
//+------------------------------------------------------------------+
#property strict
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_plots   2

// プロット1: 陽線(青)
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrBlue
#property indicator_width1  5   // ★ 最大太さ

// プロット2: 陰線(赤)
#property indicator_type2   DRAW_CANDLES
#property indicator_color2  clrRed
#property indicator_width2  5   // ★ 最大太さ

double UpOpen[], UpHigh[], UpLow[], UpClose[];
double DnOpen[], DnHigh[], DnLow[], DnClose[];

//----------------------------------------------
int OnInit()
{
    SetIndexBuffer(0, UpOpen,  INDICATOR_DATA);
    SetIndexBuffer(1, UpHigh,  INDICATOR_DATA);
    SetIndexBuffer(2, UpLow,   INDICATOR_DATA);
    SetIndexBuffer(3, UpClose, INDICATOR_DATA);

    SetIndexBuffer(4, DnOpen,  INDICATOR_DATA);
    SetIndexBuffer(5, DnHigh,  INDICATOR_DATA);
    SetIndexBuffer(6, DnLow,   INDICATOR_DATA);
    SetIndexBuffer(7, DnClose, INDICATOR_DATA);

    return(INIT_SUCCEEDED);
}

//----------------------------------------------
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[])
{
    // ★ D1 以外は真っ暗
    if(Period() != PERIOD_D1)
    {
        ArrayInitialize(UpOpen,  EMPTY_VALUE);
        ArrayInitialize(UpHigh,  EMPTY_VALUE);
        ArrayInitialize(UpLow,   EMPTY_VALUE);
        ArrayInitialize(UpClose, EMPTY_VALUE);

        ArrayInitialize(DnOpen,  EMPTY_VALUE);
        ArrayInitialize(DnHigh,  EMPTY_VALUE);
        ArrayInitialize(DnLow,   EMPTY_VALUE);
        ArrayInitialize(DnClose, EMPTY_VALUE);

        return(rates_total);
    }

    int start = prev_calculated;
    if(start < 3)
        start = 3;

    if(prev_calculated == 0)
    {
        ArrayInitialize(UpOpen,  EMPTY_VALUE);
        ArrayInitialize(UpHigh,  EMPTY_VALUE);
        ArrayInitialize(UpLow,   EMPTY_VALUE);
        ArrayInitialize(UpClose, EMPTY_VALUE);

        ArrayInitialize(DnOpen,  EMPTY_VALUE);
        ArrayInitialize(DnHigh,  EMPTY_VALUE);
        ArrayInitialize(DnLow,   EMPTY_VALUE);
        ArrayInitialize(DnClose, EMPTY_VALUE);

        start = 3;
    }

    for(int i = start; i < rates_total; i += 3)
    {
        int i0 = i - 2; // 1日目(実体だけ)
        int i1 = i - 1; // 2日目(本体)
        int i2 = i;     // 3日目(実体だけ)

        if(i2 >= rates_total)
            break;

        double o = open[i0];
        double c = close[i2];
        double h = MathMax(high[i0], MathMax(high[i1], high[i2]));
        double l = MathMin(low[i0],  MathMin(low[i1],  low[i2]));

        bool isBull = (c >= o);

        if(isBull)
        {
            // ★ 1日目:実体だけ
            UpOpen[i0]  = o;
            UpClose[i0] = c;
            UpHigh[i0]  = c;
            UpLow[i0]   = o;

            // ★ 2日目:本物の3日足(ヒゲあり)
            UpOpen[i1]  = o;
            UpHigh[i1]  = h;
            UpLow[i1]   = l;
            UpClose[i1] = c;

            // ★ 3日目:実体だけ
            UpOpen[i2]  = o;
            UpClose[i2] = c;
            UpHigh[i2]  = c;
            UpLow[i2]   = o;

            // 陰線側は全部消す
            DnOpen[i0] = DnHigh[i0] = DnLow[i0] = DnClose[i0] = EMPTY_VALUE;
            DnOpen[i1] = DnHigh[i1] = DnLow[i1] = DnClose[i1] = EMPTY_VALUE;
            DnOpen[i2] = DnHigh[i2] = DnLow[i2] = DnClose[i2] = EMPTY_VALUE;
        }
        else
        {
            // ★ 1日目:実体だけ
            DnOpen[i0]  = o;
            DnClose[i0] = c;
            DnHigh[i0]  = c;
            DnLow[i0]   = o;

            // ★ 2日目:本物の3日足(ヒゲあり)
            DnOpen[i1]  = o;
            DnHigh[i1]  = h;
            DnLow[i1]   = l;
            DnClose[i1] = c;

            // ★ 3日目:実体だけ
            DnOpen[i2]  = o;
            DnClose[i2] = c;
            DnHigh[i2]  = c;
            DnLow[i2]   = o;

            // 陽線側は全部消す
            UpOpen[i0] = UpHigh[i0] = UpLow[i0] = UpClose[i0] = EMPTY_VALUE;
            UpOpen[i1] = UpHigh[i1] = UpLow[i1] = UpClose[i1] = EMPTY_VALUE;
            UpOpen[i2] = UpHigh[i2] = UpLow[i2] = UpClose[i2] = EMPTY_VALUE;
        }
    }

    return(rates_total);
}

すでに一年半経過していて今更感マックスですけど

1分足チャート専用で、疑似的に3分足を表示出来るインジを作ってみました

さらにインジを追加したい時は1分足の期間を3倍にすれば実質3分足チャートではないかと...