Fermeture des demi-lots. - page 6

 
Vous voulez dire que si je mets "if(FirstTarget_Buy == Bid)" ? (Évidemment pas, car cela ne fonctionne pas).
 
DomGilberto:
Vous voulez dire que si je mets "if(FirstTarget_Buy == Bid)" ? (Évidemment pas, car cela ne fonctionne pas).

Ou quelque chose comme...

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   //  close the Order
   }

... en gardant à l'esprit les problèmes de comparaison des doubles ( le prix peut-il != le prix ? ).

Vous devez également penser au spread et savoir si votre cible inclut ou non le spread.

 

(soupir) ok - Merci pour votre aide Raptor ! Cela devient frustrant. Je vous jure que ça n'a pas besoin de prendre autant de temps... L'instruction If ci-dessus ne fonctionne pas.

Je suis honnêtement à bout de souffle...

Il fermera plusieurs moitiés (la moitié d'une moitié d'une moitié, etc.) si je n'inclus pas l'instruction "if" ci-dessus (dans ce cas, rien ne se passe), et si je mets simplement l'ordre de fermeture à "Bid" - je n'arrive pas à comprendre comment il sait quand fermer cette moitié...

Toute autre suggestion sera grandement appréciée, merci pour votre aide !

 
DomGilberto:

(soupir) ok - Merci pour votre aide Raptor ! Cela devient frustrant. Je vous jure que ça n'a pas besoin de prendre autant de temps... L'instruction If ci-dessus ne fonctionne pas.

Je suis honnêtement à bout de souffle...

Il fermera plusieurs moitiés (la moitié d'une moitié d'une moitié, etc.) si je n'inclus pas l'instruction "if" ci-dessus (dans ce cas, rien ne se passe), et que je mets simplement l'ordre de fermeture à "Bid" - je n'arrive pas à comprendre comment il sait quand fermer cette moitié...

Si vous ne spécifiez pas de condition de prix à respecter, il fermera simplement la moitié de l'ordre dès qu'il le pourra, l'offre est toujours l'offre et est valable pour fermer une OP_BUY.

L'instruction if fonctionnera... si elle ne fonctionne pas, trouvez pourquoi, ajoutez un Print() avant... et après.

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

Ne vous inquiétez pas, cela devient plus frustrant ... lorsque vous avez votre code qui fonctionne comme vous le souhaitez et que vous l'exécutez dans le testeur de stratégie et que vous constatez qu'il est aussi bon qu'un lancer de pièce de monnaie.

 
Ok, merci ! Pouvez-vous également m'éclairer sur la raison pour laquelle il m'arrive de lancer ST, puis de l'arrêter et que rien ne s'imprime dans le Journal... ?

"Quand votre code fonctionne comme vous le souhaitez, que vous l'exécutez dans le testeur de stratégie et que vous constatez qu'il est aussi bon qu'un lancer de pièce de monnaie"

Oui, je ne peux qu'imaginer ! J'ai réussi à écrire 6 pages (je ne suis pas sûr du nombre de lignes) de code environ - j'ajoute ces parties cruciales... l'une d'entre elles est la fermeture de 50% à 1:1 et le passage à l'équilibre... MAIS NON, la fermeture du lot est contre intuitive (en ce qui me concerne).
 
DomGilberto:
Ok, merci ! Pouvez-vous également m'éclairer sur le fait que parfois je lance ST, puis l'arrête et que rien n'est imprimé dans le journal... ?

Vous regardez le bon onglet de journal ? il y en a deux... celui que vous devez regarder dans la fenêtre du testeur de stratégie et celui que vous devez regarder à côté de l'onglet des experts. Le meilleur moyen est de regarder le fichier journal sauvegardé dans le dossier tester\logs.

 
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 10
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
   if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)){
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
C'est parfait - La première cible d'achat est exactement la bonne. Le nombre de lots à fermer est exactement le même. Tout cela s'imprime sur un ordre en attente - Cependant, il ne se ferme pas à ce prix, même si je l'ai calculé correctement? Je le sélectionne alors qu'il s'agit d'un "OP_BUY"... Je suis désolé de poser toutes ces questions, mais je ne comprends pas pourquoi cela ne fonctionne pas ?
 
DomGilberto:
C'est parfait - Le firsttarget_buy est exactement correct. Le nombre de lots à fermer est exactement le même. Tout cela s'imprime sur un ordre en attente - Cependant, il ne se ferme pas à ce prix, même si je l'ai calculé correctement ? Je le sélectionne alors qu'il s'agit d'un "OP_BUY"... Je suis désolé de poser toutes ces questions, mais je ne comprends pas pourquoi cela ne fonctionne pas ?

Vous n'avez pas ajouté l'impression avant le if(. . . . .

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );   //  add this line too . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

Si ce n'est pas le cas, le if() n'est pas vrai et l'ordre n'est pas partiellement fermé... et si c'est toujours un ordre en attente, ce n'est pas un OP_BUY.

 
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Current Bid: 1.35972 FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000

Je peux voir quand l'offre est égale ou supérieure à "FirstTarget_buy " ? Je teste sur une transaction qui va jusqu'à l'objectif de rentabilité de 2:1... Je sais donc que la récompense est de 1:1, ce qui signifie que les lots devraient être divisés par deux... Toutes les fonctions d'impression s'impriment sur les ordres en attente (c'est-à-dire que s'il y a un ordre en attente et que j'arrête le test, toutes les impressions s'affichent - cependant, si j'arrête le test après qu'un des ordres en attente se soit déclenché, il n'y a rien d'imprimé en termes d'"Impression", dans le journal ?)

Je n'arrive pas à croire que je suis bloqué sur ce point - c'est en train de devenir le plus grand défi jusqu'à présent - pourtant j'ai l'impression d'avoir d'autres choses bien plus complexes...

(mise à jour : je suppose que je dois surveiller le Bid sur une base tick par tick pour tirer le prix à travers et dans ma boucle "for" ?

Pour que l'instruction "IF()" soit vraie, l'offre d'achat sera finalement égale à mon "FirstTarget_buy" ?

 
DomGilberto:

Je peux voir quand l'offre est égale ou supérieure à "FirstTarget_buy " ? Je teste sur une transaction qui va jusqu'à l'objectif de rentabilité de 2:1... Je sais donc que la récompense est de 1:1, ce qui signifie que les lots devraient être divisés par deux... Toutes les fonctions d'impression s'impriment sur les ordres en attente (c'est-à-dire que s'il y a un ordre en attente et que j'arrête le test, toutes les impressions s'affichent - cependant, si j'arrête le test après qu'un des ordres en attente se soit déclenché, il n'y a rien d'imprimé en termes d'"Impression", dans le journal ?)

OK, maintenant vous faites des progrès ... vous devez juste trouver pourquoi un OP_BUY ne déclenche pas votre code qui imprime toutes les variables de la même manière qu'un ordre en attente... si vous voulez poster ce code, je regarderai.