Aidez-moi à fermer l'ordre à l'extrémité du bar ! - page 2

 

Hmm, ce serait donc bien ?

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

En fait, j'ai changé Time[1] en Time[0] parce que Time[1] sautait une barre de plus, donc Time[0] représente en fait l'Open[0]. Si quelqu'un connaît quelque chose de mieux/simple que cela, merci de le dire !

 
Proximus:

Hmm, ce serait donc bien ?

En fait, j'ai changé Time[1] en Time[0] parce que Time[1] sautait 1 barre de plus, donc Time[0] représente en fait l'Open[0]. si quelqu'un connaît quelque chose de mieux/simple que cela, dites-le !

RefreshRates();
OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,Slippage,CLR_NONE);

et vérifiez aussi si orderclose réussit

 
deVries:

et vérifiez également si la fermeture de l'ordre a réussi

Si ce n'est pas le cas, lorsque la fonction start() se répétera, elle testera à nouveau le if() avant l'orderclose() et puisque les conditions seront toujours vraies, elle essaiera de le fermer à nouveau. Je ne peux pas essayer de le fermer 2 fois dans la même boucle du start(), il faut attendre un autre tick, non ?
 
Proximus:
Si ce n'est pas le cas, lorsque la fonction start() se répète, elle testera à nouveau le if() avant l'orderclose() et puisque les conditions seront toujours vraies, elle essaiera de le fermer à nouveau. Je ne peux pas essayer de le fermer 2 fois dans la même boucle du start(), je dois attendre un autre tick, non ?
Ne voulez-vous pas savoir qu'il a échoué ? et s'il a échoué, pourquoi il a échoué ? et quelles étaient les valeurs des variables pertinentes à ce moment-là qui auraient pu le faire échouer ? si vous savez tout cela, vous pouvez le corriger pour qu'il n'échoue pas la prochaine fois....
 
Proximus:

Hmm, ce serait donc bien ?

En fait, j'ai changé Time[1] en Time[0] parce que Time[1] sautait une barre de plus, donc Time[0] représente en fait l'Open[0]. Si quelqu'un connaît quelque chose de mieux/simple, dites-le nous !

Non, cette opération sera toujours clôturée, que le tick soit le tick de la barre suivante ou non, pour toute barre suivant celle où la transaction a été ouverte et à tout moment pendant cette barre, Time[0] sera toujours supérieur à OrderOpenTime().

Si vous voulez fermer au plus près de la clôture de la barre, vous devez déterminer si le tick actuel est le premier tick de la nouvelle barre... et vous devez également vous assurer que la fermeture fonctionne car vous n'aurez qu'une seule chance par barre.
 
Proximus:
Eh bien, si elle n'a pas réussi, alors quand la fonction start() se répète, elle testera à nouveau le if() avant l'orderclose() et puisque les conditions seront toujours vraies pour continuer, elle essaiera de le fermer à nouveau. Je ne peux pas essayer de le fermer 2 fois dans la même boucle du start(), il faut attendre un autre tick non ?


vous avez commencé qu'il doit fermer le dernier tick de la barre.

Nous avons essayé de vous faire comprendre qu'il n'est pas possible de savoir quand la dernière barre de tic-tac va arriver.

Maintenant, peu importe si la fermeture échoue, nous essayons à nouveau, encore et encore, sur les ticks suivants.

vous avez aussi manqué d'autres changements que j'ai suggérés

quel est le sens de rafraîchir les données après la clôture de l'ordre ?

Et savez-vous pourquoi le slippage au lieu du TAKEPROFITPIPS?

Cela dépend du retour d'erreur, vous pouvez essayer de le fermer 2 fois dans la même boucle.

si le contexte commercial est trop chargé et que vous avez d'autres transactions à fermer dans la boucle, il y a de grandes chances qu'elles échouent également.

 
RaptorUK:
Non, l'ordre sera toujours fermé, que le tick soit le tick de la prochaine barre ou non, pour toute barre suivant celle où la transaction a été ouverte et à tout moment pendant cette barre, Time[0] sera toujours supérieur à OrderOpenTime().

Si vous voulez fermer au plus près de la clôture de la barre, vous devez déterminer si le tick actuel est le premier tick de la nouvelle barre... et vous devez également vous assurer que la fermeture fonctionne car vous n'aurez qu'une seule chance par barre.

La fonction start() ne se répète-t-elle pas après chaque tic ? Est-ce que je me trompe ?

Bref, imaginez comme ça :

OrderOpenTime() = 12:12:01 (12 H 12 MIN 1 SEC)

L'ordre est ouvert, le paquet de la fonction Orderclose() se trouve après mon OrderSend() dans le code principal, donc, juste après l'ouverture de l'ordre, mon paquet OrderClose() va tester si les conditions ont été remplies pour fermer l'ordre ou pas :

Time[0] est le prix d'ouverture de cette barre, donc par logique il doit être plus petit que le temps d'ouverture de l'ordre, parce que l'ordre ne peut pas être ouvert avant l'ouverture de la même barre.c'est : 12:12:00

Donc, par tous les moyens :

if(Time[0]>OrderOpenTime())

Si l'ordre ne peut pas être fermé, pour une raison quelconque, comme un slippage ou autre, pas de problème, le start() se répète.

Et à la prochaine répétition le Time[0] sera 100% plus grand que le temps d'ouverture de l'ordre, parce que c'est logique, donc si la première fermeture échoue l'autre OrderClose() se produira chaque fois après quand le start() se répétera, et puisque je pense que le start() se répète par chaque tick, alors je ne pense pas qu'il y ait une meilleure façon de fermer l'ordre plus rapidement, j'espère l'avoir expliqué clairement :)

 
deVries:


vous avez commencé qu'il doit fermer le dernier tick de la barre.

Nous avons essayé de vous faire comprendre qu'il n'est pas possible de savoir quand la dernière barre de tic-tac va arriver.

Maintenant, peu importe si la fermeture échoue, nous essayons à nouveau, encore et encore, sur les ticks suivants.

vous avez aussi manqué d'autres changements que j'ai suggérés

quel est le sens de rafraîchir les données après la clôture de l'ordre ?

Et savez-vous pourquoi le slippage au lieu du TAKEPROFITPIPS?

Cela dépend du retour d'erreur, vous pouvez essayer de le fermer 2 fois dans la même boucle.

si le contexte commercial est trop chargé et que vous avez d'autres transactions à fermer dans la boucle, il y a de grandes chances qu'elles échouent aussi.

J'utilise TAKEPROFITPIPS parce que c'est ma variable pour le TAKEPROFIT, et parce que j'autorise un slippage maximum égal au niveau de mon TP, car il est logique que vous n'ayez pas plus de slippage que votre TP si vous fermez des ordres avec OrderClose(), car si vous le faites, le TAKEPROFIT le fermera à votre place plus efficacement que l'OrderClose().
 
Proximus:

La fonction start() ne se répète-t-elle pas après chaque tic ? Est-ce que je me trompe ?

Oui, start() est appelé à chaque tick, sauf s'il est toujours en cours d'exécution....

Proximus:

De toute façon, imaginez ceci :

OrderOpenTime() = 12:12:01 (12 H 12 MIN 1 SEC)

L'ordre est ouvert, le paquet de la fonction Orderclose() se trouve après celui de la fonction OrderSend() dans le code principal, donc, juste après l'ouverture de l'ordre, mon paquet OrderClose() va tester si les conditions ont été remplies pour fermer l'ordre ou non :

Time[0] est le prix d'ouverture de cette barre, donc par logique il doit être plus petit que le temps d'ouverture de l'ordre, parce que l'ordre ne peut pas être ouvert avant l'ouverture de la même barre.c'est : 12:12:00

Donc par tous les moyens :

Si l'ordre ne peut pas être fermé, pour une raison quelconque, comme un slippage ou autre, pas de problème, le start() se répète.

Et à la prochaine répétition le Time[0] sera 100% plus grand que le temps d'ouverture de l'ordre, parce que c'est logique, donc si la première fermeture échoue l'autre OrderClose() se produira chaque fois après quand le start() se répétera, et puisque je pense que le start() se répète par chaque tick, alors je ne pense pas qu'il y ait une meilleure façon de fermer l'ordre plus rapidement, j'espère l'avoir expliqué clairement :)

Oui, mais ce n'est pas ce que vous avez demandé dans votre premier message dans ce fil de discussion... maintenant vous dites qu'il est normal que la clôture soit retardée d'une période, puis d'une autre période, etc. Si vous voulez clôturer au plus près de la fin de la barre, vous devez le faire au premier tick de la barre suivante, et vous devez vérifier si la clôture a échoué et réessayer de la manière correcte pour réussir à la clôturer.
 

Il est assez rare que le cours de clôture d'une barre ne soit pas répété sur la barre suivante, pas nécessairement son cours d'ouverture ...