Répondre

Profit Trailing (on close) ...comment convertir tick by tick ?!

23 réponses

Gaudio Fx

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #115026

Je comprends que le fait de disposer d'une étude empirique à rapporter dans le trading en direct est une excellente chose, mais nous devrions avoir la possibilité de mieux travailler sur la stratégie, une fois que vous avez trouvé une bonne stratégie.
Ces fonctions permettent d'utiliser le profit-trailing, le breakeven, le trailing stop-etc etc. mais pour de nombreuses stratégies, notamment celles les plus agressives, attendre la fermeture de la bougie est une fonction dont on n'a pas besoin.
toutes ces fonctions (pour certaines stratégies) sont inutiles si je dois attendre la fermeture de la bougie !
Je précise que je ne travaille qu'avec tick-real !
mais le seuil de rentabilité et le paramètre de suivi sont tous deux réglés en attendant la fermeture de la bougie d'entrée... pourquoi ?
des centaines et des centaines de stratégies que j'ai mises en œuvre sont paramétrées avec le "trailing on close" ... et seraient beaucoup plus efficaces avec un trailing tick par tick à partir de l'entrée sur le marché
Il est certain qu'attendre la fermeture de la bougie permet de ne pas tomber dans l'overfitting ou de voir de bonnes stratégies qui ne fonctionnent pas en direct.
mais il devrait être possible d'éliminer cette fonction une fois que l'on a trouvé une bonne stratégie et que l'on travaille mieux en traçant sans attendre la fermeture de la bougie.
Quelqu'un sait-il comment faire ? Je dois changer le fichier mql ? Je dois supprimer ou remplacer du code à l'intérieur ? Je dois définir le SQ ?
Merci à tous
Giorgio

0

mikeyc

Client, bbp_participant, communauté, 877 réponses.

Visiter le profil

Il y a 8 ans #136500

//+------------------------------------------------------------------+
/**
 * gérer le trade - déplacer le SL pour atteindre le seuil de rentabilité ou le trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return ;

... reste du code

Si vous commentez le :

 

if(!sqIsBarOpen) return ;

 

ligne comme :

 

// if(!sqIsBarOpen) return ;

 

Ensuite, la fonction manageStop s'exécutera pour chaque tick, et tous les types de mouvements de stop loss se produiront chaque tick là où c'est nécessaire. Cela entraînera une charge de travail beaucoup plus importante pour l'unité centrale de l'ordinateur.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136504

.... et cela ruinera votre stratégie. Vous verrez que dans 99% des cas, l'exécution d'une stratégie avec un trailing par tick au lieu d'un bar open (comme il a été créé par SQ) résultera en une courbe d'équité négative. C'est simplement parce que la stratégie a été trouvée par SQ avec un trailing sur barre et a été créée comme cela. Accélérer le trailing comme cela changera complètement la stratégie et ne vous apportera rien de bon, mais vous verrez ce que je veux dire lorsque vous ferez vos tests dans MT4 avec un trailing by tick au lieu d'un bar open ;)


🚀 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

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136505

//+------------------------------------------------------------------+
/**
 * gérer le trade - déplacer le SL pour atteindre le seuil de rentabilité ou le trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return ;

... reste du code

Si vous commentez le :

if(!sqIsBarOpen) return ;

ligne comme :

// if(!sqIsBarOpen) return ;

Ensuite, la fonction manageStop s'exécutera pour chaque tick, et tous les types de mouvements de stop loss se produiront chaque tick là où c'est nécessaire. Cela entraînera une charge de travail beaucoup plus importante pour l'unité centrale de l'ordinateur.

Merci pour votre réponse, mon ami. J'ai donc commenté "if(!sqlsBarOpen) return ;" avec " // " et le résultat est le suivant :

de ce code standard ...

 

à ce :

 

mais après cette modification, rien n'a changé
Je dois changer quelque chose d'autre ? J'ai essayé de mettre en place un simple trailing de 1 pip, mais cela ne fonctionne pas ! !!  :angry :
J'ai essayé et réessayé plusieurs fois tout en changeant le type de trame... pas moyen !
le suivi ne s'active qu'à la fermeture de la bougie.
Je suis sûr que vous pouvez résoudre ce problème 😀  😀 ... s'il vous plaît
merci encore 
Giorgio

0

mikeyc

Client, bbp_participant, communauté, 877 réponses.

Visiter le profil

Il y a 8 ans #136510

Seule la getProfitTrailingByTick aura un effet si elle est définie avec un nombre de pips comme valeur de retour (celle-ci est vide, donc ne fait rien).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valeur longue ici
   else if (OrderType() == OP_SELL) {
      // valeur courte ici
   }

   return(0) ;
}

L'autre type de suivi d'arrêt (qui utilise un ou plusieurs indicateurs) sera toujours suivi à la clôture, car la valeur de l'indicateur ne change que chaque barre :

double getStopTrailingByClose() {
   double value = 0 ;
   if (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 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, 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(value) ;
}

0

Gaudio Fx

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136513

Seule la getProfitTrailingByTick aura un effet si elle est définie avec un nombre de pips comme valeur de retour (celle-ci est vide, donc ne fait rien).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valeur longue ici
   else if (OrderType() == OP_SELL) {
      // valeur courte ici
   }

   return(0) ;
}

L'autre type de suivi d'arrêt (qui utilise un ou plusieurs indicateurs) sera toujours suivi à la clôture, car la valeur de l'indicateur ne change que chaque barre :

double getStopTrailingByClose() {
   double value = 0 ;
   if (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 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, 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(value) ;
}

Désolé... mais pas de run by tick 🙁 Je compile de cette manière mais je n'ai pas de trailing by tick ... ce n'est pas correct ?

 

0

mikeyc

Client, bbp_participant, communauté, 877 réponses.

Visiter le profil

Il y a 8 ans #136514

D'accord, c'est un peu plus compliqué du fait que la fonction manageStop utilise Close[1] comme prix actuel. Bien sûr, ce prix ne change qu'à chaque barre, donc le stop n'est déplacé qu'à chaque barre.

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

Modifiez le code comme indiqué ci-dessus, en remplaçant close par Bid et Ask.

0

Gaudio Fx

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136515

D'accord, c'est un peu plus compliqué du fait que la fonction manageStop utilise Close[1] comme prix actuel. Bien sûr, ce prix ne change qu'à chaque barre, donc le stop n'est déplacé qu'à chaque barre.

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

Modifiez le code comme indiqué ci-dessus, en remplaçant close par Bid et Ask.

J'ai changé le Bid & Ask ... mais jamais changé... pas de trace 🙁

il se peut que je doive modifier "double close = Close [1]" ? ?
Merci pour toute l'aide que vous m'apportez 🙂 .

0

mikeyc

Client, bbp_participant, communauté, 877 réponses.

Visiter le profil

Il y a 8 ans #136516

J'ai effectué ces modifications et le traçage par la tique a fonctionné pour moi :

 

211 2015.08.24 02:45 acheter 11 1,00 1,56723 0,00000 0,00000 0,00 9788,26
212 2015.08.24 02:45 modifier 11 1,00 1,56723 1,54657 0,00000 0,00 9788,26
213 2015.08.24 02:50 modifier 11 1,00 1,56723 1,56723 0,00000 0,00 9788,26
214 2015.08.24 02:52 modifier 11 1,00 1,56723 1,56724 0,00000 0,00 9788,26
215 2015.08.24 02:52 modifier 11 1,00 1,56723 1,56725 0,00000 0,00 9788,26
216 2015.08.24 02:52 modifier 11 1,00 1,56723 1,56726 0,00000 0,00 9788,26
217 2015.08.24 02:52 modifier 11 1,00 1,56723 1,56727 0,00000 0,00 9788,26
218 2015.08.24 02:52 modifier 11 1,00 1,56723 1,56728 0,00000 0,00 9788,26
219 2015.08.24 02:53 modifier 11 1,00 1,56723 1,56729 0,00000 0,00 9788,26
220 2015.08.24 02:53 modifier 11 1,00 1,56723 1,56732 0,00000 0,00 9788,26
221 2015.08.24 02:53 modifier 11 1,00 1,56723 1,56734 0,00000 0,00 9788,26
222 2015.08.24 02:53 modifier 11 1,00 1,56723 1,56737 0,00000 0,00 9788,26
223 2015.08.24 02:53 modifier 11 1,00 1,56723 1,56739 0,00000 0,00 9788,26
224 2015.08.24 02:53 modifier 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

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136519

J'ai essayé plusieurs fois, mais rien !
J'ai pensé que le problème venait peut-être du fait que mes ordres sont des buystop et sellstop alors que j'ai remarqué que vos ordres sont des ordres de marché.
Cela pourrait-il être la cause ?
pour définir la commande exacte pour les ordres buystop et sellstop, peut-être devrais-je changer d'autres choses ?
 
Merci encore
 
Giorgio

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136530

Vous devez également supprimer la ligne "if (OrderOpenTime() >= Time[0])...", car elle quitte la fonction à ce stade tant que l'ordre n'est pas ouvert depuis au moins une mesure. Il ne commencera donc à suivre (par tic-tac dans votre cas) qu'une mesure après l'ouverture de l'ordre. Si vous supprimez cette ligne, il commencera immédiatement 1 tick après l'ouverture de l'ordre.

 

Je continue à vous dire que cela ne mènera à rien de plus rentable que votre stratégie originale, ce sera pire, bien pire de traîner par tick, si la stratégie a été créée avec un traçage sur la barre. Vous tuez toute la stratégie de cette façon, car les ordres suivants seront également affectés par la clôture anticipée des ordres précédents. C'est le meilleur moyen de se débarrasser de son argent, mais il semble qu'il faille apprendre à la dure :)


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

Visiter le profil

Il y a 8 ans #136532

//+------------------------------------------------------------------+
/**
 * gérer le trade - déplacer le SL pour atteindre le seuil de rentabilité ou le 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 ; // exit si l'ordre vient d'être ouvert

         //------------------------------
         // profit trailing à la clôture
         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(OrderType() == OP_BUY) {
               if(isSLCorrect(tsLevel) && (orderSL == 0 || normalOrderSL tsLevel) && !doublesAreEqual(orderSL, newSL)) {
     	            rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0) ;
     	         }
            }
         }

			//--------------------------------------------------------
   		// gérer le trailing stop sur la clôture
         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) ;
	           	}
	         }
         }

         //--------------------------------------------------------
         // gérer SL 2 BE (par tic)
         moveSLValue = getMoveSLValueByTick() ;
         if(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) ;
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+

Voici le code complet à remplacer, qui tracera votre commande tic-tac par tic-tac.


🚀 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

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136542

... merci beaucoup geektrader 😀 ... j'essaierai une fois et je vous tiendrai au courant.

Merci encore

0

Gaudio Fx

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136545

ensuite :
J'ai essayé de toutes les façons, soit en changeant le code dans la stratégie (comme indiqué par vous) et même en créant une stratégie manuellement, par StrategyQuant, dans le "Strategy Editor", je n'arrive pas à obtenir nesun trailing tick-by- tick.
J'ai remarqué en fait, que même si je crée n'importe quelle stratégie simple avec le StrategyQuant, si j'entre dans un simple "profit-trailing" est créé, automatiquement, le réglage du trailing "on close" candle et jamais tick-by-tick.
Même si vous utilisez la fonction "Build Strategies", en définissant le tick réel, vous ne trouverez jamais de trailing tick by tick.
toujours toujours toujours "(on close)"... de toute façon, je n'arrive pas à avoir le trailing le plus rapide sur le prix tick-by-tick.
c'est incroyable 🙁
Certains d'entre vous peuvent me dire ce qui ne va pas ? Avez-vous déjà créé une stratégie avec un suivi tick-by-tick ?
mon "StrategyQuant" n'a jamais créé de stratégie avec trailing tick-by-tick ... mais seulement "on close"
pourquoi ?

0

Gaudio Fx

Abonné, bbp_participant, communauté, 22 réponses.

Visiter le profil

Il y a 8 ans #136616

personne ne peut m'aider ?
Quelqu'un peut-il confirmer que STRATEGYQUANT crée des stratégies avec un suivi dynamique tick-by-tick ?
pourquoi, il n'a même pas créé de suivi avec tick-by-tick ?
Je ne veux pas forcer la rentabilité, même non rentable... n'a jamais créé de stratégie avec trailing autre que "trailing (on close)"
pourquoi ?
Si je fais un plateau pour créer manuellement, c'est toujours la même chose (ON CLOSE) !!... 🙁

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136634

NON, SQ ne créera que des stratégies avec trailing sur BAR CLOSE comme expliqué plusieurs fois ici et dans d'autres fils de discussion. La seule chose que vous pouvez faire est d'exporter un EA pour MT4 qui suit le TICK en modifiant le code MQL4 de la façon dont nous l'avons déjà affiché pour vous plusieurs fois dans ce fil. Cela ne changera RIEN au fait que SQ STILL ne crée des stratégies avec trailing qu'à la fermeture de la barre. La raison pour laquelle c'est le cas a également été expliquée dans le Forum (par moi et d'autres) à plusieurs reprises.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Affichage de 15 réponses de 1 à 15 (sur un total de 23)

1 2