Discusión sobre el artículo "Crear Multi-Expert Advisors basados en los modelos de trading" - página 5

 

MetaTrader 5 Client Terminal build 381

...

MQL5: Se actualizó la biblioteca estándar: los métodos Type() de las clases CDealInfo, CHistoryOrderInfo, COrderInfo y CPositionInfo fueron renombrados en DealType(), OrderType() y PositionType(), respectivamente.

...


Dado que el modelo depende de las clases comerciales base, cualquier cambio, por pequeño que sea, en sus interfaces es crítico. En este caso, el error puede solucionarse fácilmente simplemente cambiando el método Type() por el correspondiente OrderType() en el archivo TableOrders.mqh.

En un futuro próximo, los códigos adjuntos al artículo se actualizarán para que funcionen correctamente en las últimas versiones del compilador y del terminal.

 

chr1sch4n: No hay ningún error... el código que has reescrito es idéntico.

En lenguaje C, las sentencias case caen, por eso tienes que poner la sentencia break, por lo tanto el Buy debería caer a la siguiente sentencia y seguir ejecutando la orden.

consulte: http: //en.wikipedia.org/wiki/Switch_statement ; sección C, C++, Java, PHP, ActionScript, JavaScript; "este es un ejemplo clásico de omisión de la línea de ruptura para permitir la caída a través de"

saludos

 
Lugner:

Una petición: ¿se pueden traducir los comentarios de los archivos en inglés?

Arreglado. Gracias.
 
Uno de los mejores artículos que he leído, muchas gracias.
 

No consigo el impresionante backtest que se muestra en el artículo. ¿Cuáles son los ajustes que tengo que hacer?

 

"Vale la pena describir la variablem_timing por separado. En el curso del trabajo del Asesor Experto se requiere llamar a ciertos eventos en determinados intervalos de tiempo. La funciónOnTimer()no es adecuada para esto, porque diferentes modelos pueden tener diferentes intervalos de tiempo.

Por ejemplo, algunos eventos necesitan ser llamados cada nueva barra. Para un modelo que opera en un gráfico horario, tales eventos deben ser llamados cada hora, para un modelo que opera en un gráfico diario - cada nueva barra diaria. Está claro que estos modelos tienen diferentes configuraciones de tiempo y cada uno debe ser almacenado en su propio modelo en consecuencia. La estructura t_period incluida en la clase CModel permite almacenar estas configuraciones por separado, cada una en su propio modelo.

Este es el aspecto de esta estructura:

struct t_period
{
 большая структура 
};

Como puedes ver, incluye la enumeración habitual de timeframes. Para saber si se ha producido una nueva barra, debemos comparar la hora de la última barra con la hora registrada en la estructura t_period. Si el tiempo no coincide, entonces se ha producido una nueva barra, el tiempo en la estructura debe actualizarse al tiempo de la barra actual y devolver un resultado positivo (true). Si la hora de la última barra y la estructura coinciden, significa que todavía no se ha producido una nueva barra y sólo tenemos que devolver un resultado negativo (false).

He aquí una función que funciona según el algoritmo descrito:

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
большой swich
} 

"

Soy, por supuesto, sólo un programador novato, pero tal vez es posible determinar el inicio de una nueva barra para hacerlo (mientras que la variable m_timing sólo datetime):

Si estoy equivocado con las conclusiones, me disculpo de antemano y le pido que me corrija. Si no me equivoco - Doy las gracias a este sitio y, en particular, todos los que trabajan aquí - artículos, documentación escribe - Empecé a entender algo.

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
   int rez;
   MqlRates raters[1];
   rez=CopyRates(symbol, tf, 0, 1, raters);
   if(rez==0)
   {
      Print("Error timing");
      return(false);
   }
   if (TimeCurrent()-raters.time)>PeriodSeconds(tf) return(true); else return(false);
   
} 


PD: Por cierto, gracias por un gran artículo.

 

Hola,

¿cómo puedo mejorar el modelo o la función Processing() para soportar el comercio de pares (otro símbolo)? Ahora todo funciona con el indicador y el comercio posterior en el mismo símbolo solamente. ¿Cómo puedo añadir Symbol1 y Symbol2 para poder comprar Symbol1 y vender Symbol2 simultáneamente?

Gracias por la ayuda

P.D.: O comprar/vender Symbol1 basado en el comportamiento del indicador en Symbol2...

 
P_Cherry:

Hola,

¿cómo puedo mejorar el modelo o la función Processing() para soportar el comercio de pares (otro símbolo)? Ahora todo funciona con el indicador y el comercio posterior en el mismo símbolo solamente. ¿Cómo puedo añadir Symbol1 y Symbol2 para poder comprar Symbol1 y vender Symbol2 simultáneamente?

Gracias por la ayuda

P.D.: O comprar/vender Symbol1 basado en el comportamiento del indicador en Symbol2...

Espero que sea posible.
 
Automated-Trading:
Arreglado. Gracias.
Gracias.
 

Hola,

Gracias por este gran artículo...

En la función ReplacedDelayedOrders está la línea de código: for(int b=0;i<history_orders;b++)

Creo que esto provocará un bucle sin fin, ¿o me equivoco?

Creo que la línea de código debe ser: for(int b=0;b<history_orders;b++)

Adiós, T.