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

 
Roman Sharanov:

Eu não entendo como escrever indicadores, qual é o problema?

Preciso que uma linha seja desenhada mostrando a diferença de preço entre active_1 e active_2

funciona

Eu também preciso de um ma_period médio ma_period para ser plotado nesta linha, há um problema com ele - não é exibido

Você não verifica o resultado de uma cópia.

Você copia todo o histórico em cada tick.

O número de barras(), e não de tarifas_total deve ser copiado de um símbolo não nativo (não o símbolo do gráfico atual).

A cada dois minutos, você precisa solicitar, por exemplo, o tempo atual do bar para que um símbolo não nativo mantenha seus dados históricos atualizados.

Use SimpleMAOnBuffer() para suavizar os dadosBuffer

 
Artyom Trishkin:

Você não verifica o resultado de uma cópia.

Você copia todo o histórico em cada carrapato.

Um símbolo não nativo (não o símbolo do gráfico atual) deve ter número de Bars() copiado, não taxas_total.

A cada dois minutos, você precisa solicitar, por exemplo, o tempo atual da barra para que o símbolo não nativo mantenha seus dados de histórico atualizados.

Use SimpleMAOnBuffer() para suavizar os dadosBuffer

assim? parou de trabalhar de todo

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

Saudações.

Você poderia me dizer como registrar alguns valores quando uma EA abre um pedido, para que eles se refiram a esse pedido em particular, por exemplo, em um bilhete.

 
Andrey Sokolov:

Saudações.

Você poderia me dizer como registrar alguns valores quando uma EA abre um pedido, para que eles se refiram a esse pedido em particular, por exemplo, em um bilhete.

No comentário

 

Quero observar a volatilidade. Para este fim, calculo a diferença fechada em tmp1 e depois a utilizo para traçar o SMA por um período de interesse.


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 i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


Não ocorrem erros na compilação, o terminal não desenha o indicador, o registro mostra CADJPY,H1: matriz fora do intervalo em '_t1.mq4' (65,11)

Esta é a linha onde a diferençaMathMax-MathMin é calculada, qual pode ser a razão?


 
psyman:

Quero observar a volatilidade. Para este fim, calculo a diferença fechada em tmp1 e depois a utilizo para traçar o SMA por um período de interesse.



Não ocorrem erros na compilação, o terminal não desenha o indicador, o registro mostra CADJPY,H1: matriz fora do intervalo em '_t1.mq4' (65,11)

Esta é a linha onde a diferençaMathMax-MathMin é calculada, qual pode ser a razão?


Eu não entendi o código, mas se assim for:

for(i=1; i<rates_total-1; i++)
 

Não funciona.


UPD

Cadeia simplificada para tmp1[i]=fechar[i] mínimo; O erro permanece o mesmo.

 
psyman:

Quero observar a volatilidade. Para este fim, calculo a diferença fechada em tmp1 e depois a utilizo para traçar o SMA por um período de interesse.



Não ocorrem erros na compilação, o terminal não desenha o indicador, o registro mostra CADJPY,H1: matriz fora do intervalo em '_t1.mq4' (65,11)

Esta é a linha onde a diferençaMathMax-MathMin é calculada.


Array tmp[] é declarado como uma matriz dinâmica e é inicialmente de comprimento zero. Daí o erro.

Você deve declarar esta matriz como um buffer indicador para os cálculos.

 
 

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta para iniciantes em MQL4, ajuda e discussão sobre algoritmos e códigos

Alexey Viktorov, 2018.10.16 12:31

Array tmp[] é declarado como uma matriz dinâmica e é inicialmente de comprimento zero. Daí o erro.

Esta matriz deve ser declarada como um buffer indicador para os cálculos.


Por que não podemos usar uma matriz dinâmica?

Neste caso, eu tenho o preço de fechamento sobrescrito sem nenhum cálculo.

Onde posso ler como usar os amortecedores indicadores?

Razão: