Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 664

 
Roman Sharanov:

No entiendo cómo se escriben los indicadores, ¿cuál es el problema?

Necesito que se dibuje una línea que muestre la diferencia de precio entre active_1 y active_2

funciona

También necesito un promedio ma_period ma_period para ser trazado en esta línea, hay un problema con él - no se muestra

No se comprueba el resultado de la copia.

Se copia todo el historial en cada tic.

El número de Bars(), no rates_total debe ser copiado de un símbolo no nativo (no el símbolo del gráfico actual).

Cada dos minutos, es necesario solicitar, por ejemplo, la hora actual de la barra de un símbolo no nativo para mantener sus datos históricos actualizados.

Utiliza SimpleMAOnBuffer() para suavizar los datos del dataBuffer

 
Artyom Trishkin:

No se comprueba el resultado de la copia.

Se copia todo el historial en cada tic.

Un símbolo no nativo (no el símbolo del gráfico actual) debería tener copiado el número de Bars(), no rates_total.

Cada dos minutos, es necesario solicitar, por ejemplo, la hora actual de la barra para el símbolo no nativo para mantener sus datos históricos actualizados.

Utiliza SimpleMAOnBuffer() para suavizar los datos del dataBuffer

¿así? dejó de funcionar en absoluto

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();
}
 

Saludos.

Podrían decirme cómo registrar algunos valores cuando un EA abre una orden, para que se refieran a esa orden en particular, por ejemplo en un ticket.

 
Andrey Sokolov:

Saludos.

¿Podríais decirme cómo registrar algunos valores cuando un EA abre una orden? para que se refieran a esa orden en concreto, por ejemplo en un ticket.

En el comentario

 

Quiero observar la volatilidad. Para ello calculo la diferencia cierre-apertura en la matriz tmp1 y luego la utilizo para trazar la SMA para un periodo de interés.


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);
  }


No se producen errores en la compilación, el terminal no dibuja el indicador, el registro muestra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Esta es la línea donde se calcula la diferenciaMathMax-MathMin, ¿cuál puede ser la razón?


 
psyman:

Quiero observar la volatilidad. Para ello calculo la diferencia cierre-apertura en la matriz tmp1 y luego la utilizo para trazar la SMA para un periodo de interés.



No se producen errores en la compilación, el terminal no dibuja el indicador, el registro muestra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Esta es la línea donde se calcula la diferenciaMathMax-MathMin, ¿cuál puede ser la razón?


No he entendido el código, pero si es así:

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

No funciona.


UPD

Cadena simplificada al mínimo tmp1[i]=close[i]; El error sigue siendo el mismo.

 
psyman:

Quiero observar la volatilidad. Para ello calculo la diferencia cierre-apertura en la matriz tmp1 y luego la utilizo para trazar la SMA para un periodo de interés.



No se producen errores en la compilación, el terminal no dibuja el indicador, el registro muestra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Esta es la línea donde se calcula la diferenciaMathMax-MathMin.


La matriz tmp[] se declara como una matriz dinámica y tiene inicialmente una longitud cero. De ahí el error.

Debes declarar este array como un buffer indicador para los cálculos.

 
 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta para principiantes en MQL4, ayuda y discusión sobre algoritmos y códigos

Alexey Viktorov, 2018.10.16 12:31

La matriz tmp[] se declara como una matriz dinámica y tiene inicialmente una longitud cero. De ahí el error.

Este array debe ser declarado como un buffer indicador para los cálculos.


¿Por qué no podemos utilizar una matriz dinámica?

En este caso tengo el precio de cierre sobreescrito allí sin ningún cálculo.

¿Dónde puedo leer cómo utilizar los tampones indicadores?