Respuesta

SQ 3.8.0 Error 129 precio no válido en operaciones reales

14 respuestas

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

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

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

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

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #128890

gracias por avisarme de este error y de la biblioteca, lo miraré.

Mark
Arquitecto de StrategyQuant

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

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.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

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.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_participant, comunidad, 300 respuestas.

Visitar el perfil

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. 

btn_viewmy_160x33.png

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

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.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_participant, comunidad, 300 respuestas.

Visitar el perfil

hace 9 años #129704

incluso para cuentas pequeñas deberías alquilar un VPS para ejecutar tus estrategias.

 

Totalmente DE ACUERDO.

btn_viewmy_160x33.png

0

Dan

Cliente, bbp_participant, comunidad, 31 respuestas.

Visitar el perfil

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

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 8 años #133524

Dan,

 

¿puedes subir esa estrategia o enviarla a [email protected]?

0

Dan

Cliente, bbp_participant, comunidad, 31 respuestas.

Visitar el perfil

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());
   }

0

Dan

Cliente, bbp_participant, comunidad, 31 respuestas.

Visitar el perfil

hace 8 años #133543

Hola Tomas Necesito tu intelecto y orientación en el tema anterior que tengo.

0

Dan

Cliente, bbp_participant, comunidad, 31 respuestas.

Visitar el perfil

hace 8 años #133561

Thomas no voy a obtener una respuesta????

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

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.

 

 

   …
   // 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) {
         
         if(orderType == OP_BUY || orderType == OP_SELL) {
            RefreshRates();
            openPrice = NormalizeDouble(getTradeOpenPrice(tradeDirection), Digits);
         }
 
         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;
         }
      }

 

 

Mark
Arquitecto de StrategyQuant

0

Dan

Cliente, bbp_participant, comunidad, 31 respuestas.

Visitar el perfil

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

0

Viendo 14 respuestas - de la 1 a la 14 (de un total de 14)