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

 
¡Muy bonito! ¡Muchas gracias!
 

He descargado el archivo y depurado el código, y mostró esta advertencia ¿alguien podría ayudarme con esto?


el valor de retorno de'OrderSend' debe ser comprobado


 

Hola, soy novato y también estoy probando el Robot

Prueba esto

// OrderSend(mrequest,mresult);

bool res=EnviarOrden(mrequest,mresult);

// obtener el código de resultado

if(res && (mresult.retcode==10009 || mresult.retcode==10008)) //Se ha completado la petición o se ha realizado el pedido

{

Alert("Se ha realizado con éxito una orden de compra con Ticket#:",mresult.order,"!!");

}

else

{

Alert("No se ha podido completar la solicitud de orden de compra -error:",GetLastError());

ResetLastError();

return;

}

Si me equivoco, ¡corrígeme!

Fuente de la investigación: https://www.mql5.com/en/forum/23663

return value of 'OrderSend' should be checked
return value of 'OrderSend' should be checked
  • 2014.05.03
  • www.mql5.com
Hi ! I'm wondering how to do that ...:/ the warning appeared @ the last update...
 

Cuando estoy depurando, siempre me da error al enviar el pedido. Pensaba que era mi código, pero incluso cuando pruebo el archivo mql5 para descargarlo también me da error.



 
northedan:

Cuando estoy depurando, siempre me da error al enviar el pedido. Pensaba que era mi código, pero incluso cuando pruebo el archivo mql5 para descargarlo también me da error.



Creo que el ejemplo está en divisas, por lo que la variable lot que es 0.1 no sirve para tu prueba, prueba a cambiarla así (cambiando la variable mrequest.volume):


double minSymbolLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);

mrequest.action = TRADE_ACTION_DEAL; // ejecución inmediata de la orden

mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // último precio de venta

mrequest.sl = NormaliseDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss

mrequest.tp = NormaliseDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit

mrequest.symbol = _Symbol; // par de divisas

mrequest.volume = minSymbolLot; // número de lotes a negociar

mrequest.magic = EA_Magic; // Número Mágico de la Orden

mrequest.type = ORDER_TYPE_BUY; // Orden de Compra

mrequest.type_filling = ORDER_FILLING_FOK; // Tipo de ejecución de la orden

mrequest.desviación=100;

 
¿Alguien sabe si puedo usar este EA para mini índices o mini dólares?
 
Sella170:
¿Alguien sabe si puedo usar este EA para mini índices o mini dólares?

¿Ha entendido la estrategia? ¿Conoce los riesgos? ¿Has analizado los niveles de SL y TP? ¿Conoces los indicadores técnicos utilizados? ¿Sabe cómo parametrizarlos? ¿Sabe cómo personalizar las variables para cada activo (WIN y WDO)?

El código en sí está desarrollado para cualquier activo y puedes identificarlo a través del "_Símbolo" y para cualquier tiempo del gráfico "_Periodo".

Ahora es importante que sepas lo que estás haciendo cuando ejecutes el EA. Si decides hacerlo, te sugiero que sólo trabajes en cuentas demo hasta que domines la herramienta y tengas un mejor conocimiento del mercado de valores.

[ ]'s

 

Chicos,

Este es un simple código modificado rápido si usted tiene un error con múltiples órdenes de apertura al mismo tiempo.

Reemplace este código : de la línea 167 -177

   if(PositionSelect(_Symbol)==true) // tenemos una posición abierta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //Es una Compra
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // Es una Venta
        }
     }

con esto:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //Es una Compra
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // Es una Venta
           }
        }
      }

Gracias @Samuel Olowoyo

 
Korobejnik:

Aconseje cómo resolver el problema. El Asesor Experto abre varias posiciones seguidas para comprar, lo mismo para vender.

El Asesor Experto no ve que ya hay posiciones abiertas de Compra y Venta y abre nuevas, a pesar de que hay una comprobación en el código.

sobre las posiciones ya abiertas. La comprobación no funciona por alguna razón.

Como aquí no hay ayuda de los troll-moderadores, copiaré la respuesta del foro inglés:

Chicos, este es un simple código modificable rápido, si usted tiene un error con varias órdenes de apertura al mismo tiempo. Sustituir este código: de la línea 167 -177

   if(PositionSelect(_Symbol)==true) // tenemos una posición abierta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //Es una Compra
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // Es una Venta
        }
     }

con esto:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //Es una Compra
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // Es una Venta
           }
        }
      }
 
Locus_Neminis:

Ya que no puedo obtener ayuda de los troll-moderadores de aquí, copiaré la respuesta del foro inglés:

Chicos, este es un simple código modificable rápido si usted tiene un error con múltiples órdenes de apertura al mismo tiempo. Sustituir este código: de la línea 167 -177

con esto:

Esto no ayudará. Tengo un hilo en mi perfil sobre esto. Allí está la causa y la solución al problema.
No entiendo lo de los trolls.