¡¡¡El EA que escribí hace tres meses no puede pasar las pruebas de estrategia ahora, pero solía funcionar bien hace dos o tres meses!!! - página 2

 
angevoyageur:
Muestre su código, para que podamos decir dónde añadir esta línea.

Bonsoir Angevoyageur,

Aquí está mi código. Las dos partes están separadas en la sección onTick.

Gracias

Vivaldie


      MqlTick latest_price;      // To be used for getting recent/latest price quotes
      MqlTradeRequest mrequest;  // To be used for sending our trade requests
      MqlTradeResult mresult;    // To be used to get our trade results
      MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar
      ZeroMemory(mrequest);      // Initialization of mrequest structure
   if(ConditionDICrossMain = -1)
     {
      if(Buy_opened)
        {
         return;    // Don't open a new Buy Position
        }
      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_FOK;                             // Order execution type
      mrequest.deviation=100;                                                // Deviation from current price
      //--- send order
        
      OrderSend(mrequest,mresult);
      // get the result code
      if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
        {
         Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
        }
      else
        {
         Alert("The Buy order request could not be COMPLETE -error:",GetLastError());
         ResetLastError();           
         return;
        }
     }
 
En esta página puedo ver que el error está en la sección CUENTA. He probado con otra MT5 y una cuenta diferente pero tengo el mismo mensaje.
 
Vivaldi:

Bonsoir Angevoyageur,

Aquí está mi código. Las dos partes están separadas en la sección onTick.

Gracias

Vivaldie


  • ¿Cuál es el valor de mresult.retcode cuando tiene un error?
  • ¿Cuales son los valores de STP, TKP?
  • OrderSend devuelve un bool, tienes que comprobar el valor devuelto también.
  • Como no sé qué tienes entre las dos partes, es mejor poner ZeroMemory(mrequest) justo antes de "mrequest.action=TRADE_ACTION_DEAL"
 

No he visto mensajes en el registro y dice que el problema viene del stop loss.

Con el valor de 0 funciona muy bien : )

 
Vivaldi:

No he visto mensajes en el registro y dice que el problema viene del stop loss.

Con el valor de 0 funciona muy bien : )

Para tus stoplevels (SL y TP) tienes que tener en cuenta el valor de STOP_LEVELS para el símbolo que estás operando. Ver este tema.
 
angevoyageur:
  • ¿Cuál es el valor de mresult.retcode cuando tienes un error?
  • ¿Cuáles son los valores de STP, TKP?
  • OrderSend devuelve un bool, tienes que comprobar el valor devuelto también.
  • Como no sé lo que tienes entre las dos partes, es mejor poner ZeroMemory(mrequest) justo antes de "mrequest.action=TRADE_ACTION_DEAL"


Ange lo tengo trabajando ahora :) problema vino de la variable STP.

Hay que cambiar la declaración con el tipo double (en lugar de int) para complacer al señor NormalizeDouble.

Gracias

double STP, TKP;
 

Me equivoqué y al cambiar la declaración de la variable no se solucionó el mensaje de error. El problema viene de la variable STP y TKP que son 0 haciendo sl = tp.

 

¿Es la necesidad de añadir

ZeroMemory(request);

un error en la compilación 975 (x86)?

Recientemente me encontré con el error 4756 durante una prueba de estrategia y añadiendo la línea anterior se solucionó.

 
k.doras:

¿Es la necesidad de añadir

un error en la compilación 975 (x86)?

Recientemente me encontré con el error 4756 durante una prueba de estrategia y añadiendo la línea anterior se solucionó.

Esta línea es obligatoria (o una inicialización equivalente de la estructura de solicitud).
 

hola

enviar la orden funciona en la cuenta demo pero en la cuenta real no funciona(2014.11.30 18:21:00.062 55 (اخابر,D1) BuyA: error 4756, retcode = 10006)

{
//--- prepare the request
   MqlTradeRequest request;
   MqlTradeResult  result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   request.action=5;
   request.symbol=_Symbol;
   request.volume=1000.00;
   request.price=2652.000;
   request.stoplimit=2652.000;
   request.sl=0;
   request.tp=0;
   request.type=6;
   request.type_filling=2;
   request.type_time=0;
   request.expiration=0;
   request.magic=0;
   request.comment="";

   if(!OrderSend(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
//---


Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results - Reference on algorithmic/automated trading language for MetaTrader 5