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
La fonction IndexByTicket().
Renvoie l'index (numéro ordinal dans la liste générale des ordres fixés ou des positions ouvertes) de l'ordre ou de la position sur le ticket. Si IndexByTicket() ne trouve pas d'ordre ou de position avec le ticket requis, il renvoie -1. Nous pouvons limiter la liste des ordres ou des positions à vérifier à l'aide des paramètres de la fonction :
J'ai écrit la fonction IndexByTicket() dans un EA personnalisé. Je me souviens que je ne pouvais pas m'en passer, sinon pourquoi l'aurais-je écrit ? Mais je ne me souviens plus comment il était utilisé là-bas ni pourquoi je l'ai pratiquement écrit :-) Rechercher le code source du conseiller est ennuyeux. Il y en a des centaines.
De toute façon, je ne vois pas l'intérêt de donner des exemples comme ceux que j'ai déjà donnés. Si nous sommes intelligents, nous pouvons trouver où "mettre" les paramètres. Et si quelqu'un a une bonne idée d'utilisation de la fonction IndexByTicket(), postez-la ici. Je vais essayer de le réaliser.
Une courte annonce.
Fonctions SelectByTicket() et SelectByTicketFromHistory() I supprimées. Je ne les utiliserai pas moi-même, donc je ne vois pas l'intérêt de les publier. Ceux qui souhaitent discuter de ce sujet sont toujours les bienvenus. Je vais montrer tous mes délires tels quels.
La fonction NumberOfOrders().
Cette fonction renvoie le nombre de commandes et remplace complètement la fonction ExistOrders(). Pour remplacer la fonction ExistOrders() par la fonction NumberOfOrders(), il est nécessaire et suffisant de vérifier la valeur de retour pour qu'elle soit supérieure à zéro. Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :
Exemples d'utilisation de la fonction NumberOfOrders().
Vous trouverez ci-joint un autre script qui fonctionne avec les exemples ci-dessus.
La fonction NumberOfOrders().
Cette fonction renvoie le nombre de commandes et remplace complètement la fonction ExistOrders(). Pour remplacer la fonction ExistOrders() par la fonction NumberOfOrders(), il est nécessaire et suffisant de vérifier la valeur de retour pour qu'elle soit supérieure à zéro. Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :
Je suis un peu confus. Pour une raison quelconque, je vois une contradiction. Juste ici :
"...il est nécessaire et suffisant de vérifier que la valeur de retour est supérieure à zéro."
Si vous cochez "ceci et seulement ceci", alors la fonction sur le nombre de commandes n'a aucun sens !
C'est pourquoi j'ai commencé à m'y intéresser. J'ai inséré cette fonction dans mon conseiller expert. J'ai défini m=1 dans les paramètres et la condition pour ouvrir des positions.
Mais c'est comme si le conseiller expert ne voyait pas cette limitation ! Et il ouvre des ordres à chaque signal.
Quel peut être le problème ici ?
Je suis un peu confus. Pour une raison quelconque, je vois une certaine contradiction. Juste ici :
"...il est nécessaire et suffisant de vérifier que la valeur de retour est supérieure à zéro".
Si nous vérifions "ceci et seulement ceci", alors la fonction pour le nombre de commandes n'a pas de sens !
hmm... Vous ne semblez pas prêter attention à la quantité d'informations renvoyées par chacune des fonctions ExistOrders() et NumberOfOrders(). La fonction ExistOrders() ne renvoie que des informations sur l'existence des ordres, et la fonction NumberOfOrders() renvoie des informations sur le nombre d'ordres. L'information sur le nombre d'ordres contient l'information sur l'existence d'ordres. Lorsque nous devons répondre à la question de savoir si une commande existe ou non, l'information sur le nombre de commandes est redondante. C'est pourquoi j'ai dit que si nous voulons remplacer la fonction ExistOrders() par la fonction NumberOfOrders(), nous devons vérifier la valeur renvoyée par la fonction NumberOfOrders() pour nous assurer qu'elle est supérieure à zéro. En effet, il est clair que si cette valeur est égale à zéro, il n'y a pas d'ordres, et que si cette valeur est supérieure à zéro, les ordres sont présents. La fonction ExistOrders() peut être utilisée lorsque nous n'avons pas besoin d'informations sur la quantité de la commande, tandis que la fonction NumberOfOrders() peut être utilisée lorsque nous n'avons pas besoin d'informations sur la quantité de la commande et lorsque nous en avons besoin. En ce sens, la fonction NumberOfOrders() remplace complètement la fonction ExistOrders().
Voici pourquoi j'ai commencé à m'y intéresser. J'ai inséré cette fonction dans mon conseiller expert. J'ai défini m=1 dans les paramètres et la condition pour ouvrir des positions.
Mais c'est comme si le conseiller expert ne voyait pas cette contrainte ! Et il ouvre des ordres à chaque signal.
Quel peut être le problème ici ?
Merci. J'ai tout. Tant sur la première question que sur la seconde.
En d'autres termes, la fonction "étendue" NumberOfOrders() comprend déjà essentiellement la fonction IndexByTicket() .
Oui, en effet. J'ai ouvert OP_BUY et OP_SELL !
Il reste à donner un exemple de votre prochaine fonction qui fonctionne exactement avec les positions. (pas avec les commandes).
Je me souviens que vous l'avez déjà posté quelque part sur ce forum. Je n'arrive pas à le trouver.
Il reste à donner un exemple de votre prochaine fonction qui fonctionne exactement avec les positions. (pas avec les commandes)
J'en ai fini avec les fonctions pour les commandes. Viennent ensuite les fonctions des postes. Il y en a une trentaine.
Je me souviens que quelque part sur le forum vous l'avez déjà posté. Je ne le trouve pas.
recherche
Cher Igor, je te demande de m'aider ! J'ai besoin d'ajouter un EA pour qu'il puisse prendre des positions sur plusieurs instruments. Il y a 2 EAs qui fonctionnent, MACD standard et Ema, chacun avec 6 positions, mais une seule position s'ouvre... J'ai lu vos commentaires à ce sujet, mais comme je ne maîtrise pas la langue, je n'arrive pas à comprendre où ajouter quoi... Si vous le voulez bien, aidez-nous... a copié le conseiller Ema... Merci !
//+------------------------------------------------------------------+//| Parabolic.mq4 |
//| Vitalik |
//| wwwita@mail.ru |
//+------------------------------------------------------------------+
extern double Lots=0.1 ;
extern double Pip=5 ;
extern double MoveBack=3 ;
extern int chk=0 ;
extern double SL=20 ;
//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
int start()
{
double hi=High[1] ;
double lo=Low[1] ;
double EMA, EMA1, EMA2, EMA3 ;
int cnt=0, ticket, total ;
EMA=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,1) ;
EMA1=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,1) ;
EMA2=iMA(0;0;5;0;MODE_EMA;PRICE_MEDIAN;0) ;
EMA3=iMA(0;0;10;0;MODE_EMA;PRICE_MEDIAN;0) ;
total=OrdersTotal() ;
if(total<1)
{
if(AccountFreeMargin()<(1000*Lots))
{
Print("Vous n'avez pas d'argent. Fonds libres = ", AccountFreeMargin()) ;
return(0) ;
}
si((EMA>EMA1) && (EMA2<EMA3)) || ((EMA<EMA1) && (EMA2>EMA3))
{
chk=1 ;
Print("La position est possible !") ;
}
if(chk==1)
{
if(EMA3-EMA2>2*Point && Bid>=(lo+MoveBack*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,
"Position EMA :",16385,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
chk=0 ;
}
else
{
Print("Error opening SELL order : ",GetLastError()) ;
return(0) ;
}
}
if(EMA2-EMA3>2*Point && Ask<=(hi-MoveBack*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,
"Position EMA :",16385,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
chk=0 ;
}
else
{
Print("Order BUY open error : ",GetLastError()) ;
return(0) ;
}
}
}
return(0) ;
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;
if(OrderType()<=OP_SELL && // est-ce une position ouverte? OP_BUY ou OP_SELL
OrderSymbol()==Symbol()) // correspondance des outils ?
{
if(OrderType()==OP_BUY) // position longue ouverte
{
// vérifions s'il est déjà temps de fermer ?
if(Bid>=(OrderOpenPrice()+Pip*Point))
{
chk=0 ;
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // clôture de la position
return(0) ; // exit
}
if(Bid<=(OrderOpenPrice()-SL*Point)))
{
chk=0 ;
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // clôture de la position
return(0) ; // exit
}
}
else // sinon, il s'agit d'une position courte
{
// vérifier s'il est déjà temps de clôturer ?
if(Ask<=(OrderOpenPrice()-Pip*Point))
{
chk=0 ;
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // clôture de la position
return(0) ; // exit
}
if(Ask>=(OrderOpenPrice()+SL*Point))
{
chk=0 ;
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // fermer la position
return(0) ; // sortir
}
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
Igor, je vous ai posé une question dans la "Bibliothèque de fonctions pour travailler avec les fichiers INI", mais vous n'avez pas répondu :(