Linha vertical.

 
Olá! Comecei a fazer um indicador que desenhará uma linha entre dois pips no tempo e no preço, a maneira como a linha é desenhada é assim:
for(int w=limit;w<rates_total;w++)
 SupportBuffer[w]=low[s1]+speeds*(w-s1);
Tudo está bem, mas às vezes os pontos de tempo podem estar em uma vela, você recebe uma linha vertical. Entendo que SupportBuffer[w] não pode ser feito vertical?
 
Nauris Zukas:
Olá! Comecei a fazer um indicador que desenhará uma linha entre dois pips no tempo e no preço, a maneira como a linha é desenhada é aproximadamente assim:
Tudo está bem, mas às vezes os pontos de tempo podem estar em uma vela, você recebe uma linha vertical. Presumo que SupportBuffer[w] não possa ser feito na vertical?

Se usarmos um ziguezague em vez de uma linha, ele funciona.

 
Alexey Viktorov:

Se você usar um ziguezague em vez de uma linha, ele funciona.

Obrigado, vou tentar desmontar o ZigZag e entender o princípio de traçar uma linha.

 
Alexey Viktorov:

Se você usar um ziguezague ao invés de uma linha, ele funcionará.

O próprio ZigZag acabou sendo bastante obediente, portanto não foi fácil desmontar. Mas eu preparei um exemplo simples... Você pode adicionar uma função, onde em 3 barras da última barra haverá uma linha entre Alto e Baixo de acordo com seu conselho ziguezague? Gostaria de compreender o princípio, e então eu mesmo conseguirei desenvolvê-lo.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Support
#property indicator_label1  "Line"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//--- indicator buffers
double         LineTest[];
double         HighMapBuffer[];     // highs
double         LowMapBuffer[];      // lows
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LineTest,INDICATOR_DATA);
   SetIndexBuffer(1,HighMapBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,LowMapBuffer,INDICATOR_CALCULATIONS);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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=prev_calculated;

   for(int i2=limit;i2<rates_total;i2++) // New bar recalculate
     {
      if(limit<rates_total-1)continue; // New bar recalculate
      for(int i=0;i<rates_total;i++)
        {
         //if(i<rates_total-3 && i>rates_total-15) // H Line 3-15 bar
         //   LineTest[i]=high[rates_total-2]; // Price
         //else LineTest[i]=EMPTY_VALUE; 
         
         HighMapBuffer[i]=high[rates_total-3];
         LowMapBuffer[i]=low[rates_total-3];
         LineTest[i]=                    // ???
         

        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

O próprio ZigZag acabou sendo bastante obediente, portanto não foi fácil desmontar. Mas eu preparei um exemplo simples... Você pode adicionar uma função, onde em 3 barras da última barra haverá uma linha entre Alto e Baixo de acordo com seu conselho ziguezague? Gostaria de compreender o princípio e então eu mesmo poderei desenvolvê-lo.

https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_ZIGZAG
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_ZIGZAG
  • www.mql5.com
//|                                                  DRAW_ZIGZAG.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Custom indicator initialization function                         |...
 
Taras Slobodyanik:

https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag


Obrigado, já há alguma descrição e é um estilo, não um indicador :), vou tentar descobrir.

 
Qualquer idéia do porquê em OnCalculate depois de iniciar as tarifas terminais_total: no primeiro tick 372158 e depois tarifas normais_total: 10001 ?
 

A linha vertical funcionou, mas não consigo descobrir como remover a linha de conexão entre as linhas verticais. Alguém pode corrigir meu exemplo para que a linha de conexão desapareça?

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot ZigZag
#property indicator_label1  "ZigZag"
#property indicator_type1   DRAW_ZIGZAG
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  10

//--- indicator buffers
double         ZigZagBuffer1[];
double         ZigZagBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,ZigZagBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,ZigZagBuffer2,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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=prev_calculated;
   if(prev_calculated==0)limit=rates_total-1;

   for(int i2=limit;i2<rates_total;i2++) // recalculate on new bar
     {

      for(int i=0;i<rates_total;i++)
        {
         if(i==rates_total-3 || i==rates_total-15) // should be VLine on 3th and 15th bar!
           {
            ZigZagBuffer1[i]=high[i];
           }
         else
           {
            ZigZagBuffer1[i]=EMPTY_VALUE;
           }
                      
         if(i==rates_total-3 || i==rates_total-15) // should be VLine on 3th and 15th bar !
           {
            ZigZagBuffer2[i]=low[i];
           }
         else
           {
            ZigZagBuffer2[i]=EMPTY_VALUE;
           }           
           
         if(ZigZagBuffer1[i]!=EMPTY_VALUE )Print(" ZigZagBuffer1[",i,"]: ",ZigZagBuffer1[i]);
         if(ZigZagBuffer2[i]!=EMPTY_VALUE )Print(" ZigZagBuffer2[",i,"]: ",ZigZagBuffer2[i]);

        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

A linha vertical funcionou, mas não consigo descobrir como remover a linha de conexão entre as linhas verticais. Alguém pode corrigir meu exemplo para que a linha de conexão desapareça?

Bem, eu estava errado então. Eu não entendia o propósito...

Neste caso é necessário, e mais fácil, utilizar o desenho gráfico DRAW_HISTOGRAM2

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_HISTOGRAM2
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_HISTOGRAM2
  • www.mql5.com
//|                                              DRAW_HISTOGRAM2.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Custom indicator initialization function                         |...
 
Alexey Viktorov:

Bem, eu estava errado então. Eu não entendia o propósito...

Neste caso é necessário, e mais fácil, usar o gráfico DRAW_HISTOGRAM2

Obrigado, eu vou tentar!

Outra pergunta, o DRAW_HISTOGRAM2 só desenha verticalmente ou também pode desenhar obliquamente (entre duas barras)?
 
Nauris Zukas:

Obrigado, eu vou tentar!

Outra pergunta, DRAW_HISTOGRAM2 desenha apenas verticalmente ou também pode inclinar-se (entre duas barras)?

Você terá que decidir o que quer...

Se você precisar misturá-lo, apenas algumas vezes remova as conexões entre as duas seções verticais do ziguezague, então é melhor pegar um ziguezague colorido e colocar a condição para não atribuir nenhuma cor.

Não faria mal ler toda a seção de documentação sobre a trama gráfica. Isso lhe daria uma idéia do que pode ser feito...