¡¡¡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!!!
Intente añadir ZeroMemory(sell).
if (condition1) { ZeroMemory(sell); sell.action = TRADE_ACTION_DEAL; sell.type = ORDER_TYPE_SELL; sell.symbol = _Symbol;Hemos solucionado este problema, espere a la próxima versión, por favor.
Prueba a añadir ZeroMemory(sell).
Hemos solucionado este problema, espere a la próxima compilación, por favor.Rosh, acaba de actualizar a .565 y obtuvo el mismo mensaje #4756
ZeroMemory(struct) ayuda. ¿Así que está arreglado o no todavía?
Gracias
Prueba a añadir ZeroMemory(sell).
Hemos solucionado este problema, espere a la próxima versión, por favor.Tengo el mismo error aunque he seguido la forma exacta de componer la orden. ¿Cómo es posible? Estoy usando la build 597.
2012.02.26 20:08:18 Core 1 2012.02.23 08:00:00 Alert: The Buy order request could not be completed -error:4756
2012.02.26 20:08:18 Core 1 2012.02.23 08:00:00 falló la compra de mercado 0.10 EURUSD sl: 1.32438 tp: 1.33738 [Modo de llenado no soportado].
if(Condición_de_compra_3 && Condición_de_compra_4)
{
// ¿alguna posición de compra abierta?
if(Buy_opened)
{
Alert("¡¡Ya tenemos una posición de compra!!");
return; // No abrir una nueva posición de compra
}
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_DEAL; // ejecución inmediata de la orden
mrequest.type = ORDER_TYPE_BUY; // Orden de compra
mrequest.symbol = _Symbol; // par de divisas
mrequest.desviación=0; // Desviación del precio actual
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // último precio de venta
mrequest.volumen = Lote; // número de lotes a negociar
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.type_filling = ORDER_FILLING_AON; // Tipo de ejecución de la orden
//--- enviar orden
OrderSend(mrequest,mresult);
// obtener el código de resultado
if(mresult.retcode==10009 || mresult.retcode==10008) //La solicitud se ha completado o el pedido se ha realizado
{
Alert("Se ha realizado con éxito un pedido de compra con Ticket#:",mresult.order,"!");
}
else
{
Alert("La solicitud de compra no ha podido completarse -error:",GetLastError());
ResetLastError();
return;
}
- www.mql5.com
Me he dado cuenta de que en la referencia de MQL5 (última versión que se acaba de actualizar hoy), ya no existe ORDER_FILLING_AON, pero incluso si utilizo ORDER_FILLING_FOK, me sigue apareciendo el error 4756. Por favor, aconsejadme.
Identificador | Descripción |
ORDER_FILLING_FOK | La operación puede ejecutarse exclusivamente con un volumen especificado a un precio igual o mejor que el precio especificado en la orden. Si no hay suficiente volumen de ofertas en el símbolo de la orden, ésta no se ejecutará. Este tipo de relleno se utiliza en losmodos de ejecuciónSYMBOL_TRADE_EXECUTION_INSTANTo SYMBOL_TRADE_EXECUTION_REQUEST. |
ORDER_FILLING_IOC | Un acuerdo para ejecutar la operación con el máximo volumen del mercado a un precio igual o mejor que el precio especificado en la orden. En este caso no se colocará una orden adicional por volumen no llenado. Este tipo de llenado se utiliza en los modos de ejecuciónSYMBOL_TRADE_EXECUTION_MARKETy SYMBOL_TRADE_EXECUTION_EXCHANGE dependiendo de la configuración del símbolo en un servidor de operaciones. |
ORDER_FILLING_RETURN | Un acuerdo para ejecutar la operación con el máximo volumen del mercado a un precio igual o mejor que el precio especificado en la orden. En este caso se colocará una orden adicional por volumen no rellenado. Este tipo de relleno se utiliza sólo para las órdenes pendientes (TRADE_ACTION_PENDING). |
Hola, ¿algún comentario antes de abandonar MT5 y volver a MT4? Muchas gracias! La verdad es que soy nuevo en ambos pero primero le daría una oportunidad a MT5 aunque sé que es muy nuevo.
Añade esto antes del mrequest:
ZeroMemory(mrequest); ZeroMemory(mresult);
He tenido exactamente el mismo problema que tú y me lo ha solucionado.
Ahora tengo el mismo problema.
Mis asesores expertos funcionaban muy bien. Pero ahora todos ellos no pueden pasar el probador.
Cuando compilo los archivos, se muestra el siguiente mensaje:
'ORDER_FILLING_AON' - identificador no declarado
¿Cómo se puede solucionar este problema?
¿Es el resultado de una actualización del terminal? (Versión 5.00 Build 642)
(24 abril 2012)
Espero que alguien pueda ayudarme
- www.mql5.com
Cuando compilo los archivos, aparece el siguiente mensaje
'ORDER_FILLING_AON' - identificador no declarado
¿Cómo se puede solucionar este problema?
Sustituir ORDER_FILLING_AON por ORDER_FILLING_FOK (ver propiedades de la orden)
Añade esto antes del mrequest:
He tenido exactamente el mismo problema que tú y me lo ha solucionado.
Hola, he añadido estas 2 líneas en el código, pero el error 4756 sigue aquí (el envío de la solicitud de comercio falla).
¿Podría precisar dónde debo añadir las dos líneas? La que se refiere a mrequest ya está presente. Añadir las dos no cambia nada para mí. Gracias por la ayuda, se lo agradezco.
Estoy usando rel.5 build 842.
ZeroMemory(mrequest); ZeroMemory(mresult);
Hola, he añadido estas 2 líneas en el código, pero el error 4756 sigue aquí (fallo en el envío de la solicitud de comercio).
¿Podría precisar dónde debo añadir las dos líneas? La que se refiere a mrequest ya está presente. Añadir las dos no cambia nada para mí. Gracias por la ayuda, se lo agradezco.
Estoy usando rel.5 build 842.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
-----------------------------------------------------------------------------------
si (condición1)
{
sell.action = TRADE_ACTION_DEAL;
sell.type = ORDER_TYPE_SELL;
sell.symbol = _Symbol;
sell.deviation = 0;
sell.price = NormalizeDouble(mtick.bid,_Digits);
sell.volume = 0.1;
sell.tp = NormalizeDouble(sell.price - mtp*_Point,_Digits);
sell.sl = NormalizeDouble(sell.price + msl*_Point,_Digits);
sell.type_filling = ORDER_FILLING_AON;
if(OrderSend(sell,result_sell)==false)
{
Print("OrderSend falló con el error #",GetLastError());
ResetLastError();
}
}