Respuesta

Orden stop/límite demasiado cerca del precio real

6 respuestas

sansay

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 7 años #116332

Consulte la captura de pantalla adjunta.

Cuando vi por primera vez el registro de este EA, "orden stop/límite demasiado cerca del precio real" inmediatamente pensé "OK el nivel de stop es incorrecto". Así que edité el código y cambié el valor de MinDistanceOfStopFromPrice a 70, ya que esa era la especificación del par USDMXN. Sin embargo, como se puede ver en la captura de pantalla que no resolvió el problema. De hecho incluso probé con 100, 200, 700, y no cambió nada.

Cualquier ayuda será muy apreciada.

0

sansay

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 7 años #141561

¿Qué captura de pantalla?

 

Tengo el problema contrario, necesito que algunas órdenes Stop_limit estén más cerca del precio.

 

Qué raro, estoy bastante seguro de haber adjuntado el archivo png. Vamos a intentarlo de nuevo...

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 7 años #141585

¿Sucede cuando coloca una orden o intenta modificar el PT, el SL o el precio de la orden?

0

sansay

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 7 años #141594

Yo no hago nada, es un EA creado con SQ. Hace esto, y creo que el código se añade a cada EA que crea. La diferencia en este caso es que este forex en particular tiene un nivel de stops de 70, mientras que otros tienen 0.

Por supuesto, los que tienen 0 no activan nada.

El código está en función: 

void openPosition(int tradeDirection) {

      // comprueba si el precio tope/límite no está demasiado cerca
      if(NormalizeDouble(MathAbs(openPrice - AskOrBid), Digits) <= NormalizeDouble(eaStopDifferenceNumber, Digits)) {
         //Log("la orden stop/límite está demasiado cerca del precio real");
         volver;
      }
así que, por supuesto, cuando esto ocurre no se abre ninguna operación.
Ayer intenté ver qué pasaba si eliminaba la declaración de devolución. Quería ver si el concesionario también rechazaría el pedido. 
La declaración apareció en el registro de Expertos, pero no se produjo ninguna operación y no apareció ningún otro registro. Voy a darle otra oportunidad, esta vez voy a añadir más registros para saber qué camino tomó el proceso.

0

sansay

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 7 años #141656

Esta mañana me encontré con que intentó y no pudo colocar una orden stop de venta. Ver registro adjunto.

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 7 años #141681

Te lo pregunto porque has colocado la pregunta en el hilo "EA Wizard

 

Puede publicar la estrategia aquí o enviármela a [email protected] así que puedo tratar de probarlo en USDMXN también

0

sansay

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 7 años #141685

En realidad, mis pruebas me permitieron encontrar el problema y corregí el código.

El problema es que el servidor del corredor de verificación de:
short: orderPrice < currentPrice - stopLevel 

long: orderPrice > currentPrice + stopLevel

 

Si la condición no se cumple, la solicitud de modificación falla. Actualmente el código ajusta el stopLoss y targetProfit para que estén justo al menos dentro de orderPrice + o - dealer stop level. Y esto hace que la prueba falle siempre que el precio de la orden sea exactamente el precio actual -+ nivel de stop. Así que la solución fue simplemente sumar o restar 1 pip. Aquí está el cambio de código:

 

En los parámetros ocultos, declarar:

double stopOffset = 0.0001;

 

Añadir y pasar el parámetro tradeDirection a la firma y llamada del método openOrderWithErrorHandling:
int abrirPedidoConManejoError(int tradeDirection, int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

 

En el mismo método añada el código en verde:

 

   if(stopLoss != 0 || profitTarget != 0) {
      if( tradeDirection == 1 )
      {
         stopLoss -= stopOffset;
         profitTarget += stopOffset;
      }
      else if( tradeDirection == -1 )
      {
         stopLoss += stopOffset;
         profitTarget -= stopOffset;
      }
      Log("Ajustando SL/PT, SL: ", stopLoss, ", PT: ", profitTarget);
      if(OrderModify(ticket, OrderOpenPrice(), stopLoss, profitTarget, 0, 0)) {
         Log("Orden modificada, StopLoss: ", OrderStopLoss(),", Profit Objetivo: ", OrderTakeProfit());
      } else {
         Log("Error al modificar el pedido: ",error, " : ", ErrorDescription(error));
      }
   }
 
Esto funciona. Las modificaciones de las operaciones son aceptadas por el servidor.

0

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