Respuesta

Profit Trailing (al cierre) ..¿cómo convertir tick por tick?

23 respuestas

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #115026

Entiendo que para tener un estudio empírico que se informó en el comercio en vivo es genial tener la función que SQ, pero debemos tener la capacidad de trabajar mejor en la estrategia, una vez que encuentre un buen
Estas funciones permiten utilizar profit-trailing, breakeven, trailing stop-etc etc.. pero para muchas estrategias, sobre todo las más agresivas, esperar al cierre de la vela es una función que no necesitamos.
¡todas estas funciones (para algunas estrategias) son inútiles si tengo que esperar hasta el cierre de la vela!
¡Declaro que sólo trabajo con tick-real!
pero cada uno de breakeven y trailing parámetro se establece a la espera de que el cierre de la vela de entrada..¿por qué?
cientos y cientos de estrategias implementadas por mi están configuradas con el "trailing on close".. y serían mucho más eficientes con un trailing tick a tick desde la entrada al mercado
seguramente, esperar al cierre de la vela, ayudará en no caer en overfitting o ver buenas estrategias que no funcionan entonces en directo
pero debe tener la posibilidad de eliminar esta característica una vez que encuentre una buena estrategia y, a continuación, trabajar mejor salida en el seguimiento de no esperar a que el cierre de la vela
¿alguien sabe como hacerlo? ¿Tengo que cambiar el fil mql? ¿Tengo que borrar o sustituir algún código del interior? ¿Tengo que configurar el SQ?
Gracias a todos
Giorgio

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

hace 8 años #136500

//+------------------------------------------------------------------+
/**
 * Gestionar la operación - mover el SL al punto de equilibrio o al trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... resto del código

Si comentas el:

 

if(!sqIsBarOpen) return;

 

línea como:

 

// if(!sqIsBarOpen) return;

 

Entonces la función manageStop se ejecutará para cada tick, y todos los tipos de movimiento de stop loss ocurrirán cada tick donde se requiera. Esto hará que una carga de CPU mucho mayor en el equipo sin embargo.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 8 años #136504

.... y arruinará su estrategia. Usted verá que en 99% de los casos la ejecución de una estrategia con trailing por garrapata en lugar de barra abierta (la forma en que fue creado por SQ) se traducirá en una curva de equidad negativa. Es simplemente porque la estrategia fue encontrada por SQ con un trailing en barra y fue creada así. Acelerar el trailing de esa manera cambiará toda la estrategia por completo y no le hará ningún bien, pero verá lo que quiero decir cuando haga sus pruebas en MT4 con trailing por tick en lugar de barra abierta;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136505

//+------------------------------------------------------------------+
/**
 * Gestionar la operación - mover el SL al punto de equilibrio o al trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... resto del código

Si comentas el:

if(!sqIsBarOpen) return;

línea como:

// if(!sqIsBarOpen) return;

Entonces la función manageStop se ejecutará para cada tick, y todos los tipos de movimiento de stop loss ocurrirán cada tick donde se requiera. Esto hará que una carga de CPU mucho mayor en el equipo sin embargo.

gracias por la respuesta amigo.. he comentado "if(!sqlsBarOpen) return;" con " // " y el resultado es este :

de este código estándar ...

 

en este :

 

pero después de este cambio nada ha cambiado
¿Tengo que cambiar algo más? ¡¡¡He intentado configurar un simple arrastrando por 1 pip, pero no funciona !!!  :enfadado:
Lo intenté e intenté varias veces cambiando el tipo de arrastre... ¡no hubo manera!
el arrastre sólo se activa con el cierre de la vela ..
Seguro que puedes solucionar este problema 😀 .  😀 ..por favoreee
gracias de nuevo 
Giorgio

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

hace 8 años #136510

Sólo el getProfitTrailingByTick tendrá algún efecto si se define con un número de pips como valor de retorno (éste está en blanco, por lo que no hace nada).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valor largo aquí
   } else if (OrderType() == OP_SELL) {
      // valor corto
   }

   return(0);
}

El otro tipo de stop trailing (que utiliza uno o más indicadores) seguirá trailing al cierre, porque el valor del indicador sólo cambia cada barra:

double getStopTrailingByClose() {
   double valor = 0;
   if (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1));

   } else if (OrderType() == OP_SELL) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1));
   }

   return(valor);
}

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136513

Sólo el getProfitTrailingByTick tendrá algún efecto si se define con un número de pips como valor de retorno (éste está en blanco, por lo que no hace nada).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valor largo aquí
   } else if (OrderType() == OP_SELL) {
      // valor corto
   }

   return(0);
}

El otro tipo de stop trailing (que utiliza uno o más indicadores) seguirá trailing al cierre, porque el valor del indicador sólo cambia cada barra:

double getStopTrailingByClose() {
   double valor = 0;
   if (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1));

   } else if (OrderType() == OP_SELL) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1));
   }

   return(valor);
}

Lo siento .. pero no se ejecuta por garrapata 🙁 i compilar de esta manera, pero no tienen un trailing por garrapata .. no es correcto ?

 

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

hace 8 años #136514

Vale, es un poco más complicado por el hecho de que la función manageStop utiliza Close[1] como precio actual. Por supuesto, este precio sólo cambia cada barra, por lo que el stop sólo se mueve cada barra.

         //------------------------------
         ¡¡¡¡¡// beneficio trailing en TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Oferta - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Cambie el código como se muestra arriba, sustituyendo close por Bid y Ask.

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136515

Vale, es un poco más complicado por el hecho de que la función manageStop utiliza Close[1] como precio actual. Por supuesto, este precio sólo cambia cada barra, por lo que el stop sólo se mueve cada barra.

         //------------------------------
         ¡¡¡¡¡// beneficio trailing en TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Oferta - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Cambie el código como se muestra arriba, sustituyendo close por Bid y Ask.

Tengo cambio en Bid & Ask .. pero nunca cambió .. no rastro 🙁

puede ser que tenga que cambiar "double close = Close [1]" ??
gracias por toda la ayuda que me estáis prestando 🙂 .

0

mikeyc

Cliente, bbp_participant, comunidad, 877 respuestas.

Visitar el perfil

hace 8 años #136516

Hice esos cambios y el trailing by tick me funcionó:

 

211 2015.08.24 02:45 buy 11 1.00 1.56723 0.00000 0.00000 0.00 9788.26
212 2015.08.24 02:45 modificar 11 1,00 1,56723 1,54657 0,00000 0,00 9788.26
213 2015.08.24 02:50 modificar 11 1,00 1,56723 1,56723 0,00000 0,00 9788.26
214 2015.08.24 02:52 modificar 11 1,00 1,56723 1,56724 0,00000 0,00 9788.26
215 2015.08.24 02:52 modificar 11 1,00 1,56723 1,56725 0,00000 0,00 9788.26
216 2015.08.24 02:52 modificar 11 1.00 1.56723 1.56726 0.00000 0.00 9788.26
217 2015.08.24 02:52 modificar 11 1,00 1,56723 1,56727 0,00000 0,00 9788.26
218 2015.08.24 02:52 modificar 11 1.00 1.56723 1.56728 0.00000 0.00 9788.26
219 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56729 0,00000 0,00 9788.26
220 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56732 0,00000 0,00 9788.26
221 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56734 0,00000 0,00 9788.26
222 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56737 0,00000 0,00 9788.26
223 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56739 0,00000 0,00 9788.26
224 2015.08.24 02:53 modificar 11 1,00 1,56723 1,56740 0,00000 0,00 9788.26
225 2015.08.24 02:56 s/l 11 1.00 1.56740 1.56740 0.00000 10.73 9798.99
 

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136519

Lo he intentado muchas veces, pero nada.
Pensé que tal vez el problema es que mis órdenes son buystop y sellstop mientras que me di cuenta de que sus órdenes son órdenes de mercado
¿podría ser esta la causa?
para establecer el comando exacto a las órdenes buystop y sellstop, ¿quizás debería cambiar otras cosas?
 
Gracias de nuevo
 
Giorgio

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 8 años #136530

También debe eliminar la línea "if (OrderOpenTime() >= Time[0])...", ya que, de lo contrario, saldrá de la función en este punto siempre que la orden no se haya abierto durante al menos 1 barra. Así que sólo empezará a hacer trailing (por tick en su caso) 1 barra después de que la orden haya sido abierta. Si quita esa línea, comenzará inmediatamente 1 tick después de la apertura de la orden.

 

Sigo diciéndote: esto no conducirá a nada más rentable que tu estrategia original, será peor, mucho peor hacer trail por tick, si la estrategia fue creada con on bar trailing. Te cargas toda la estrategia de esta manera ya que también las siguientes órdenes se verán afectadas por el cierre más temprano de las órdenes anteriores. Es la manera perfecta de deshacerse de su dinero para hacer eso, pero parece que tienes que aprender de la manera difícil:)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 8 años #136532

//+------------------------------------------------------------------+
/**
 * Gestionar la operación - mover el SL al punto de equilibrio o al trailing stop
 */
void manageStop() {

    //if(!sqIsBarOpen) return;
      
   double trailingStopValue, moveSLValue;
   double orderSL, normalOrderSL, orderOpen;
   double close = Close[0];
   double tsLevel, newSL;

   for(int i=0; i= Time[0]) continue; // salir si la orden se acaba de abrir

         //------------------------------
         // trailing de beneficios al cierre
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = close - trailingStopValue;
            } else {
  	            tsLevel = close + trailingStopValue;
            }
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            newSL = getSpecialSL(tsLevel);

            if(TipoOrden() == OP_BUY) {
               if(isSLCorrect(tsLevel) && (orderSL == 0 || normalOrderSL tsLevel) && !doublesAreEqual(orderSL, newSL)) {
     	            rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0);
     	         }
            }
         }

			//--------------------------------------------------------
   		// gestionar stop trailing por cierre
         trailingStopValue = getStopTrailingByClose();
         if(trailingStopValue > 0) {
            orderOpen = OrderOpenPrice();
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            newSL = getSpecialSL(trailingStopValue);

            if(OrderType() == OP_BUY) {
              	if(isSLCorrect(trailingStopValue) && (orderSL == 0 || normalOrderSL trailingStopValue) && !doublesAreEqual(orderSL, newSL)) {
	           		rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0);
	           	}
	         }
         }

         //--------------------------------------------------------
         // gestionar SL 2 BE (por tick)
         moveSLValue = getMoveSLValueByTick();
         if(moveSLValue > 0) {
            ordenSL = ordenStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            orderOpen = OrderOpenPrice();
            newSL = getSpecialSL(orderOpen);

            if(OrderType() == OP_BUY) {
               if(isSLCorrect(orderOpen) && (close - orderOpen >= moveSLValue) && (orderSL == 0 || normalOrderSL = moveSLValue) && (orderSL == 0 || normalOrderSL > orderOpen) && !doublesAreEqual(orderSL, newSL)) {
                  rettmp = OrderModify(OrderTicket(), orderOpen, newSL, OrderTakeProfit(), 0);
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+

Este es el código completo para reemplazar, este será el seguimiento de su orden de garrapata por garrapata a continuación.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136542

..muchas gracias geektrader 😀 .. probaré esto una vez y ya te contaré

Gracias de nuevo

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136545

entonces:
Lo he intentado de todas las maneras, ya sea cambiando el código dentro de la estrategia (como me indicas) e incluso creando una estrategia manualmente, por StrategyQuant, en el "Editor de Estrategias", no consigo nesun trailing tick a tick
Me di cuenta de hecho, que incluso si creo cualquier estrategia simple con el StrategyQuant, si entro en un simple "profit-trailing" se crea, de forma automática, el establecimiento de la vela trailing "en el cierre" y nunca tick-por-tick.
Incluso si se utiliza el "Construir estrategias", mediante el establecimiento de garrapata real, nunca se encuentra ninguna garrapata trailing por garrapata
siempre siempre siempre "(on close)" .. de cualquier manera, parece que no puedo tener el trailing más rápido en el precio tick-by-tick.
es increíble 🙁
¿alguno de vosotros me puede decir que es lo que falla? ¿alguna vez habéis creado una estrategia con trailing tick-by-tick?
mi "StrategyQuant" nunca ha creado ninguna estrategia con trailing tick-by-tick .. pero sólo "al cierre"
¿Por qué?

0

Gaudio Fx

Abonado, bbp_participant, comunidad, 22 respuestas.

Visitar el perfil

hace 8 años #136616

¿nadie puede ayudarme?
¿alguien puede confirmar que el STRATEGYQUANT crear estrategias con trailing dinámico tick-by-tick?
¿por qué, ni siquiera creó un trailing con tick-by-tick?
No me refiero a forzar rentable, incluso no rentable ... nunca ha creado ninguna estrategia con trailing que no sea "trailing (on close)"
¿Por qué?
si trato de crear manualmente ,siempre me sale lo mismo (ON CLOSE)!!! 🙁

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 8 años #136634

NO, SQ sólo creará estrategias con trailing on BAR CLOSE como se ha explicado varias veces aquí y en otros hilos. Lo único que puede hacer es exportar un EA para MT4 que se arrastra en TICK modificando el código MQL4 en la forma en que hemos publicado para usted ya un buen número de veces en este hilo. Esto no va a cambiar nada sobre el hecho de que SQ todavía sólo creará estrategias con trailing en el cierre de la barra solamente. Y por qué ese es el caso, también se explicó en el Foro (por mí y otros) un par de veces.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Viendo 15 respuestas - de la 1 a la 15 (de un total de 23)

1 2