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.
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.
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); } //+------------------------------------------------------------------+
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](https://c.mql5.com/36/21/dokumentaciya-po-mql5-polzovatelskie.png)
- www.mql5.com
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.
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); } //+------------------------------------------------------------------+
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](https://c.mql5.com/36/21/dokumentaciya-po-mql5-polzovatelskie__1.png)
- www.mql5.com
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...
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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?