SQ 3.8.0 Error 129 precio no válido en operaciones reales
14 respuestas
mikeyc
hace 9 años #113353
Hola, Mark,
He creado, probado y exportado el MQL4 para una estrategia que parece prometedora en el marco de tiempo EURUSD H1. Utiliza la opción de posición de mercado inversa, pero falla cuando se prueba hacia adelante en una cuenta real:
2015.02.16 17:59:59.599 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Error al abrir la orden: 129 : precio no válido
2015.02.16 17:59:59.599 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Orden de apertura, dirección: 0, precio: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:55.489 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Error al abrir la orden: 129 : precio no válido
2015.02.16 17:59:55.489 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Orden de apertura, dirección: 0, precio: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.067 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Error al abrir la orden: 129 : precio no válido
2015.02.16 17:59:52.067 Estrategia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Orden de apertura, dirección: 0, precio: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.052 Estrategia 9.7 EURUSD,H1: close #164716296 sell 0.10 EURUSD at 1.14383 at price 1.13572
¿Alguna idea de por qué el EA no parece ser capaz de abrir la dirección opuesta de comercio después de cerrar un comercio?
Gracias,
Mike
mikeyc
hace 9 años #128868
Marca,
Mirando la lógica de trading en el EA generado, me parece que reintenta independientemente de la causa del error, y en el caso del error 129 debería refrescar la oferta/demanda ya que el precio se ha movido más allá del deslizamiento.
Véase http://forum.mql4.com/61528
Para mis propios EAs utilizo una biblioteca llamada OrderReliable para manejar el complicado manejo de errores requerido.
https://github.com/keyguy/TradersTech/blob/master/OrderReliable_2011.01.07.mqh
¿Quizás incluir esto en la próxima versión de la plantilla SQ para MQ4?
Saludos,
Mike
Mark Fric
hace 9 años #128890
gracias por avisarme de este error y de la biblioteca, lo miraré.
Mark
Arquitecto de StrategyQuant
mikeyc
hace 9 años #129627
Estoy viendo el error de deslizamiento bastante con ciertos corredores (hola FXDD :angry: ). Creo que la mejor solución es evitar estos corredores con mal deslizamiento.
geektrader
hace 9 años #129666
Ve con un broker ECN, ese error es algo típico de los brokers creadores de mercado en el sentido de que se niegan a aceptar tu orden al precio que muestran en MT4. Se llama requotes y esos están ahí para hacer que el corredor más ganancias de sus pérdidas:) Esto nunca pasará en un broker ECN bueno y honesto. Hay muchos de ellos, mi recomendación es Global Prime en Australia.
Matusiak Adrian
hace 9 años #129687
Esto nunca ocurrirá en un broker ECN bueno y honesto.
Te equivocas ... Hay muchas otras cosas que se produce requotes. Simplemente, trate de hacer el comercio sin requotes con ping al servidor de comercio> 300ms. Incluso con corredor honesto Usted nunca conseguirá ese precio lo que ves, porque este precio ya no existe.
geektrader
hace 9 años #129701
Claro, pero eso no es requote, eso es deslizamiento y no arrojará un error en el EA como lo hace un requote - la operación se abrirá en cualquier caso, sólo con un precio deslizado. Todavía prefiero que en comparación con requotes. Por cierto, está claro que usted no debe tener un 300 ms ping al servidor de los corredores. Trabajo para un broker ECN, e incluso para cuentas pequeñas deberías alquilar un VPS para ejecutar tus estrategias.
Matusiak Adrian
hace 9 años #129704
incluso para cuentas pequeñas deberías alquilar un VPS para ejecutar tus estrategias.
Totalmente DE ACUERDO.
Dan
hace 8 años #133511
Hola, Mark,
Estoy recibiendo el mismo error que MickeyC en el que algunas veces cuando mi AE va a colocar un comercio me sale el "Error al abrir la orden 129: precio no válido" Se retira 3 veces más con el precio original. ¿Hay algún código para actualizar el precio cuando intenta reemplazar la orden que puedo insertar y es esto algo SQ4 abordará.
Gracias por su ayuda
tomas262
hace 8 años #133524
Dan
hace 8 años #133528
Hola Thomas,
Prefiero no compartir mi AE y solucionar el problema desde el punto de vista de que este es un problema de lógica SQ, donde se debe actualizar el precio, ya que se ha movido más allá de la cantidad de deslizamiento. MIckeyC señaló esto en este hilo antes y Mark iba a investigarlo. Mark ha hecho algún cambio para corregir este error en la próxima edición de SQ. He seguido el enlace MickeyC proporcionó sitio MQL4 http://forum.mql4.com/61528 y dice que para corregir el código de error 129 precio no válido, para colocar RefreshRates(); antes de enviar la orden. No soy un programador de ninguna manera en el mejor de los casos traté de insertar que en el EA. En negrita hacia la parte inferior es donde he añadido el código de frecuencia de actualización, no estoy seguro de si esto va a funcionar, aquí es donde yo necesitaría su experiencia. Voy a decir que sólo he tenido el error ocurra dos veces y se vuelve a intentar realizar el pedido 3 veces después con cada error de precio inválido tiempo no sucessfull129, tengo la esperanza de añadir el código RefreshRate allí que va a solucionar este problema.
Gracias por su ayuda
// orden abierta con tratamiento de errores y reintentos
int ticket = 0;
int reintentos = 3;
while(true) {
reintentos-;
if(reintentos < 0) return;
if(getMarketPosition() != 0) return;
if(sqIsTradeAllowed() == 1) {
ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
if(ticket > 0) {
if(tradeDirection > 0) {
ObjectSetText("lines", "Última señal: Larga, ticket: "+ticket, 8, "Tahoma", LabelColor);
} else {
ObjectSetText("lines", "Última señal: Corto, ticket: "+ticket, 8, "Tahoma", LabelColor);
}
volver;
}
}
if(ticket == -130 || ticket == -129) {
// stops o volumen no válidos, no podemos abrir la operación
volver;
}
Sleep(1000);
}
volver;
}
//+——————————————————————+
int openOrderWithErrorHandling(int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {
//—————————————
// enviar pedido
int error, ticket;
Log("Orden de apertura, dirección: ", orderType,", price: ", openPrice, ", Ask: ", Ask, ", Bid: ", Oferta);
ticket = OrderSend(Symbol(), orderType, orderLots, openPrice, MaxSlippage, 0, 0, comment, magicNumber, 0, Green);
if(ticket < 0) {
// pedido fallido, escribir error en log
error = GetLastError();
Log("Error al abrir la orden: ",error, " : ", ErrorDescription(error));
return(-error);
Sleep(1000);
//-refrescar datos de precios
RefreshRates();
}
rettmp = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
Log("Orden abierta: ", OrderTicket(), " al precio:", OrderOpenPrice());
stopLoss = getSpecialSL(stopLoss);
profitTarget = getSpecialPT(profitTarget);
if(EmailNotificationOnTrade) {
SendMail("Estrategia GB - Orden abierta", getNotificationText());
}
Dan
hace 8 años #133543
Hola Tomas Necesito tu intelecto y orientación en el tema anterior que tengo.
Dan
hace 8 años #133561
Thomas no voy a obtener una respuesta????
Mark Fric
hace 8 años #133566
Perdón por la respuesta tardía. Desafortunadamente no es tan simple, porque el precio de una operación se fija algún tiempo antes de que se llame a esta función, también para las órdenes de mercado.
Pero puede añadir el siguiente fragmento de código justo después de la llamada a sqIsTradeAllowed().
Actualizará el precio de mercado justo antes de enviar la orden.
if(orderType == OP_BUY || orderType == OP_SELL) {
Mark
Arquitecto de StrategyQuant
Dan
hace 8 años #133576
Hola, Mark,
Gracias por responder, voy a añadir el fragmento de código y ver si eso funciona........ Gracias de nuevo
Viendo 14 respuestas - de la 1 a la 14 (de un total de 14)