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

 

Hola a todos,

Nuevo en MQL5 (y FOREX para el caso), pero, programador de mucho tiempo. Abrí el archivo My_First_EA.mq5 y compilado, pero, no estoy recibiendo las funciones de depuración. Si abro cualquiera de los archivos de script de ejemplo me sale la opción Debug. También he recibido una advertencia de que el valor de retorno de 'OrderSend' debe ser comprobado. ¿Qué tengo que hacer para obtener la funcionalidad de depuración?

Louis

 
louisd:

Hola a todos,

Nuevo en MQL5 (y FOREX para el caso), pero, programador de mucho tiempo. Abrí el archivo My_First_EA.mq5 y compilado, pero, no estoy recibiendo las funciones de depuración. Si abro cualquiera de los archivos de script de ejemplo me sale la opción Debug. También he recibido una advertencia de que el valor de retorno de 'OrderSend' debe ser comprobado. ¿Qué tengo que hacer para obtener la funcionalidad de depuración?

Louis

Hola a todos,

Descubrí mi propio problema. He creado un nuevo proyecto con el Asistente de Asesor Experto y luego acaba de copiar en el archivo My_First_EA.mq5 y me sale la funcionalidad de depuración.

Louis

 
louisd:

Hola a todos,

Descubrí mi propio problema. He creado un nuevo proyecto con el Asistente Asesor Experto y luego simplemente copiado en el archivo My_First_EA.mq5 y me sale la funcionalidad de depuración.

Louis

Pero, ¿has arreglado la advertencia 'OrderSend should be checked'?
 
Boobwood:

Tengo 4756 error, vi la solución en la página 2, y he comprobado el código orginal, había ZeroMemory(mrequest); en la línea 218 en sí. pero todavía tengo el error 4756.


También sigo teniendo este error habiendo hecho las dos correcciones sugeridas:

ZeroMemory(mrequest);

y también

if(Compra_abierta || Venta_abierta)

¿Puede alguien ayudarme con el error 4756? Parece que no se puede colocar una orden de compra.

 
Tchuso:

Hola, me aparece un error:

return value of ´OrderSend´should be checked líneas 213 y 259


lo habéis resuelto?

Buenos días Tchuso,

A mi me pasó lo mismo. Lo arreglé sustituyendo esas líneas en ambas operaciones por esto.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

Dime si te vale la ayuda que yo también soy nuevo.

Un saludo!

 

El ódigo de ejemplo me gusta bastante, soy nuevo en esto tambien, arregle el codigo tal como aparece en los comentarios y ya no da errores.

El problema es que el robot no abre operacciones, ni siquiera abre una operación

¿Alguno pudo resolver este problema?


Estoy usando La opción "Unico" del probador de estrategías: ¿Es un error mio?


Gracias por su tiempo y en apoyarme
 


Me di cuenta que el Robot intenta abris las ordenes pero siempre da error:


Salida:

2020.05.06 20:35:16.141    Core 1    2020.04.20 20:25:00   failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request]


He cambiado Varias cosas en el código pero ne se me da, les agrego el código que tengo:


Original: mrequest.type_filling = "Lo he puesto de las 3 formas que estan en la documentación"

 mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price
         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;                                            // currency pair
         mrequest.volume = Lot;                                                 // number of lots to trade
         mrequest.magic = EA_Magic;                                             // Order Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order
         mrequest.type_filling = ORDER_FILLING_RETURN;                             // Order execution type
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //--- declaracion e inicializacion de la solicitud y el resultado
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
            //--- parametros de la solicitud
               request.action   =TRADE_ACTION_DEAL;                     // tipo de operacion comercial
               request.symbol   =Symbol();                              // simbolo
               request.volume   =0.1;                                   // volumen de 0.1 lote
               request.type     =ORDER_TYPE_BUY;                        // tipo de orden
               request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // precio de apertura
               request.deviation=5;                                     // desviacion permisible del precio
               request.magic    =EA_Magic;                          // Numero magico de la orden

               //--- envio de la solicitud
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // si no se ha logrado enviar la solicitud, introducir el codigo de error
               //--- informacion sobre la operacion
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

        

 
Libni Colina:


Me di cuenta que el Robot intenta abris las ordenes pero siempre da error:


Salida:

2020.05.06 20:35:16.141    Core 1    2020.04.20 20:25:00   failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request]


He cambiado Varias cosas en el código pero ne se me da, les agrego el código que tengo:


Original: mrequest.type_filling = "Lo he puesto de las 3 formas que estan en la documentación"

        

Añade esto arriba del codigo:

#include <Trade\Trade.mqh>

Y luego para abrir una operacion solo tienes que escribir esto:

double volumen= 0.01; // O el volumen que quieras

CTrade m_trade;

m_trade.Buy(volumen); // Compra

m_trade.Sell(volumen); // Vende
 
Hola, Gracias por el tutorial, fue muy útil. Pero tengo un malentendido, las variables New_Time declaradas e inicializadas con la función CopyTimes pero Old_Time fue declarada pero no inicializada al principio y luego fue comparada con la variable New_Time para verificar si hay una nueva barra. Se supone que Old_Time está vacía. No se si lo he descrito bien pero gracias por leer.
 

Hola,


De manera similar, tengo el código de error 4756 cuando se ejecuta la prueba y dice " Sell order request could not be completed".

Por favor informen como solucionar esto.


Gracias