Risposta

Profit Trailing (on close) ..come convertire tick by tick?!

23 risposte

Gaudio Fx

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #115026

Capisco che per avere uno studio empirico da riportare nel live trading è ottimo avere la funzione che SQ, ma dovremmo avere la possibilità di lavorare meglio sulla strategia, una volta trovata una buona
Queste funzioni consentono di utilizzare profit-trailing, breakeven, trailing stop-etc... ma per molte strategie, soprattutto quelle più aggressive, attendere la chiusura della candela è una funzione di cui non abbiamo bisogno.
Tutte queste funzioni (per alcune strategie) sono inutili se devo aspettare la chiusura della candela!
Dichiaro di lavorare solo con tick-real!
ma ogni parametro di breakeven e di trailing è impostato in attesa della chiusura della candela di entrata... perché?
centinaia e centinaia di strategie da me implementate sono impostate con il "trailing on close" ... e sarebbero molto più efficienti con un trailing tick by tick dall'ingresso a mercato
sicuramente, aspettare la chiusura della candela, aiuterà a non cadere in overfitting o a vedere buone strategie che non funzionano poi in diretta
ma dovrebbe avere la possibilità di eliminare questa caratteristica una volta che si trova una buona strategia e quindi lavorare meglio in uscita trailing non aspettare la chiusura della candela
qualcuno sa come fare? Devo cambiare il file mql? Devo cancellare o sostituire qualche codice all'interno? Devo impostare il SQ?
Grazie a tutti
Giorgio

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

8 anni fa #136500

//+------------------------------------------------------------------+
/**
 * Gestire il trade - spostare lo SL al pareggio o al trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... il resto del codice

Se si commenta il:

 

if(!sqIsBarOpen) return;

 

linea come:

 

// if(!sqIsBarOpen) return;

 

Quindi la funzione manageStop verrà eseguita per ogni tick e tutti i tipi di spostamento dello stop loss avverranno ogni tick, se necessario. In questo modo, però, il carico di CPU sul computer sarà molto più elevato.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

8 anni fa #136504

.... e rovinerà la vostra strategia. Vedrete che nel 99% dei casi l'esecuzione di una strategia con trailing per tick invece che per barra aperta (come è stata creata da SQ) risulterà in una curva di equity negativa. Questo semplicemente perché la strategia è stata trovata da SQ con un trailing su barra ed è stata creata in questo modo. Accelerare il trailing in questo modo cambierà completamente l'intera strategia e non porterà a nulla di buono, ma vedrete cosa intendo quando farete i vostri test in MT4 con il trailing per tick invece che per barra aperta;)


🚀 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

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136505

//+------------------------------------------------------------------+
/**
 * Gestire il trade - spostare lo SL al pareggio o al trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... il resto del codice

Se si commenta il:

if(!sqIsBarOpen) return;

linea come:

// if(!sqIsBarOpen) return;

Quindi la funzione manageStop verrà eseguita per ogni tick e tutti i tipi di spostamento dello stop loss avverranno ogni tick, se necessario. In questo modo, però, il carico di CPU sul computer sarà molto più elevato.

Grazie per la risposta amico mio... quindi ho commentato "if(!sqlsBarOpen) return;" con " // " e il risultato è questo :

da questo codice standard ...

 

a questo :

 

ma dopo questa modifica non è cambiato nulla
Devo cambiare qualcos'altro? Ho provato a impostare un semplice trailing di 1 pip, ma non funziona!!!  :angry:
Ho provato e riprovato più volte cambiando il tipo di trailing... niente da fare!
il trailing si attiva solo con la chiusura della candela.
Sono sicuro che riuscirete a risolvere questo problema 😀  😀 ...per favore
Grazie ancora 
Giorgio

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

8 anni fa #136510

Solo il getProfitTrailingByTick avrà qualche effetto se viene definita con un numero di pip come valore di ritorno (questo è vuoto, quindi non fa nulla).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valore lungo qui
   } else if (OrderType() == OP_SELL) {
      // valore breve qui
   }

   return(0);
}

L'altro tipo di stop trailing (che utilizza uno o più indicatori) continuerà ad essere tracciato alla chiusura, perché il valore dell'indicatore cambia solo ad ogni barra:

double getStopTrailingByClose() {
   double value = 0;
   if (OrderType() == OP_BUY) {
      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));

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

0

Gaudio Fx

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136513

Solo il getProfitTrailingByTick avrà qualche effetto se viene definita con un numero di pip come valore di ritorno (questo è vuoto, quindi non fa nulla).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valore lungo qui
   } else if (OrderType() == OP_SELL) {
      // valore breve qui
   }

   return(0);
}

L'altro tipo di stop trailing (che utilizza uno o più indicatori) continuerà ad essere tracciato alla chiusura, perché il valore dell'indicatore cambia solo ad ogni barra:

double getStopTrailingByClose() {
   double value = 0;
   if (OrderType() == OP_BUY) {
      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));

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

Scusate... ma non è un'esecuzione per tick 🙁 Ho compilato in questo modo ma non ho un trailing per tick... non è corretto?

 

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

8 anni fa #136514

Ok, la situazione è un po' più complicata dal fatto che la funzione manageStop utilizza Close[1] come prezzo corrente. Ovviamente questo prezzo cambia solo ad ogni barra, quindi lo stop viene spostato solo ad ogni barra.

         //------------------------------
         // profitto trailing su TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Bid - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Modificare il codice come mostrato sopra, sostituendo close con Bid e Ask.

0

Gaudio Fx

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136515

Ok, la situazione è un po' più complicata dal fatto che la funzione manageStop utilizza Close[1] come prezzo corrente. Ovviamente questo prezzo cambia solo ad ogni barra, quindi lo stop viene spostato solo ad ogni barra.

         //------------------------------
         // profitto trailing su TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Bid - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Modificare il codice come mostrato sopra, sostituendo close con Bid e Ask.

Ho cambiato Bid & Ask ... ma non è mai cambiato ... non è una traccia 🙁

potrebbe essere che devo cambiare "double close = Close [1]". ??
grazie per l'aiuto che mi state dando 🙂

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

8 anni fa #136516

Ho apportato queste modifiche e il trailing by tick ha funzionato:

 

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 modifica 11 1.00 1.56723 1.54657 0.00000 0.00 9788.26
213 2015.08.24 02:50 modifica 11 1.00 1.56723 1.56723 0.00000 0.00 9788.26
214 2015.08.24 02:52 modifica 11 1.00 1.56723 1.56724 0.00000 0.00 9788.26
215 2015.08.24 02:52 modifica 11 1.00 1.56723 1.56725 0.00000 0.00 9788.26
216 2015.08.24 02:52 modifica 11 1.00 1.56723 1.56726 0.00000 0.00 9788.26
217 2015.08.24 02:52 modifica 11 1.00 1.56723 1.56727 0.00000 0.00 9788.26
218 2015.08.24 02:52 modifica 11 1.00 1.56723 1.56728 0.00000 0.00 9788.26
219 2015.08.24 02:53 modifica 11 1.00 1.56723 1.56729 0.00000 0.00 9788.26
220 2015.08.24 02:53 modifica 11 1.00 1.56723 1.56732 0.00000 0.00 9788.26
221 2015.08.24 02:53 modifica 11 1.00 1.56723 1.56734 0.00000 0.00 9788.26
222 2015.08.24 02:53 modifica 11 1.00 1.56723 1.56737 0.00000 0.00 9788.26
223 2015.08.24 02:53 modifica 11 1.00 1.56723 1.56739 0.00000 0.00 9788.26
224 2015.08.24 02:53 modifica 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

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136519

Ho provato molte volte ma niente!
Ho pensato che forse il problema è che i miei ordini sono buystop e sellstop mentre ho notato che i tuoi ordini sono ordini di mercato.
potrebbe essere questa la causa?
per impostare il comando esatto per gli ordini buystop e sellstop, forse dovrei cambiare altre cose?
 
Grazie ancora
 
Giorgio

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

8 anni fa #136530

È necessario rimuovere anche la riga "if (OrderOpenTime() >= Time[0])...", poiché altrimenti la funzione esce a questo punto finché l'ordine non è stato aperto per almeno 1 barra. Quindi inizierà a tracciare (per tick nel vostro caso) solo 1 barra dopo l'apertura dell'ordine. Se si rimuove quella riga, inizierà subito 1 tick dopo l'apertura dell'ordine.

 

Continuo a ripeterlo: questo non porterà a nulla di più redditizio della vostra strategia originale, anzi sarà peggio, molto peggio di un trail by tick, se la strategia è stata creata con il trailing su barra. In questo modo si uccide l'intera strategia, poiché anche gli ordini successivi saranno influenzati dalla chiusura anticipata degli ordini precedenti. È il modo perfetto per sbarazzarsi del proprio denaro, ma sembra che si debba imparare nel modo più duro:)


🚀 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.

Visita il profilo

8 anni fa #136532

//+------------------------------------------------------------------+
/**
 * Gestire l'operazione - spostare lo SL per raggiungere il pareggio o il 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; // uscire se l'ordine è stato appena aperto

         //------------------------------
         // profit trailing sulla chiusura
         trailingStopValue = getProfitTrailingByTick();
         if(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = close - trailingStopValue;
            } altrimenti {
  	            tsLevel = close + trailingStopValue;
            }
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            newSL = getSpecialSL(tsLevel);

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

			//--------------------------------------------------------
   		// gestire lo stop trailing sulla chiusura
         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);
	           	}
	         }
         }

         //--------------------------------------------------------
         // gestire SL 2 BE (per tick)
         moveSLValue = getMoveSLValueByTick();
         se(moveSLValue > 0) {
            orderSL = OrderStopLoss();
            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);
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+

Questo è il codice completo da sostituire, che consentirà di tracciare l'ordine, spunta per spunta.


🚀 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

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136542

...molte grazie geektrader 😀 ... proverò questo una volta e vi farò sapere

Grazie ancora

0

Gaudio Fx

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136545

allora:
Ho provato in tutti i modi, sia modificando il codice all'interno della strategia (come indicato da voi) e anche creando una strategia manualmente, da StrategyQuant, nello "Strategy Editor", non riesco a ottenere nesun trailing tick-by-tick
Ho notato infatti che anche se creo una qualsiasi strategia semplice con l'StrategyQuant, se inserisco un semplice "profit-trailing" viene creata, automaticamente, l'impostazione del trailing "on close" della candela e mai tick-by-tick.
Anche se si utilizza la funzione "Costruisci Strategie", impostando i tick reali, non si trova mai alcun trailing tick per tick
sempre sempre sempre "(on close)" ... in ogni modo, non riesco ad avere il trailing più veloce sul prezzo tick-by-tick.
è incredibile 🙁
Qualcuno di voi può dirmi cosa c'è di sbagliato? Avete mai creato una strategia con trailing tick-by-tick?
Il mio "StrategyQuant" non ha mai creato alcuna strategia con trailing tick-by-tick ... ma solo "on close".
Perché?

0

Gaudio Fx

Abbonato, bbp_partecipante, comunità, 22 risposte.

Visita il profilo

8 anni fa #136616

nessuno può aiutarmi?
qualcuno può confermare che STRATEGYQUANT crea strategie con trailing dinamico tick-by-tick?
perché, non ha mai creato un trailing con tick-by-tick?
Non intendo forzare la redditività, anche se non redditizia ... non ha mai creato alcuna strategia con il trailing se non "trailing (on close)".
Perché?
Se vassoio per creare manualmente, è sempre lo stesso (ON CLOSE)!!! 🙁

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

8 anni fa #136634

NO, SQ creerà solo strategie con trailing su BAR CLOSE come spiegato più volte qui e in altri thread. L'unica cosa che si può fare è esportare un EA per MT4 che faccia trailing sul TICK modificando il codice MQL4 nel modo in cui lo abbiamo postato per voi già diverse volte in questo thread. Questo non cambierà nulla del fatto che SQ continuerà a creare strategie con trailing solo sulla chiusura della barra. Il perché di questa situazione è stato spiegato nel forum (da me e da altri) alcune volte.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Stai visualizzando 15 risposte - da 1 a 15 (di 23 totali)

1 2