Discusión sobre el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" - página 27

 
Rustam Ayupov #:

¡Estimado Vladimir ! Llegué a su trabajo titánico para dummies, mis prioridades están cambiando, demo trading será su propio camino, y lo principal ahora es su escuela para principiantes, mastico valiosos apretones de su experiencia, es invaluable, no hay palabras. Si llego a cómo insertar un trailing stop en este EA, probablemente lo haré como una prioridad, porque como resultado de la optimización hacia adelante, la EA crea takeprofits largo, su red de seguridad se ha convertido en gritar. Y en el transcurso de la formación en su escuela probablemente aprenderé a ver los errores, sin los cuales no hay programas de trabajo, y corregirlos. GRACIAS

Atentamente, Rustam.

De nada, Rustam.

Con respeto, Vladimir.

 
Valeriy Yastremskiy #:

Responder o Nuevo comentario, en la parte inferior Adjuntar un archivo.

GRACIAS por la ingeniosa simplicidad) Y una pregunta, ¿cómo haría usted, con su experiencia de arrastre, insertar uno de estos en este EA ?

 
MrBrooklin #:

¡Por favor, Rustam!

Saludos, Vladimir.

He encontrado un único, simple al genio, "trailing método" del Asesor Experto, el propio autor, que, como es tradicional para este desarrollo, no se ejecuta como el autor comentó. Él, como yo, probablemente también es un tonto, pero uno grande) Prometió que cuando el precio se invierte, la posición previamente abierta se cierra, bueno, sí, sería genial si lo fuera... pero sólo dos posiciones abiertas están colgando, en ambas direcciones, y no se cierran. Antes, antes de tu primer consejo, había una lluvia de posiciones abiertas en ambas direcciones, que no estaban cerradas. ¿Intentamos apretar esta guinda del pastel?

 
Rustam Ayupov #:

GRACIAS por la ingeniosa sencillez) Y una pregunta, ¿como harías, con tu experiencia en trailing, para insertar uno en este EA?

Si el resultado con trailing es mejor que sin él, pues déjalo.

 
Valeriy Yastremskiy #:

Si el resultado es mejor con la red de arrastre que sin ella, déjela.

No es difícil insertarlo, pero ¿qué insertar? Probar y evaluar.

 
Rustam Ayupov #:

No es difícil ponerlo, pero ¿para qué hay que ponerlo? Para probarlo.

código de arrastre en su EA sin arrastre. Es mejor poner el código de arrastre en una función. Y llamar al arrastre por condición, si hay una orden.

 
Rustam Ayupov #:

Encontré un único, simple de genio, "método trailing" del Asesor Experto, el propio autor, que, como es tradicional para este desarrollo, no se ejecuta como el autor comentó. Él, como yo, probablemente también es un tonto, pero uno grande) Prometió que cuando el precio se invierte, la posición previamente abierta se cierra, bueno, sí, sería genial si lo fuera... pero sólo dos posiciones abiertas están colgando, en ambas direcciones, y no se cierran. Antes, antes de tu primer consejo, había una lluvia de posiciones abiertas en ambas direcciones, que no estaban cerradas. ¿Intentamos apretar esta guinda del pastel?

¡Hola, Rustam! Para que podamos seguir cooperando productivamente, primero tienes que aprender a adjuntar el código del EA con problemas a tu mensaje. Si tienes problemas mientras pruebas el EA, necesitas guardar este código bajo un nuevo nombre, compilarlo y luego adjuntarlo al mensaje. ¡¡¡Debe guardar el EA con un nuevo nombre y compilarlo !!! De lo contrario, nos confundiremos en diferentes variantes a la hora de comunicarnos con usted.

Si por alguna razón no puedes adjuntar el código del EA, puedes utilizar otra forma:

  1. En el MetaEditor, resalte el código del EA con problemas pulsando Ctrl+A.
  2. Copie el código del EA presionando el botón Ctrl+C.
  3. Crear un mensaje que desea publicar aquí en el foro y pulsando el botón AL + S abrir un campo donde tiene que pegar el código copiado pulsando el botón Ctrl + V.
  4. Añade tu mensaje al foro

Si no aprendes a adjuntar o colocar en tus mensajes el código del EA con problemas, entonces el diálogo posterior contigo se vuelve inútil.

Saludos, Vladimir.

 
MrBrooklin #:

¡Hola, Rustam! Para que podamos seguir colaborando de forma productiva, primero tienes que aprender a adjuntar el código del EA con problemas a un mensaje. Si tienes problemas mientras pruebas el EA, necesitas guardar este código bajo un nuevo nombre, compilarlo y luego adjuntarlo al mensaje. ¡¡¡Debes guardar el EA con un nuevo nombre y compilarlo !!! De lo contrario, usted y yo nos confundiremos en diferentes variantes al comunicarnos con usted.

Si por alguna razón no puedes adjuntar el código del EA, puedes utilizar otra forma:

  1. En MetaEditor, resalte el código del EA con problemas pulsando Ctrl+A.
  2. Copie el código del EA presionando el botón Ctrl+C.
  3. Crear un mensaje que desea publicar aquí en el foro y pulsando el botón AL + S abrir un campo donde tiene que pegar el código copiado pulsando el botón Ctrl + V.
  4. Añade el mensaje al foro

Si no aprendes a adjuntar o publicar el código de EA con problemas en tus mensajes, será inútil seguir dialogando contigo.

Saludos, Vladimir.

Lo siento por el retraso, me quemé durante el fin de semana, pero encontró la causa del último problema, resultó que el corredor FXopen, simplemente no creció hasta MT5. Bueno y me enseñó la simplicidad de la selección de archivos, para enviar. Los dos primeros son su optimización del trabajo del autor, donde se detuvo la falta de atención del autor en el código, con la apertura masiva de posiciones, en lugar de uno, el único, los dos segundos son su declaración de cerrar una posición cuando el precio se invierte. El segundo vale la pena trabajar, después de todo, el autor, si no ha terminado, pero quería rentable).

Archivos adjuntos:
 
Rustam Ayupov #:

Lo siento por el retraso, durante el fin de semana quemado, 24 horas, pero encontró la causa del último problema, resultó que el corredor FXopen, simplemente no creció hasta MT5. Bueno y me enseñó la simplicidad de la selección de archivos, para enviar. Los dos primeros son su optimización del trabajo del autor, donde se detuvo la falta de atención del autor en el código, con la apertura masiva de posiciones, en lugar de una, una sola, los dos segundos son su declaración de cerrar una posición cuando el precio se invierte. El segundo vale la pena trabajar, después de todo, el autor, si no ha terminado, pero quería rentable).

Bueno con este, el último, todavía estoy ordenando, tratando de entender algo y empezar a navegar en él, mientras que al seguro de takeprofits largo. Ya estoy listo para las sorpresas del autor en el futuro, el camino será recorrido por el que camina).

Archivos adjuntos:
 
Rustam Ayupov #:

Bueno con esto último, todavía estoy intentando entender algo y empezar a orientarme en ello, por el momento para cubrirme a largo takeprofits. Ya estoy preparado para las sorpresas del autor en el futuro, camino andará el que ande).

¡Hola Rustam! Te adjunto la versión funcional de este Asesor Experto al final del mensaje. Los cambios se han realizado en esta sección del código:

//--- Poniendo todo junto 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // ejecución inmediata de la orden
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // último precio de venta
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // par de divisas
         mrequest.volume = Lot;                                                 // número de lotes a negociar
         mrequest.magic = EA_Magic;                                             // Número mágico de pedido
         mrequest.type = ORDER_TYPE_BUY;                                        // Orden de compra
         mrequest.type_filling = ORDER_FILLING_FOK;                             // Tipo de ejecución de la orden
         mrequest.deviation=100;                                                // Desviación del precio actual
         //--- enviar pedido
         bool check=OrderSend(mrequest,mresult);
         // obtener el código de resultado
         if(mresult.retcode==10009 || mresult.retcode==10008) //Solicitud completada o pedido realizado
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2. Comprobación de una configuración de venta/venta en corto: MA-8 decreciente a la baja, 
 cierre del precio anterior por debajo, ADX > 22, -DI > +DI
*/.
//--- Declarar variables de tipo bool para contener nuestras Condiciones de Venta
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 decreciente hacia abajo
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // El precio anterior cerró por debajo de MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // Valor ADX actual superior al mínimo (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI mayor que +DI

//--- Poniendo todo junto
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // ejecución inmediata de la orden
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // último precio de oferta
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                          // par de divisas
         mrequest.volume = Lot;                                              // número de lotes a negociar
         mrequest.magic = EA_Magic;                                          // Número mágico de pedido
         mrequest.type= ORDER_TYPE_SELL;                                     // Orden de venta
         mrequest.type_filling = ORDER_FILLING_FOK;                          // Tipo de ejecución de la orden
         mrequest.deviation=100;                                             // Desviación del precio actual
         //--- enviar pedido
         bool check=OrderSend(mrequest,mresult);
         // obtener el código de resultado
         if(mresult.retcode==10009 || mresult.retcode==10008) //Solicitud completada o pedido realizado
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

Se agregó lo que está resaltado en amarillo:

&& PositionsTotal()==0

y también se eliminó la condición relacionada con Buy_opened y Sell_opened:

         // ¿alguna posición de compra abierta?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // No abrir una nueva posición de compra
           }
.
.
.
         // ¿alguna posición de venta abierta?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // No abrir una nueva posición de venta
           }

Saludos, Vladimir.

Archivos adjuntos: