Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Oui, - je suppose que oui ! Merci, TheXpert !
Je vais essayer !
Je ne suis pas un expert. J'ai cette note sur cette fonction dans mon dossier "aide", en plus de tout ce qui est "normal" (je l'ai copiée ici aussi - je ne me souviens plus de quelle branche) : -.
Et la fonction OrderCloseBy est utilisée UNIQUEMENT pour fermer 2 ordres simultanément, à ce moment-là un spread est sauvegardé.
Nous devrions parcourir le terminal de façon programmatique, mémoriser tous les numéros d'ordres ouverts et leurs caractéristiques, sélectionner le numéro de l'ordre principal, le faire correspondre avec le contre-ordre souhaité (parmi ceux disponibles) et coller ce numéro.
// C'est-à-dire que, si je comprends bien, avec cette fonction vous ne pouvez fermer que deux positions de compteur, présélectionnées.
C'est tout ce qu'il y a à faire.
Ouais, eh bien...
C'est pour ça que ça s'appelle comme ça.
Permettez-moi de reformuler la question pour savoir s'il existe une différence économique entre les deux possibilités suivantes d'inversion de position :
1) Fermer SELL avec 1 lot de volume en utilisant la fonction OrderClose et ensuite ouvrir BUY avec 1 lot de volume.
2) Alors que la position VENTE est ouverte dans un lot, ouvrez d'abord la position ACHAT dans deux lots, puis fermez la position VENTE avec la fonction OrderCloseBy, ce qui laissera également une position ACHAT ouverte dans un lot.
Selon l'exemple du cahier d'exercices, il restera un écart dans la variante 2).
https://book.mql4.com/ru/trading/orderclose - vous pouvez voir ici comment fonctionne la fonction OrderCloseBy(). J'ai essayé de faire la même chose sur la démo - l'écart est vraiment plus faible. Mais il ne fonctionne toujours pas sur Expert Advisor... Je suis vraiment confus...
Vous avez été dans deux fils de discussion avec cette question. Vous êtes curieux.
Il n'y a pas de solutions simples. Avec la sortie de MQL5, ce problème va complètement disparaître.
Je peux vous suggérer quelques procédures que j'utilise dans mes EA.
//Détecter l'état actuel des commandes en cours :
void CheckOrders()
{
int i ;
BuyOrder = false ;
SellOrder = false ;
BuyLots = 0.0 ;
SellLots = 0,0 ;
for ( i=0 ; i < OrdersTotal() ; i++)
{
OrderSelect(i, SELECT_BY_POS) ;
si ( OrderSymbol() == Symbol())
{
si ( OrderType() == OP_BUY )
{
BuyOrder = true ;
LastBuyLots = OrderLots() ;
BuyLots += LastBuyLots ; // somme des positions d'achat ouvertes
BuyTicket = OrderTicket() ;
}
si ( OrderType() == OP_SELL)
{
SellOrder = true ;
LastSellLots = OrderLots() ;
SellLots += LastSellLots ; // somme des positions de vente ouvertes
SellTicket = OrderTicket() ;
}
}
}
}
//Ouvrir (fermer) les ordres :
void TradeVariant( int variant )
{
switch( variante )
{
// si (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1 ;
// signal de vente, aucun ordre n'est ouvert et ce n'est pas la dernière heure du vendredi.
// ouvrir un ordre de vente
cas 1 :
OpenSellOrder(Lots) ;
pause ;
// si (Pattern < 0 && BuyOrder && !SellOrder && !FridayLastHour) variant = 2 ;
// signal de vente, il y a un ordre d'achat ouvert, pas d'ordre de vente.
// ce n'est pas la dernière heure du vendredi - nous nous retournons
cas 2 :
OpenSellOrder(Lots + BuyLots) ;
pause ;
// si (Pattern < 0 && BuyOrder && !SellOrder && FridayLastHour) variant = 3 ;
// signal de vente, il y a un ordre d'achat ouvert, pas d'ordre de vente.
// c'est la dernière heure du vendredi - fermez l'ordre d'achat.
cas 3 :
CloseBuyOrders() ;
pause ;
// si (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4 ;
// signal d'achat, aucun ordre n'est ouvert et ce n'est pas la dernière heure du vendredi.
// ouvrir un ordre d'achat
cas 4 :
OpenBuyOrder(Lots) ;
pause ;
// si (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5 ;
// signal d'achat, il y a un ordre de vente ouvert, pas d'ordre d'achat.
// ce n'est pas la dernière heure du vendredi - nous nous retournons
cas 5 :
OpenBuyOrder(Lots + SellLots) ;
pause ;
// si (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6 ;
// signal d'achat, il y a un ordre de vente ouvert, pas d'ordre d'achat.
// c'est la dernière heure du vendredi - fermez l'ordre de vente.
cas 6 :
CloseSellOrders() ;
pause ;
cas 7 :
// if (SellOrder && BuyOrder) variant = 7 ;
// ont un ordre croisé ouvert
if (WaitBeforeTransaction(WaitSeconds) == 1) // pause entre les demandes
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket) ;
else
OrderCloseBy( SellTicket, BuyTicket) ;
}
break
// dans les autres variantes, ne rien faire
par défaut :
pause ;
}
}
J'espère que vous vous débrouillerez avec les variables.
>> Bonne chance !