Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 787

 

Encontrei uma falha estranha ao desenhar no gráfico MT5: setas em vez de velas baixas são colocadas em lugares arbitrários, como se fossem deslocadas para o gráfico




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

Encontrei uma falha estranha ao desenhar no gráfico MT5: setas em vez de velas baixas são colocadas em lugares arbitrários, como se fossem deslocadas para o gráfico




1. O indicador ALREADY tem uma matriz baixa. Ela deve ser aplicada.

2. Não há necessidade de executar a visualização na velocidade máxima.

3. O código é terrivelmente falho - porque em cada carrapato há uma passagem por TODOS os BARs.

 
Vladimir Karputov:

1. O indicador ALREADY tem uma matriz baixa. Aplicá-lo.

2. Não há necessidade de executar a visualização na velocidade máxima.

3. O código é terrivelmente falho - porque em cada carrapato há uma passagem por TODOS os BARs.

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1. O indicador ALREADY tem uma matriz baixa. Aplicá-lo.

2. Não há necessidade de executar a visualização em velocidade máxima.

3. O código é terrivelmente falho - porque em cada carrapato há uma passagem por TODAS as barras.

Eu não postei o código aqui, mas escrevi o mais simples para simplificar o parse.

Conte-me mais sobre o que está errado, sobre a velocidade máxima não está claro.

 
Vitaly Muzichenko:

Vitaly, a inicialização não funciona por alguma razão. Eu tentei escreverPlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); também não funciona :(

 
psyman:

Eu não postei o código aqui, mas escrevi o mais simples para simplificar o parse.

Diga-me mais sobre o que está errado, a velocidade máxima não é clara.

Comece a corrigi-lo um passo de cada vez. Por exemplo, conserte-o primeiro:

O indicador já tem uma matriz baixa. Você precisa aplicá-lo.

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow funciona como uma série verdadeira, Buf_0 é falso, baixo[] também é falso. Isto é, o elemento 0 no seu caso recebe taxas_total-1 (espelhado)

Você precisa virar um deles, por exemplo:

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

Encontrei uma falha estranha ao desenhar no gráfico MT5: setas em vez de velas baixas são colocadas em lugares arbitrários, como se fossem deslocadas para o gráfico



Conhecer o enigma das maçãs na Pinocchio's certamente ajudará com este problema. Não me lembro em detalhes, vamos esperar que alguém o reconte sem erros.

 
Igor Zakharov:

iLow funciona como uma série verdadeira, Buf_0 é falso, baixo[] também é falso. Isto é, o elemento 0 no seu caso recebe taxas_total-1 (espelhado)

Você precisa virar um deles, por exemplo:

Isto é um indicador! Já existem matrizes na OnCalculate.

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

Por que você deve enfiar as funções iXXXX em um indicador?

 
Vladimir Karputov:

Isto é um indicador! OnCalculate ALREADY tem matrizes

Por que você colocaria as funções iXXXXXX em um indicador?

Como eu deveria saber? O questionador usou iLow(), isto significa que ele precisa dele. Talvez seja mais fácil de perceber, talvez ele planeje abordar outro símbolo ou cronograma através de uma variável de entrada (não me lembro, há um copirato em quatro?)

Acrescentada: a pergunta sobre os cinco foi feita no tópico quaternário. Eu o ignorei, eu me arrependo. Mas, a resposta ainda é a mesma.

Razão: