Autoaprendizaje del lenguaje MQL5 desde cero - página 75

 

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. Hice un pequeño cambio en el código de Vasiliy Sokolov para abrir sólo una posición por día, como se pretendía originalmente en el algoritmo del Asesor Experto. El cambio está resaltado en amarillo.

Saludos cordiales, Vladimir.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   price=NormalizeDouble(price,digits);

   if(IsMainPositionOpen() == false && IsTimeForOpen())
     {
      if(TickUP()==(price+point))
         OpenBUY();
      else
        {
         if(TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if(IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov:

El bloque OnInit también está sobredimensionado y todavía no está escrito correctamente. En primer lugar, hay que intentar escribir identificadores, no números. Devuelve INIT_SUCCEED en lugar de -1. En segundo lugar, el cambio es excesivo aquí. Este código debe contener un if o un switch. Primero hay que escribir uno y luego el otro - sólo aceite.

En tercer lugar, tenemos que controlar todos los tipos de cuentas. Tenemos Demo y luego tenemos Real. Y luego está el Concurso. Pero incluso si no hubiera una tercera cuenta, debería haber un talón que recogiera todas las demás variantes:

Probablemente sería más razonable explicar cómo funcionan las excepciones, de lo contrario no se entenderá por qué debería haber algún tipo de control sobre algo que no se conoce.

En su versión más exagerada, debería ser la siguiente:

1. iniciar la ejecución de un programa

2. trabajar a través del algoritmo y salir de él en dos direcciones:

a) Verdadero: el algoritmo ha funcionado correctamente

b) Falso - el algoritmo no ha funcionado

Al mismo tiempo, trabajar en a) significa que aquí se cumplen todas las opciones que el programador quiere implementar, y en b) todo lo demás, y no importa, si es necesario o no. Es decir, el programador sólo implementa la funcionalidad que desea y todo lo demás debe quedar excluido.

 
Konstantin:

Probablemente tenga más sentido explicar el trabajo con excepciones, de lo contrario no se entiende por qué es necesario controlar algo que no se conoce en primer lugar.

En su versión más exagerada, debería ser la siguiente:

1. iniciar la ejecución de un programa

2. trabajar a través del algoritmo y salir de él en dos direcciones:

a) Verdadero: el algoritmo ha funcionado correctamente

b) Falso - el algoritmo no ha funcionado

Al mismo tiempo, trabajar en a) significa que aquí se cumplen todas las opciones que el programador quiere implementar, y en b) todo lo demás, y no importa, si es necesario o no. Es decir, el programador implementa sólo aquella funcionalidad que inserta, y todo lo demás debe ser lanzado como una excepción.

Hola Konstantin! Gracias por tu aclaración.

¡Estimados participantes de este hilo! Una vez más me gustaría agradecer a todos vosotros las sugerencias y consejos constructivos que me han ayudado en el aprendizaje del lenguaje de programación MQL5.

Por ahora he hecho una pausa porque mi trabajo principal no me permite dedicar mucho tiempo y atención al autoaprendizaje, pero por ahora el resultado principal está conseguido: entiendo los fundamentos de la programación, leo códigos de terceros y escribo mis propias funciones.

Publicaré la versión de Trailing_Stop (v.1).mq5 Expert Advisor con comentarios detallados sobre cada línea de código, en una forma accesible para un estudiante de primer grado de una escuela de programación, como prometí antes, pero un poco más tarde.

Saludos, Vladimir.

 

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. Por fin tengo tiempo suficiente para escribir una versión del Asesor Experto con comentarios detallados en cada línea de código, de forma accesible para los estudiantes de primer año de una escuela de programación. Como el código del Asesor Experto es bastante voluminoso, lo estoy publicando como un archivo llamado Trailing_Stop_gv.22.mq5.

Antes de publicar el código, comprobamos el Asesor Experto en el probador de estrategias. No se ha encontrado ningún problema. En el Asesor Experto se utiliza el sistema de compensación de la contabilidad de posiciones. Este sistema de contabilidad significa que en un momento dado en la cuenta, sólo puede haber una posición abierta para un mismo símbolo (valor).

En este momento, el Asesor Experto ha implementado la capacidad de:

  1. Compruebe la cuenta comercial en la que piensa instalarlo. Si el Asesor Experto será instalado en una cuenta demo, entonces en el cuadro de mensajes aparecerá el permiso para seguir trabajando. Si se intenta instalar el Asesor Experto en una cuenta real, la ventana de mensajes mostrará una advertencia de que no puede seguir funcionando, y luego se eliminará automáticamente de la ventana de trabajo del terminal de operaciones.
  2. Una vez al día, a las 9 de la mañana, hora de Moscú, abra automáticamente una posición en la dirección a la que se dirige el primer tick. Por ejemplo, si el primer tick se dirige hacia arriba a las 9 de la mañana, hora de Moscú, se abrirá una posición de COMPRA; si el primer tick se dirige hacia abajo, se abrirá una posición de VENTA.
  3. Establece el tamaño del lote.
  4. Establezca el tamaño del stop loss.
  5. Especifique el nivel relativo al precio de apertura, en el que el Stop Loss se mueve al Breakeven.
  6. Establezca el paso de arrastre del stop loss.

Esta versión del Asesor Experto implementa la mayoría de los consejos, previamente sugeridos por Vasily Sokolov.

¡¡¡ADVERTENCIA!!!

¡Este Asesor Experto fue desarrollado de acuerdo con el plan de auto-estudio para las cuentas de demostración, y está destinado sólo para fines de formación! No está pensado para operar en una cuenta real y obtener beneficios.

Sinceramente, Vladimir.

Archivos adjuntos:
 
MrBrooklin:

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. Por fin tengo tiempo suficiente para escribir una versión del Asesor Experto con comentarios detallados en cada línea de código, de forma accesible para los estudiantes de primer año de una escuela de programación. Como el código del Asesor Experto es bastante engorroso, lo estoy publicando como un archivo llamado Trailing_Stop (v.2).mq5.

Antes de publicar el código, comprobamos el Asesor Experto en el probador de estrategias. No se ha encontrado ningún problema. En el Asesor Experto se utiliza el sistema de compensación de la contabilidad de posiciones. Este sistema de contabilidad significa que en un momento dado en la cuenta, sólo puede haber una posición abierta para el mismo símbolo (instrumento financiero).

En este momento, el Asesor Experto ha implementado la capacidad de:

  1. Compruebe la cuenta comercial en la que piensa instalarlo. Si el Asesor Experto será instalado en una cuenta demo, entonces en el cuadro de mensajes aparecerá el permiso para seguir trabajando. Si se intenta instalar el Asesor Experto en una cuenta real, la ventana de mensajes mostrará una advertencia de que no puede seguir funcionando, y luego se eliminará automáticamente de la ventana de trabajo del terminal de operaciones.
  2. Una vez al día, a las 9 de la mañana hora de Moscú en punto, abra automáticamente una posición en la dirección a la que se dirige el primer tick. Por ejemplo, si el primer tick se dirige hacia arriba a las 9 de la mañana, hora de Moscú, se abrirá una posición de COMPRA; si el primer tick se dirige hacia abajo, se abrirá una posición de VENTA.
  3. Establece el tamaño del lote.
  4. Establezca el tamaño del stop loss.
  5. Especifique el nivel relativo al precio de apertura, en el que el Stop Loss se mueve al Breakeven.
  6. Establezca el paso de arrastre del stop loss.

Esta versión del Asesor Experto implementa la mayoría de los consejos, previamente sugeridos por Vasily Sokolov.

¡¡¡ADVERTENCIA!!!

¡Este Asesor Experto fue desarrollado de acuerdo con el plan de auto-estudio para las cuentas de demostración, y está destinado sólo para fines de formación! No está pensado para operar en una cuenta real y obtener beneficios.

Sinceramente, Vladimir.

¡Hola! - No compila.

Trailing_Stop_gv.22.mq5

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Lo he resuelto - nombre sin paréntesis para crear Trailing_Stop (v.2) Expert Advisor

 
SanAlex:

¡Hola! - No compila.

Hola, acabo de descargar el archivo de la página web y lo he comprobado en mi MetaEditor, todo compila bien.

Saludos, Vladimir.

 
MrBrooklin:

Hola, acabo de descargar el archivo de la página web y lo he comprobado en mi MetaEditor, todo compila bien.

Saludos, Vladimir.

Gracias! por el trabajo. no introduje el nombre correctamente al crear el Asesor Experto. todo funciona.

 
SanAlex:

Gracias! por el trabajo. no introduje el nombre correctamente al crear el experto. todo funciona.

Es un placer.

Saludos, Vladimir.

 

¡Estimados participantes de este hilo!

Una vez más, me gustaría daros las gracias a todos por vuestras constructivas sugerencias, consejos y sugerencias, que me han ayudado a aprender los fundamentos del lenguaje de programación MQL5. Un agradecimiento especial a Vasily Sokolov. Que Dios los bendiga a todos.

Con gran respeto a todos, Vladimir.

 

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. Actualmente estoy escribiendo el código para un nuevo EA. Me he enfrentado a un punto, que no entiendo muy bien cómo resolver. La tarea parece ser simple - Quiero que mi Asesor Experto trabaje en el gráfico del par de divisas, que se establece en los parámetros de entrada del EA. Si se intenta (por ejemplo, por error) instalarlo en el gráfico de otro par de divisas, el Asesor Experto debería hacer una advertencia sobre la imposibilidad de seguir trabajando.

Este es el esquema del código del programa:

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart=SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION);
   if(currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

El compilador no muestra ningún error. El código que no funciona está resaltado en amarillo. Tal vez sea porque no entiendo bien el significado del identificador SYMBOL_DESCRIPTION - cadena de descripción del carácter. He intentado utilizar otros identificadores pero el resultado es el mismo. ¿Quizás la función SymbolInfoString( ) no sea necesaria en este caso? Escribí el nombre del par de divisas GBPUSDrfd sólo porque planeo usar el Asesor Experto en Alpha-Forex, mientras que todos los símbolos de este corredor tienen la terminación rfd.

Estimado asesor experto, ¡por favor, aconséjeme en qué dirección pensar!

Saludos, Vladimir.

Razón de la queja: