Discusión sobre el artículo "Recetas MQL5 - Asesor multidivisa y funcionamiento de órdenes pendientes en MQL5"

 

Artículo publicado Recetas MQL5 - Asesor multidivisa y funcionamiento de órdenes pendientes en MQL5:

En esta ocasión veremos la creación de un asesor multidivisa, cuyo algoritmo de comercio será construido para trabajar con las órdenes pendientes Buy Stop y Sell Stop. En el artículo estudiaremos las siguientes cuestiones: el comercio en un diapasón temporal indicado, cómo establecer/modificar/eleminar órdenes pendientes, la comprobación de la última posición sobre Take Profit o Stop Loss y el control del historial de operaciones en cada símbolo.

Рецепты MQL5 - Мультивалютный советник и работа с отложенными ордерами на MQL5

Autor: Anatoli Kazharski

 

El tiempo.

Las horas no siempre son suficientes, también son necesarios los minutos. Por ejemplo, si el mercado abre y cierra a horas fraccionarias.

Y esta función plantea preguntas - que necesita para el comercio a través de la medianoche mucho más a menudo de lo que necesita minutos

bool IsInTradeTimeRange(int symbol_number)
  {
//--- Si la negociación por intervalos de tiempo está activada
   if(TradeInTimeRange[symbol_number])
     {
      //--- Estructura de fecha y hora
      MqlDateTime last_date;
      //--- Obtener los últimos datos de fecha y hora
      TimeTradeServer(last_date);
      //--- Fuera de la franja horaria autorizada
      if(last_date.hour<StartTrade[symbol_number] ||
         last_date.hour>=EndTrade[symbol_number])
         return(false);
     }
//--- En el rango de tiempo permitido
   return(true);
  }
 
TheXpert:

El tiempo.

Las horas no siempre son suficientes, también son necesarios los minutos. Por ejemplo, si el mercado abre y cierra a horas fraccionarias.

Y esta función plantea interrogantes: es necesario operar a medianoche mucho más a menudo que en minutos.

Sí, estoy de acuerdo. Intentaré visualizarlo más tarde, en algún esquema nuevo.

Entonces tal vez en lugar de enumeraciones deberíamos hacer una línea donde el usuario especifique la hora por sí mismo. Por ejemplo:"9: 35". Si no, la lista de parámetros se amplía con tres parámetros más (en el esquema del artículo) para especificar los minutos.

Sería genial si hubiera una posibilidad estándar conveniente para especificar la hora. Ahora tenemos datetime, necesitamos hacer tiempo. )

 

De hecho, es todo código de programa, IMHO no es adecuado como artículo, más bien es para la sección Code Base.

 
revers45:

De hecho, es todo código de programa, IMHO no funciona como artículo, más bien es para la sección Code Base.

Ah, bueno. Buen trabajo entonces. Escribe y publica todo en Code Base ;)
 
revers45:

De hecho, es todo código de programa, IMHO no funciona como artículo, más bien es para la sección Code Base.

Este tipo de artículos son convenientes para aprender el lenguaje.

Es más fácil leer el texto y el código, y ver las ilustraciones a la vez, que desplazarse por el artículo por separado, y separar los códigos de diferentes archivos.

Pero estoy de acuerdo en que falta alguna parte descriptiva. Concepto y puntos principales de la aplicación en forma de texto sin formato.

 
komposter:

Estos artículos son muy útiles para aprender un idioma.

Es más fácil leer el texto y el código, y ver las ilustraciones a la vez, que desplazarse por el artículo por separado y separar los códigos de distintos archivos.


Pero estoy de acuerdo en que falta alguna parte descriptiva. Concepto y puntos principales de la aplicación en forma de texto sin formato.

Esta serie de artículos es más para el aprendizaje secuencial de idiomas. El esquema fue descrito en uno de los artículos anteriores y probablemente no tiene sentido describirlo todo de nuevo. Al principio del artículo hay un enlace al artículo donde este esquema fue considerado en detalle. Aquí se escribieron funciones adicionales y se hicieron algunos pequeños cambios. Todo es simple y nada superfluo, y cada línea del código está comentada. Creo que es bueno tener un montón de diferentes esquemas ya hechos que sólo puede recoger y utilizar.

No puedo imaginar qué más se podría haber añadido al artículo. Pero no importa. ))

 
¿Por qué tanto código para varios símbolos? No sería más fácil poner un Asesor Experto para cada símbolo, creo que así el programa se ejecutaría más rápido. En este sentido, estimado autor, ¿podría decirme cómo convertir estas funciones para trabajar con órdenes pendientes, de forma que fueran sólo para un símbolo, salvo la forma de poner en la variable #define NUMBER_OF_SYMBOLS uno?
 
kuva:
¿Por qué hay tanto código para varios símbolos?

Para poder probar el sistema en el tester en varios símbolos a la vez.

kuva:
¿No sería más sencillo poner un Asesor Experto en diferentes símbolos, en mi opinión sería más rápido ejecutar los programas. En este sentido, querido autor, ¿podría decirme cómo convertir este código para que funcione sólo en un carácter, a excepción de la forma de poner en la variable #define NUMBER_OF_SYMBOLS uno?

Si quieres que funcione sólo sobre un carácter, sólo tienes que eliminar todos los bucles relacionados con la búsqueda de caracteres. A partir de algunas funciones, entonces tendrá que eliminar el primer parámetro del número de secuencia de caracteres.

Además, las matrices que se inicializaron con valores de parámetros externos ya no serán necesarias. En las funciones donde se utilizaban tendrán que ser sustituidas por variables de parámetros externos.

[Eliminado]  
Haga la prueba de avance en ticks reales: el resultado de la optimización será el contrario.
 
Es terriblemente incómodo buscar símbolos a través de symbol_number. Solía usar este esquema, pero ahora me he pasado a la POO. Cada símbolo = una instancia de la clase. En tiempo de ejecución, en cada evento OnChartEvent, busca a través de las instancias de la clase en orden. Funciona incluso un poco más rápido.