int start()
{
if(IsNewCandle())
{
CheckForMaTrade();
if(UseCandleTrail)AdjustTrail();
}
if(OpenOrdersThisPair(Symbol())>0)
{
if(UseMoveToBreakEven)MoveToBreakEven();
if(UseTrailingStop)AdjustTrail();
if(Use_MA_Trail)MA_Trail();
CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
}
}
Est-ce que ça marcherait ? Est-ce que ça vérifierait chaque tick à partir de là ? (CloseHalfOrder() )
Désolé - je devrais arrêter de poser les questions 101 avant d'essayer les choses :P
Oui - cela fonctionne. J'ai maintenant réussi à faire en sorte qu'il se ferme dès que le tick entre et que l'offre est >= le prix spécifié dans l'OrderClose :D
Un grand pas dans la bonne direction ! Maintenant, il faut mettre un frein à la fermeture constante des moitiés à chaque fois que le prix revient au même prix spécifié dans la fonction OrderClose :)
(Je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !) Hmmm, je ne peux pas penser à la logique correcte pour qu'il attende après que la première cible (1:1) ait fait son ordre de fermeture... Une idée ? Le numéro de l'OrderTicket() est le même... donc ça ne peut pas être comme ça ? Je suis bloqué sur cette partie maintenant :) après que j'ai ce morceau, c'est craqué à peu près :)
Mec, je suis tellement reconnaissant pour votre aide !
C'est tellement gratifiant une fois que tu as trouvé la solution ! Merci aussi pour votre contribution !
La dernière chose sur laquelle je suis bloqué est de dire à la boucle d'arrêter de diviser par deux l'ordre ouvert au prix de sortie de OrderClose(), continuellement ? Honnêtement, je n'arrive pas à comprendre la logique ? Il est parfait avec le QUAND et le QUEL prix pour la fermeture partielle. J'ai juste besoin de lui dire de s'arrêter UNE FOIS qu'il a divisé l'ordre en deux une fois ?
Le problème est qu'une fois que l'OrderClose() a fermé la moitié de la position ouverte, il sera appelé encore et encore parce que le "int start" appelle "CloseHalfOrder()" chaque fois qu'il y a un "OP_BUY" ouvert... Une idée ?
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(OrderType()==OP_BUY)
{
CloseHalfOrder();
}
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...
//+--------------------------------------------------------------------------------------------------+//| Close OP_BUY Half lots @ 1:1 Function |//+--------------------------------------------------------------------------------------------------+void CloseHalfOrder()
{
double minLot=MarketInfo(Symbol(),MODE_MINLOT);
//Print("The minimum lots are: ",DoubleToStr(minLot,Digits));double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
//Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
Print("The Lots to close is: ",DoubleToStr(half,Digits));
for(int c=OrdersTotal()-1; c>=0; c--)
{
if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
{
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ",OrderLots());
}
else
{
Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?continue;
}
double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
if(OrderMagicNumber()==MagicNumber)
if(OrderSymbol()==Symbol())
if(OrderLots()>minLot)
{
Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
int HalfCloseTicket = OrderTicket();
if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
{
Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
}
}
if(Close_Half_Order_Buy==True)
{
MoveToBreakEven(); // This is a void.
EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
}
}
}
j'espère que vous pouvez expliquer à quelqu'un d'autre comment faire le moment que vous connaissez
101 questions... qui veut les lire toutes...
Pour (je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !)
cela se produit la plupart du temps si vous essayez de modifier la transaction avec les paramètres qu'elle a déjà.
Mate je serai plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste un dernier morceau, et puis ça marche à la menthe ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).
Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?
Merci aussi pour le conseil concernant l'erreur 1 de OrderModify :)
Je serais plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste une dernière partie, et puis ça marche à merveille ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).
Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?
Merci pour le conseil concernant l'erreur 1 de OrderModify également :)
Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... si OrderLots() >= ........
Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... if OrderLots() >= ........
Pour cette raison ? Cela n'a pas d'importance si je me déplace d'abord au seuil de rentabilité... Le premier obstacle est cette partie que je ne comprends pas ? Même si j'arrive d'abord à l'équilibre, puis que je ferme la moitié de la position, cela va appeler TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?
int start()
{
if(OrderType()==OP_BUY)
{
CloseHalfOrder();
}
}
A cause de ça ? Ça n'a pas d'importance si je bouge pour atteindre le seuil de rentabilité d'abord... Le premier obstacle est cette partie que je ne comprends pas ? Même si je me déplace d'abord jusqu'à l'équilibre, puis que je ferme la moitié, cela appellera TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?
Vous ne vous déplacez vers BE et fermez la moitié que si le SL n'est pas déjà à BE.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Ah oui - je l'ai eu ! Je pense que je sais comment le faire - je retourne jouer maintenant :)
CI-DESSOUS - cela fonctionne :)
Désolé - je devrais arrêter de poser les questions 101 avant d'essayer les choses :P
Oui - cela fonctionne. J'ai maintenant réussi à faire en sorte qu'il se ferme dès que le tick entre et que l'offre est >= le prix spécifié dans l'OrderClose :D
Un grand pas dans la bonne direction ! Maintenant, il faut mettre un frein à la fermeture constante des moitiés à chaque fois que le prix revient au même prix spécifié dans la fonction OrderClose :)
(Je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !) Hmmm, je ne peux pas penser à la logique correcte pour qu'il attende après que la première cible (1:1) ait fait son ordre de fermeture... Une idée ? Le numéro de l'OrderTicket() est le même... donc ça ne peut pas être comme ça ? Je suis bloqué sur cette partie maintenant :) après que j'ai ce morceau, c'est craqué à peu près :)
Mec, je suis tellement reconnaissant pour votre aide !
Je suis tellement reconnaissant pour votre aide !
quel énorme sujet c'est
Fermer des demi-lots.
j'espère que vous pouvez expliquer à quelqu'un d'autre comment faire le moment que vous connaissez
101 questions... qui veut les lire toutes...
Pour (je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !)
cela se produit la plupart du temps si vous essayez de modifier la transaction avec les paramètres qu'elle a déjà.
C'est tellement gratifiant une fois que tu as trouvé la solution ! Merci aussi pour votre contribution !
La dernière chose sur laquelle je suis bloqué est de dire à la boucle d'arrêter de diviser par deux l'ordre ouvert au prix de sortie de OrderClose(), continuellement ? Honnêtement, je n'arrive pas à comprendre la logique ? Il est parfait avec le QUAND et le QUEL prix pour la fermeture partielle. J'ai juste besoin de lui dire de s'arrêter UNE FOIS qu'il a divisé l'ordre en deux une fois ?
Le problème est qu'une fois que l'OrderClose() a fermé la moitié de la position ouverte, il sera appelé encore et encore parce que le "int start" appelle "CloseHalfOrder()" chaque fois qu'il y a un "OP_BUY" ouvert... Une idée ?
incroyable 1 2 3 4 5 6 7 8 9 10 11 12
quel énorme sujet c'est
Fermer des demi-lots.
j'espère que vous pouvez expliquer à quelqu'un d'autre comment faire le moment que vous connaissez
101 questions... qui veut les lire toutes...
Pour (je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !)
cela se produit la plupart du temps si vous essayez de modifier la transaction avec les paramètres qu'elle a déjà.
Mate je serai plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste un dernier morceau, et puis ça marche à la menthe ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).
Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?
Merci aussi pour le conseil concernant l'erreur 1 de OrderModify :)
Je serais plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste une dernière partie, et puis ça marche à merveille ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).
Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?
Merci pour le conseil concernant l'erreur 1 de OrderModify également :)
Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... si OrderLots() >= ........
Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... if OrderLots() >= ........
Pour cette raison ? Cela n'a pas d'importance si je me déplace d'abord au seuil de rentabilité... Le premier obstacle est cette partie que je ne comprends pas ? Même si j'arrive d'abord à l'équilibre, puis que je ferme la moitié de la position, cela va appeler TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?
A cause de ça ? Ça n'a pas d'importance si je bouge pour atteindre le seuil de rentabilité d'abord... Le premier obstacle est cette partie que je ne comprends pas ? Même si je me déplace d'abord jusqu'à l'équilibre, puis que je ferme la moitié, cela appellera TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?