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
Terrance
Avez-vous vu cette section de TSD : Lessons?
Je pense que beaucoup de questions y ont déjà trouvé une réponse et que vous pouvez y trouver de très bons exemples pour l'écriture générale d'EA. Quant à votre question : je n'ai pas testé votre EA, donc je ne sais pas. Le problème lorsqu'on teste l'EA de quelqu'un d'autre, c'est qu'il faut en connaître l'idée et la logique et qu'il est souvent impossible de les "lire" dans le code lui-même. L'extrait de code dont nous parlions concernait la manière de détecter 2 croisements de moyennes sur une barre fermée et ce code ne fait que cela et rien d'autre. C'est pourquoi j'ai dit que "cela n'a rien à voir avec SL ou TP".
Salutations
MladenBonjour Mladen, désolé de vous déranger à nouveau. J'ai parcouru mes codes et j'ai remarqué que non seulement mon TP et SL, mais parfois même mes ordres d'achat et de vente ne sont pas corrects. J'ai parcouru les liens sur la leçon que vous m'avez donnée par codersgurus et c'est le même ensemble de tutoriels que j'avais et sur lequel j'ai basé mes codes. Je n'arrive vraiment pas à trouver la cause de mon erreur dans les codes.
Les croisements de la MA fonctionnent comme il se doit avec l'ordre Long et Short, mais parfois l'entrée et la sortie semblent se détraquer, même lorsque j'ai fait une fonction ASK de base pour la tester. Veuillez m'éclairer sur ce point.
Merci et salutations
Terrance
...
Terrance
Premièrement : Votre courtier est-il de type ECN/STP ? Si oui, alors vous ne pouvez pas placer un stop loss et un take profit lors de l'ouverture d'un ordre, mais vous devez d'abord ouvrir un ordre avec ceux-ci à 0 et ensuite utiliser OrderModify() pour placer un stop loss et/ou un take profit sur un ordre déjà ouvert.
Deuxièmement : Vérifiez toujours si quelque chose est écrit dans l'onglet des experts de la fenêtre du terminal (vérifiez si des erreurs y sont écrites : vous découvrirez probablement alors ce qui se passe et pourquoi).
Troisièmement : Ce serait une bonne idée de placer une ligne comme ceci :
Après chaque fonction de gestion des ordres. Les descriptions d'erreurs que vous pouvez trouver dans le fichier experts/include/stderror.mqh (il y a beaucoup d'erreurs qui peuvent se produire (voir la liste des codes d'erreurs possibles et leurs descriptions) avec les ordres et vous devez surveiller chaque erreur possible) Avec des codes d'erreurs connus (la ligne de code ci-dessus), vous pouvez vous concentrer sur la correction des erreurs spécifiques au lieu de deviner ce qui se passe.
Bonjour Mladen, désolé de vous déranger à nouveau. J'ai parcouru mes codes et j'ai remarqué que non seulement mes TP et SL, mais parfois même mes ordres d'achat et de vente ne sont pas corrects. J'ai parcouru les liens sur la leçon que vous m'avez donnée par codersgurus et c'est le même ensemble de tutoriels que j'avais et sur lequel j'ai basé mes codes. Je n'arrive vraiment pas à trouver la cause de mon erreur dans les codes.
Les croisements de la MA fonctionnent comme il se doit avec l'ordre Long et Short, mais parfois l'entrée et la sortie semblent se détraquer, même lorsque j'ai fait une fonction ASK de base pour la tester. Veuillez m'éclairer.
Merci et salutations
TerranceTerrance
Premièrement : Votre courtier est-il de type ECN/STP ? Si oui, vous ne pouvez pas placer un stop loss et un take profit lors de l'ouverture d'un ordre, mais vous devez d'abord ouvrir un ordre avec ceux-ci à 0 et ensuite utiliser OrderModify() pour placer un stop loss et/ou un take profit sur un ordre déjà ouvert.
Deuxièmement : Vérifiez toujours si quelque chose est écrit dans l'onglet des experts de la fenêtre du terminal (vérifiez si des erreurs y sont écrites : vous découvrirez probablement alors ce qui se passe et pourquoi).
Troisièmement : Ce serait une bonne idée de placer une ligne comme celle-ci :
Salut Mladen,
Merci de m'avoir signalé le truc ECN/STP. Je n'en savais rien jusqu'à ce que vous le mentionniez. J'ai fait les changements comme vous l'avez suggéré, mais maintenant ça ne fait qu'empirer pour moi. Non seulement le problème d'entrée et de sortie persiste, mais mon SL est maintenant absent. C'est plus difficile que je ne le pensais.
//--- paramètres d'entrée
extern double TakeProfit=1000.0 ;
extern double Lots=0.1 ;
extern double StopLoss=1500.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0 ;
static int maincurrent_dirction = 0 ;
if(mainline1>mainline2)maincurrent_dirction = 1 ; //main up
if(mainline1<mainline2)maincurrent_dirction = 2 ; //maintien vers le bas
if(maincurrent_dirction != mainlast_direction) //main changée
{
mainlast_dirction = maincurrent_dirction ;
return (mainlast_dirction) ;
}
else
{
return (0) ;
}
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma, mainshortEma, mainlongEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
int isCrossed = 0 ;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1) ;
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1) ;
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2) ;
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2) ;
double diff1 = shortEma1-longEma1 ;
double diff2 = shortEma2-longEma2 ;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0) ;
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0) ;
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma) ;
si ((diff1*diff2)<0)
{
si (shortEma1>longEma1)
isCrossed = 1 ;
sinon isCrossed = 2 ;
}
total = OrdersTotal() ;
si(total < 1)
{
si(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
si(OrderType()==OP_BUY) // une position longue est ouverte
{
OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet) ;
// fermeture de la position
return(0) ; // sortie
}
else // passe en position courte
{
OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet) ;
// fermer la position
return(0) ; // sortie
}
}
}
return(0) ;
}
//+------------------------------------------------------------------+
Terrance
Premièrement : Votre courtier est-il de type ECN/STP ? Si oui, vous ne pouvez pas placer un stop loss et un take profit lors de l'ouverture d'un ordre, mais vous devez d'abord ouvrir un ordre avec ceux-ci à 0 et ensuite utiliser OrderModify() pour placer un stop loss et/ou un take profit sur un ordre déjà ouvert.
Deuxièmement : Vérifiez toujours si quelque chose est écrit dans l'onglet des experts de la fenêtre du terminal (vérifiez si des erreurs y sont écrites : vous découvrirez probablement alors ce qui se passe et pourquoi).
Troisièmement : Ce pourrait être une bonne idée de placer une ligne comme celle-ci :
Hey Mladen, je voudrais te remercier pour ton aide ces derniers jours. J'ai réussi à trouver l'erreur dans mon code qui cause l'erreur d'entrée et de sortie.
Salutations
Terrance
Ouvrir plus d'une transaction
Bonjour à tous, J'ai essayé de faire en sorte que mon EA soit capable d'ouvrir plusieurs transactions, mais jusqu'à présent, je n'ai réussi à le limiter qu'à une seule transaction.
Mon objectif est simple :
Lorsque la LWMA 10 passe en dessous de la LWMA 20, le système sera short à condition que les LWMA 10 et 20 passent en dessous de la SMA 50 et vice versa pour les trades longs.
Je veux limiter mon EA à l'ouverture de deux transactions au maximum, mais lorsque je modifie les codes, il ouvre deux transactions à la fois au lieu d'une par critère.
Dois-je mettre en place un système de compteur ou autre ou comment puis-je configurer mon compteur pour qu'il réagisse lorsqu'un de mes trades a déjà un TP ou un SL ?
Quelqu'un peut-il m'éclairer sur ce qui ne va pas dans mes codes ?
Merci beaucoup et salutations
Terrance
//--- paramètres d'entrée
extern double TakeProfit=500.0 ;
extern double Lots=0.1 ;
extern double StopLoss=500.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma, mainshortEma, mainlongEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0) ;
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0) ;
int isCrossed = 0 ;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1) ;
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1) ;
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2) ;
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2) ;
double diff1 = shortEma1-longEma1 ;
double diff2 = shortEma2-longEma2 ;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0) ;
si ((diff1*diff2)<0)
{
si (shortEma1>longEma1)
isCrossed = 1 ;
sinon isCrossed = 2 ;
}
total = OrdersTotal() ;
si(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
return(0) ;
}
//+------------------------------------------------------------------+
Questions
Mladen,
J'essaie de chercher les leçons sous le lien que vous m'avez montré, mais ce sont des leçons génériques, je cherche des informations pour spécifiquement l'indicateur d'Henderson...
En outre, j'ai parcouru les fils de discussion affichés et après cela, je veux trouver les choses suivantes.
-Dans un langage simple et facile à comprendre, je veux demander est qu'environ après combien de barres passe, et la couleur change.
En d'autres termes, combien de barres au maximum faut-il avant que la couleur de la ligne passe du bleu au rose ? Malheureusement, je ne comprends pas les termes compliqués et j'apprécierais une réponse très simple qui me permettrait d'avancer et de lancer la stratégie. Tout graphique est le bienvenu . Mon adresse électronique est premalmunshaw@yahoo.com.
J'essaie de payer 39 $ pour que ce paquet soit activé.
J'ATTENDS UNE RÉPONSE POSITIVE !
Salutations,
Premal Munshaw
Franchement, je ne comprends pas ce que vous demandez.
Si vous demandez quand la couleur change, alors la réponse est : quand la pente change.
Si vous demandez comment il est codé pour changer de couleur, alors la réponse que vous devriez chercher dans cette section : Leçons....
Malheureusement, je ne comprends pas vos questions, donc tout ce que je vais faire, c'est me répéter (la longueur de calcul se réfère à la longueur de calcul du filtre d'Henderson) :
Il est impossible de répondre à une question plus simple que celle-là. Et il n'y a pas d'explication plus simple du calcul du filtre d'Henderson : ce serait comme si j'essayais d'expliquer la transformée de Fourier en termes de "1+1 = 2". Veuillez examiner les liens qui vous ont été fournis
Pour le reste : vous avez des liens vers les mathématiques derrière le filtre, vous avez des informations sur le nombre de barres recalculées, vous avez même des exemples tirés du fil d'actualité de la section élite. Quant à la stratégie utilisant ce filtre : j'ai dit 1000 fois dans des milliers de messages que les indicateurs de recalcul (SSA, filtre d'Henderson, TMA centrée, transformées de Fourier, analyse de régression, ...) ne doivent pas être utilisés en "mode signal" mais en "mode estimation". Si vous recherchez des signaux à partir du filtre d'Henderson, alors vous êtes sur une mauvaise piste et si c'est la seule raison pour laquelle vous envisagez de vous abonner à la section Elite, alors il vaut mieux que vous ne vous abonniez pas.
PS : c'est une mauvaise pratique de rendre votre email public. De cette façon, tout ce que vous obtiendrez sera une tonne de messages de spam dans votre boîte aux lettres électronique.
______________________________________
Je vous souhaite bonne chance dans votre recherche d'un système de trading.
Salutations
Mladen
Mladen,
J'essaie de chercher les leçons sous le lien que vous m'avez montré, mais ce sont des leçons génériques, je cherche des informations spécifiques pour l'indicateur d'Henderson...
De plus, j'ai parcouru les fils de discussion affichés et je veux trouver les choses suivantes.
-Dans un langage simple et facile à comprendre, je veux demander est qu'environ après combien de barres passe, et la couleur change.
En d'autres termes, combien de barres au maximum faut-il avant que la couleur de la ligne passe du bleu au rose ? Malheureusement, je ne comprends pas les termes compliqués et j'apprécierais une réponse très simple qui me permettrait d'avancer et de lancer la stratégie. Tout graphique est le bienvenu . Mon adresse électronique est premalmunshaw@yahoo.com.
J'essaie de payer 39 $ pour que ce paquet soit activé.
J'ATTENDS UNE RÉPONSE POSITIVE !
Merci,
Premal MunshawMladen,
Y a-t-il un moyen pour moi de définir un compteur pour ma transaction de telle sorte que lorsque ma transaction a un TP ou un SL, je puisse déclencher le saut du compteur ?
Salutations
Terrance
Bonjour à tous, j'ai essayé de faire en sorte que mon EA puisse ouvrir plusieurs transactions, mais jusqu'à présent, je n'ai réussi à le limiter qu'à une seule transaction.
Mon objectif est simple :
Lorsque la LWMA 10 passe sous la LWMA 20, le système sera court à condition que les LWMA 10 et 20 passent sous la SMA 50 et vice versa pour les trades longs.
Je veux limiter mon EA à l'ouverture de deux transactions au maximum, mais lorsque je modifie les codes, il ouvre deux transactions à la fois au lieu d'une par critère.
Dois-je mettre en place un système de compteur ou autre ou comment puis-je configurer mon compteur pour qu'il réagisse lorsqu'un de mes trades a déjà un TP ou un SL ?
Quelqu'un peut-il m'éclairer sur ce qui ne va pas dans mes codes ?
Merci beaucoup et salutations
Terrance
//--- paramètres d'entrée
extern double TakeProfit=500.0 ;
extern double Lots=0.1 ;
extern double StopLoss=500.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma, mainshortEma, mainlongEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0) ;
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0) ;
int isCrossed = 0 ;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1) ;
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1) ;
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2) ;
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2) ;
double diff1 = shortEma1-longEma1 ;
double diff2 = shortEma2-longEma2 ;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0) ;
si ((diff1*diff2)<0)
{
si (shortEma1>longEma1)
isCrossed = 1 ;
sinon isCrossed = 2 ;
}
total = OrdersTotal() ;
si(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;
}
else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
return(0) ;
}
//+------------------------------------------------------------------+...
Essayez cette fonction:
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);Mladen,
Existe-t-il un moyen pour moi de définir un compteur pour ma transaction de sorte que lorsque ma transaction a un TP ou un SL, je puisse déclencher le saut du compteur ?
Salutations
TerranceBonjour Mladen,
J'ai trouvé une autre solution en utilisant la fonction "Bars". Lorsqu'une transaction est déclenchée, je fixe un nombre entier avec la fonction bars (par exemple, une transaction d'achat est déclenchée à la barre 122, donc le nombre sera 122) et lorsque mon critère est à nouveau déclenché, j'appelle à nouveau la fonction bars et je la compare avec le nombre et la transaction ne sera déclenchée que si le nouveau nombre est supérieur au précédent, qui est 122 dans ce cas.
Cependant, je déclenche toujours 2 transactions ensemble au lieu d'une par critère. Pourquoi en est-il ainsi ?
Merci de m'aider.
Merci et salutations
Terrance
//--- paramètres d'entrée
extern double TakeProfit=530.0 ;
extern double Lots=0.1 ;
extern double StopLoss=520.0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation experte |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage expert |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total ;
double shortEma, longEma, mainshortEma, mainlongEma ;
if(Bars<100)
{
Print("barres inférieures à 100") ;
return(0) ;
}
if(TakeProfit<10)
{
Print("TakeProfit inférieur à 10") ;
return(0) ; // vérifier TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0) ;
longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0) ;
int isCrossed = 0 ;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1) ;
double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1) ;
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2) ;
double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2) ;
double diff1 = shortEma1-longEma1 ;
double diff2 = shortEma2-longEma2 ;
mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0) ;
si ((diff1*diff2)<0)
{
si (shortEma1>longEma1)
isCrossed = 1 ;
sinon isCrossed = 2 ;
}
int BarCounter, BarCounter2 ;
total = OrdersTotal() ;
si(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
BarCounter = Bars ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre SELL ouvert : ",OrderOpenPrice()) ;
BarCounter = Bars ;
}
else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
if(total == 1)
{
BarCounter2 = Bars ;
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;
BarCounter = BarCounter2 ;
}
else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;
return(0) ;
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"My EA",12345,0,Red) ;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Ordre SELL ouvert : ",OrderOpenPrice()) ;
BarCounter = BarCounter2 ;
}
else Print("Erreur lors de l'ouverture de l'ordre SELL : ",GetLastError()) ;
return(0) ;
}
return(0) ;
}
return(0) ;
}
Essayez cette fonction :
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);