Respuesta

¿Decirle al EA que deje de operar ese Día si se alcanza una Ganancia o Pérdida en Pips?

14 respuestas

birdy70

Abonado, bbp_participant, comunidad, 25 respuestas.

Visitar el perfil

hace 11 años #112314

Hola Mark,

 

¿En qué bloque de estrategia podría escribir la regla, cuando quiero dejar de operar para ese día, si la ganancia o pérdida diaria se alcanza +/- 100 Pips por ejemplo?

 

Gracias por sus comentarios,

Birdy70

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 11 años #125178

Hola,

 

El Asistente de EA no tiene una función que devuelva PL para un día actual, pero usted puede agregarla.

 

1. Abra {EA Wizard}/code/CustomFunctions.mq4 y añada el siguiente código:

 
double sqGetPLInPipsToday() {
   cadena todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plHoy = 0;
 
   for(int i=0;i<TotalHistorialPedidos();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // saltar órdenes pendientes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
 
   for (int cc = TotalPedidos() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // saltar órdenes pendientes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
   
   return(plHoy*gPuntoPow);
}
 
 
2. entonces en tu regla puedes llamar a esta nueva función, la regla podría ser :
IF(sus otras reglas)
y (Función Personalizada: sqGetPLInPipsToday() < 100) <- esto significa que PL hoy es menor de 100 pips
 
ENTONCES

Mark
Arquitecto de StrategyQuant

0

birdy70

Abonado, bbp_participant, comunidad, 25 respuestas.

Visitar el perfil

hace 11 años #125205

Hola Mark,

 

¿dónde tengo que escribir este código? Si abro en mi PC la carpeta C:StrategyQuant/SQEAWizard/Code, encuentro un archivo llamado CustomFunctions.mql4. Si abro ese archivo, el Editor de MT4 se abre con la ventana CustomFunctions. Cuando copio su código en esa ventana, ¡obtengo 6 mensajes de error después de compilar este código!

 

Por favor, ayúdame.

 

Birdy70

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 11 años #125244

Hola,

 

tienes que copiar esta función a este archivo, pero no compilarlo, no es un EA completo.

El contenido de este archivo se adjunta a cada EA generado por el Asistente de EA, por lo que es un lugar donde podemos poner funciones personalizadas.

 

Así que sólo tienes que abrir EA Wizard, cargar tu estrategia, añadir la función personalizada allí y exportar a EA. A continuación, se debe compilar sin problemas.

Mark
Arquitecto de StrategyQuant

0

birdy70

Abonado, bbp_participant, comunidad, 25 respuestas.

Visitar el perfil

hace 10 años #126130

Hola Marc,

 

Lo siento, pero no lo entiendo. En mi carpeta EAW encuentro el archivo CustomFunctions.mql4. Pude abrir este archivo con el Editor MT4 (en MT4) y pude pegar sus Condiciones de Trading que me dijo al principio. Si abro los detalles de mi Estrategia EAW, ¡podría ver en el Cuadro de Diálogo bajo "Funciones" el Archivo "Función Personalizada"! Pero como escribir su Regla de Trading en esta Ventana. 

 

¡Tal vez usted podría decirme paso a paso, cómo podría utilizar esta regla en EAW o decirme otra regla de comercio, que le dice a la EA "dejar de operar para ese día, después de un beneficio o pérdida de 100 Pips o 100 euros se alcanza"!

 

Esto sería genial.

 

Bajo el botón "Opciones de estrategia" veo algunas reglas como:

Suma de P/L cerrados (Número Mágico / Recuento de Pedidos)

TotalProfits 

Pérdidas totales

P/L cerrado en Pips (Número Mágico y operaciones realizadas)

P/L cerrado en dinero (Número mágico y operaciones realizadas)

 

No es posible, crear con estas Opciones una Regla como:

 

SI

La suma de las órdenes de COMPRA/VENTA cerradas es > 100 Pips o 100 Euros (por ejemplo)

 

Entonces

Dejar de operar ese día

 

Gracias por su ayuda. Espero que sea posible, para crear una regla de comercio como este.

 

Saludos cordiales

Birdy70

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 10 años #126137

Hola,

 

al copiar esta función en el archivo CustomFunctions.mq4 se adjuntará a cada nuevo EA, por lo que podrá utilizarla en sus condiciones.

 

Cómo hacerlo - normalmente abra su estrategia en EA Wizard. Haga clic para añadir una nueva regla de trading, luego vaya a Funciones -> Función Personalizada y en el campo Función escriba: sqGetPLInPipsToday()

Añadir < 100 comparación y haga clic en Aceptar para cerrar el cuadro de diálogo.

 

Eso es todo, ahora guarda esta estrategia como un EA y debería funcionar.

Mark
Arquitecto de StrategyQuant

0

jastejp

Abonado, bbp_participant, comunidad, 8 respuestas.

Visitar el perfil

hace 10 años #129459

Hola Marc,

 

Acabo de comprar EA Wizard después de haberlo comparado con otros creadores de EA, y estoy muy satisfecho con él ya que incluye muchas funciones pre-construidas para usar - creo que esto lo diferencia de sus competidores, así que por favor sigan con el buen trabajo.

 

Desafortunadamente, no puedo conseguir la función personalizada sqGetPLInPipsToday() aquí para trabajar después de haber pasado todo el día en él. El problema es que las operaciones continúan después de haber alcanzado mi objetivo de beneficio diario y no sé por qué después de haber seguido sus instrucciones con mucho cuidado. Si mira el gráfico adjunto puede ver claramente que la primera operación alcanza el objetivo diario de 20 pips, pero el EA sigue operando ese día. ¿Podría echar un vistazo a los archivos adjuntos para determinar el problema por favor.

 

Muchas gracias.

Saludos,

 

Jamie

Archivo: EURUSDM15.pngEURUSDM15.png

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 10 años #129552

ok, encontre el problema, habia un error en mi funcion, abajo esta la correcta.

 

 

double sqGetPLInPipsToday() {
   cadena todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plHoy = 0;
 
   for(int i=0;i<TotalHistorialPedidos();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // saltar órdenes pendientes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
         Log("Comparando ", TimeToStr( OrderOpenTime(), TIME_DATE), " = ", todayTime);
            if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
            }
         }
      }
   }
 
   for (int cc = TotalPedidos() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // saltar órdenes pendientes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }
         }
      }
   }
 
   return(plHoy*gPuntoPow);
}

Mark
Arquitecto de StrategyQuant

0

jastejp

Abonado, bbp_participant, comunidad, 8 respuestas.

Visitar el perfil

hace 10 años #129560

Hola, Mark,

 

Muchas gracias.

Probaré el nuevo código y os comunicaré los resultados. Espero que algunas pruebas de espalda mostrará sobre el comercio es el problema y la secuencia de comandos va a arreglar esto.

 

Jamie

0

jastejp

Abonado, bbp_participant, comunidad, 8 respuestas.

Visitar el perfil

hace 10 años #129888

Hola, Mark,

 

Siento el retraso en volver aquí. 

 

Funciona y hace exactamente lo que quiero. Buen trabajo.

 

Te sugiero que pongas códigos útiles como éste y otros en un hilo adhesivo del foro, para que se puedan encontrar fácilmente.

 

Gracias, señor,

Jamie

0

Tejados Brignac

Abonado, bbp_participant, comunidad, cliente, 91 respuestas.

Visitar el perfil

hace 10 años #130754

He intentado su cadena de arriba y lo hizo tal como se explica, pero sigue el comercio después de número de pips alcanzado. Qué estoy haciendo mal con esta creación ea simple?

0

Tejados Brignac

Abonado, bbp_participant, comunidad, cliente, 91 respuestas.

Visitar el perfil

hace 10 años #130768

Chicos,

  He trabajado literalmente durante toda la noche como se puede ver por mis pocos mensajes de tiempo y simplemente no puede conseguir este.. Puede alguien por favor explicar en detalle a mí lo que estoy haciendo mal.

 

Todo lo que estoy buscando es una estrategia simple para aprender. Digamos que ir de largo cuando EMA 10> EMA 20 Y CORTO CUANDO EMA10 < EMA 20.. Todo lo que quiero hacer es detener el beneficio en $10 y comenzar el próximo día de negociación .. Estoy agotado de trabajar toda la noche y agradecería si esto se puede hacer lo antes posible ...

0

boraucak

Abonado, bbp_participant, comunidad, 14 respuestas.

Visitar el perfil

hace 9 años #135674

Hola, 

en primer lugar, gracias por todo este gran apoyo en EA Wizard,

 

esta función es genial y la necesitaba desesperadamente. 

Pero es necesaria una pequeña corrección para este código. 

 

        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
 
este código debe ser:
 
        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderClosePrice();
 
Por favor, corregidme si me equivoco ya que no soy programador y lo he encontrado probando (un par de horas) :/
 
gracias de nuevo por el apoyo. 
mejor 

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #135684

Sí, es correcto. Ese OrderOpenPrice() debe sustituirse por PrecioCierrePedido()

0

Jack Archer

Cliente, bbp_participant, comunidad, sq-ultimate, 6 respuestas.

Visitar el perfil

hace 8 meses #287831

Hola, ¿hay alguna manera de establecer un objetivo de beneficio diario o stop loss diario en StrategyQuant. No puedo encontrar un ajuste o un bloque personalizado que pueda hacer esto por mí. Gracias.

0

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