Aqui, na abertura de cada novo bar deve haver um recálculo.
Lógica - ZigZag deve conectar fundos (baixa das últimas 3 barras abaixo de duas adjacentes) e superiores (alta das últimas 3 barras acima de duas adjacentes).
Se um pico é seguido por um novo, o indicador é redesenhado no novo, o antigo é apagado, acho que é claro.
Na verdade, o indicador conecta todos os altos e baixos sequencialmente, qual é o problema?
#property indicator_chart_window#property indicator_buffers2#property indicator_plots1//--- plot ZigZag #property indicator_label1"ZigZag"#property indicator_type1DRAW_ZIGZAG#property indicator_color1clrBlue#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffers double ZigZagBuffer1[];
double ZigZagBuffer2[];
double a = 0;
int last = 0; //В последний раз была вершина или низина int lastN = 0; //Номер бара с экстремумом//+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ intOnInit()
{
//--- связывание массивов и индикаторных буферов SetIndexBuffer(0,ZigZagBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ZigZagBuffer2,INDICATOR_DATA);
//--- значение 0 (пустое значение) не будет участвовать в отрисовке PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
ArrayInitialize(ZigZagBuffer1, EMPTY_VALUE);
ArrayInitialize(ZigZagBuffer2, EMPTY_VALUE);
//--- значение 0 (пустое значение) не будет участвовать в отрисовке PlotIndexSetString(0,PLOT_LABEL,"ZigZag1;ZigZag2");
//--- return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
if(a != iOpen(_Symbol, PERIOD_CURRENT, 0))
{
a = iOpen(_Symbol, PERIOD_CURRENT, 0);
for(int i = Bars(_Symbol, PERIOD_CURRENT) - 3; i > 0; i--)
{
if(high[i] <= high[i+1] && high[i+2] <= high[i+1] && low[i] >= low[i+1] && low[i+2] >= low[i+1]) //В обе стороны на одном баре
{
if(last == 0) continue; //Если с этого начинается расчет - пропускаем простоif(last == 1) //Если была вершина
{
if(high[lastN] > high[i+1])//Если новая верщина не перебила старую
{
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
//Если перебила
ZigZagBuffer1[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
last = -1;
lastN = i+1;
continue;
}
if(last == -1)
{
if(low[lastN] < low[i+1])//Если новая низина не перебила старую
{
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
//Если перебила
ZigZagBuffer2[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
ZigZagBuffer2[i+1] = low[i+1];
last = 1;
lastN = i+1;
continue;
}
}
if(high[i] <= high[i+1] && high[i+2] <= high[i+1]) //Новая вершина
{
if(last == 0)
{
last = 1;
lastN = i+1;
ZigZagBuffer1[i+1] = high[i+1];
continue;
}
if(last == 1)
{
ZigZagBuffer1[lastN] = EMPTY_VALUE;
ZigZagBuffer1[i+1] = high[i+1];
lastN = i+1;
continue;
}
if(last == -1)
{
ZigZagBuffer1[i+1] = high[i+1];
lastN = i+1;
last = 1;
continue;
}
}
if(low[i] >= low[i+1] && low[i+2] >= low[i+1])//Новая низина
{
if(last == 0)
{
last = -1;
lastN = i+1;
ZigZagBuffer2[i+1] = low[i+1];
continue;
}
if(last == -1)
{
ZigZagBuffer2[lastN] = EMPTY_VALUE;
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
continue;
}
if(last == 1)
{
ZigZagBuffer2[i+1] = low[i+1];
lastN = i+1;
last = -1;
continue;
}
}
}
}
return(rates_total);
}
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
Aqui, na abertura de cada novo bar deve haver um recálculo.
Lógica - ZigZag deve conectar fundos (baixa das últimas 3 barras abaixo de duas adjacentes) e superiores (alta das últimas 3 barras acima de duas adjacentes).
Se um pico é seguido por um novo, o indicador é redesenhado no novo, o antigo é apagado, acho que é claro.
Na verdade, o indicador conecta todo o HI e LH em série, qual é o problema?
Tanto quanto sei, você tem 2 amortecedores de desenho. Ambos são desenhados. Cada buffer tem sua própria linha, você recebe um extremo. Há 3 amortecedores no ziguezague. Dois calculados para máximos e mínimos separadamente, e um para desenho de acordo com o sinal de que depois que os máximos foram escritos no buffer, estamos procurando o mínimo e vice versa.
Entendo que você tem dois amortecedores de desenho. Ambos são desenhados. Cada buffer tem sua própria linha, você recebe um extremo. Há 3 amortecedores no ziguezague. Dois amortecedores de cálculo são separados para máximos e mínimos, e um amortecedor é usado para desenhar seguindo o último máximo escrito no amortecedor de máximos, e vice-versa.
Ajuda - o ziguezague é construído usando 2 amortecedores, exemplo com 2 amortecedores também
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Olá! Como posso mudar o tamanho da fonte no terminal? Alguém pode me dar uma dica?
Pode ajudar a mudar o zoom nas configurações do display do sistema operacional, se você tiver tal necessidade.
Há alguma maneira de determinar a partir do OnChartEvent se um botão foi pressionado no teclado quando o mouse clicou sobre o gráfico?
Por favor, ajude-me a entender os indicadores.
Aqui, na abertura de cada novo bar deve haver um recálculo.
Lógica - ZigZag deve conectar fundos (baixa das últimas 3 barras abaixo de duas adjacentes) e superiores (alta das últimas 3 barras acima de duas adjacentes).
Se um pico é seguido por um novo, o indicador é redesenhado no novo, o antigo é apagado, acho que é claro.
Na verdade, o indicador conecta todos os altos e baixos sequencialmente, qual é o problema?
Por favor, ajude-me a entender os indicadores.
Aqui, na abertura de cada novo bar deve haver um recálculo.
Lógica - ZigZag deve conectar fundos (baixa das últimas 3 barras abaixo de duas adjacentes) e superiores (alta das últimas 3 barras acima de duas adjacentes).
Se um pico é seguido por um novo, o indicador é redesenhado no novo, o antigo é apagado, acho que é claro.
Na verdade, o indicador conecta todo o HI e LH em série, qual é o problema?
Tanto quanto sei, você tem 2 amortecedores de desenho. Ambos são desenhados. Cada buffer tem sua própria linha, você recebe um extremo. Há 3 amortecedores no ziguezague. Dois calculados para máximos e mínimos separadamente, e um para desenho de acordo com o sinal de que depois que os máximos foram escritos no buffer, estamos procurando o mínimo e vice versa.
Entendo que você tem dois amortecedores de desenho. Ambos são desenhados. Cada buffer tem sua própria linha, você recebe um extremo. Há 3 amortecedores no ziguezague. Dois amortecedores de cálculo são separados para máximos e mínimos, e um amortecedor é usado para desenhar seguindo o último máximo escrito no amortecedor de máximos, e vice-versa.
Ajuda - o ziguezague é construído usando 2 amortecedores, exemplo com 2 amortecedores também
Pergunta, há uma descrição das bibliotecas padrão para o MT4 ou não?
MT4.
Kudos para os artigos. Ótimo trabalho.
Ajuda - o ziguezague é construído sobre 2 amortecedores, exemplo com 2 amortecedores também
Início do código ZZ.
Um buffer de desenho. Três matrizes.
Veja o código. A lógica é complexa. Geralmente é difícil de fazer na mosca.
Código ZigZag com comentários traduzidos para o russoMT4.
Kudos para os artigos. Ótimo trabalho.
Não importa - quase tudo se encaixa.
Obrigado.