Order Block

 

Olá pessoal, preciso trocar o estilo para object's. Ou seja ao invés de plotar a fonte wingdings, eu preciso usar o objectcreate para gerar uma linha no início e no fim das candles como o código abaixo define.

Se alguém puder me ajudar, eu agradeço antecipadamente.

Veja o código abaixo


#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   4

#property indicator_label1  "Linha de cima da compra"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrCyan
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Linha de baixo da compra"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrCyan
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

#property indicator_label3  "Linha de cima da venda"
#property indicator_type3   DRAW_ARROW
#property indicator_color3  clrMagenta
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2

#property indicator_label4  "Linha de baixo da venda"
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrMagenta
#property indicator_style4  STYLE_SOLID
#property indicator_width4  2

enum ENUM_OB_MODE {
    OB_MODE_DEFAULT, // Padrão
    OB_MODE_FVG // Longe do Valor de Gap (FVG)
};

input ENUM_OB_MODE Mode = OB_MODE_DEFAULT;

//--- indicator buffers
double CompraCima[];
double CompraBaixo[];
double VendaCima[];
double VendaBaixo[];

int OnInit() {
    SetIndexBuffer(0, CompraCima, INDICATOR_DATA);
    SetIndexBuffer(1, CompraBaixo, INDICATOR_DATA);
    SetIndexBuffer(2, VendaCima, INDICATOR_DATA);
    SetIndexBuffer(3, VendaBaixo, INDICATOR_DATA);

    PlotIndexSetInteger(0, PLOT_ARROW, 224);
    PlotIndexSetInteger(1, PLOT_ARROW, 59);
    PlotIndexSetInteger(2, PLOT_ARROW, 224);
    PlotIndexSetInteger(3, PLOT_ARROW, 59);

    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[]) {

    int limit = rates_total - prev_calculated;

    if (prev_calculated == 0) {
        ArrayInitialize(CompraCima, 0);
        ArrayInitialize(CompraBaixo, 0);
        ArrayInitialize(VendaCima, 0);
        ArrayInitialize(VendaBaixo, 0);
        limit = limit - 1 - 4;
    }

    if (rates_total < 4) return(0);
    if (limit < 0) return(0);

    ArraySetAsSeries(open, true);
    ArraySetAsSeries(high, true);
    ArraySetAsSeries(low, true);
    ArraySetAsSeries(close, true);
    ArraySetAsSeries(CompraCima, true);
    ArraySetAsSeries(CompraBaixo, true);
    ArraySetAsSeries(VendaCima, true);
    ArraySetAsSeries(VendaBaixo, true);

    for (int i = limit; i >= 0 && !IsStopped(); i--) {

        if (Mode == OB_MODE_DEFAULT) {
            bool bu = close[i + 2] < open[i + 2] && close[i + 1] < open[i + 1] && close[i] > open[i];
            bool be = close[i + 2] > open[i + 2] && close[i + 1] > open[i + 1] && close[i] < open[i];
            bu &= close[i + 1] < low[i + 2] && close[i] > high[i + 1];
            be &= close[i + 1] > high[i + 2] && close[i] < low[i + 1];

            if (bu) {
                CompraCima[i] = high[i + 1];
                CompraBaixo[i] = low[i + 1];
            } else {
                CompraCima[i] = 0;
                CompraBaixo[i] = 0;
            }

            if (be) {
                VendaCima[i] = high[i + 1];
                VendaBaixo[i] = low[i + 1];
            } else {
                VendaCima[i] = 0;
                VendaBaixo[i] = 0;
            }
        }

        else if (Mode == OB_MODE_FVG) {
            bool bu = close[i + 3] < open[i + 3] && close[i + 2] < open[i + 2] && close[i + 1] > open[i + 1];
            bool be = close[i + 3] > open[i + 3] && close[i + 2] > open[i + 2] && close[i + 1] < open[i + 1];
            bu &= close[i + 2] < low[i + 3] && close[i + 1] > high[i + 2] && low[i] > high[i + 2];
            be &= close[i + 2] > high[i + 3] && close[i + 1] < low[i + 2] && high[i] < low[i + 2];

            if (bu) {
                CompraCima[i] = low[i];
                CompraBaixo[i] = low[i + 2];
            } else {
                CompraCima[i] = 0;
                CompraBaixo[i] = 0;
            }

            if (be) {
                VendaCima[i] = high[i + 2];
                VendaBaixo[i] = high[i];
            } else {
                VendaCima[i] = 0;
                VendaBaixo[i] = 0;
            }
        }

    }

    return(rates_total);
}
 
jlaudirt1:

Olá pessoal, preciso trocar o estilo para object's. Ou seja ao invés de plotar a fonte wingdings, eu preciso usar o objectcreate para gerar uma linha no início e no fim das candles como o código abaixo define.

Se alguém puder me ajudar, eu agradeço antecipadamente.

Veja o código abaixo



A idéia é criar as order block, porém se eu conseguir estabelecer as linhas, já estarei com Meio Caminho Andado

 
jlaudirt1 #:

A idéia é criar as order block, porém se eu conseguir estabelecer as linhas, já estarei com Meio Caminho Andado

Se você não sabe programar, contrate um programagor na área Freelance...