tol64: Pouvez-vous nous dire s'il est possible de déterminer par programme la possibilité de fixer un stop loss/stake profit immédiatement à l'ouverture d'une position/ordre en attente ou après ?
Vérifiez au préalable les niveaux d'arrêt et de profit.
Les identificateurs de requête utilisés dans la fonction MarketInfo(). Peut être l'une des valeurs suivantes :
Constant .
Valeur
Description
MODE_LOW
1
Prix minimum quotidien
MODE_HIGH
2
Prix maximum quotidien
MODE_TIME
5
Heure de la dernière citation
MODE_BID
9
Dernier prix de l'offre reçu. Pour l'instrument actuel, il est stocké dans la variable prédéfinie Bid.
MODE_ASK
10
Dernier prix demandé reçu. Est stocké dans la variable prédéfinie Demander pour le symbole actuel
MODE_POINT
11
Taille du point dans la devise du devis. Stocké dans la variable prédéfinie Point pour le symbole actuel
MODE_DIGITS
12
Nombre de chiffres après la virgule dans le prix de l'instrument. Stocké dans la variable prédéfinie Chiffres pour le symbole actuel
MODE_SPREAD
13
Spread en pips
MODE_STOPLEVEL
14
Niveau minimum autorisé de Stop Loss/Stake Profit en pips
MODE_LOTSIZE
15
Taille du contrat dans la devise de base de l'instrument
MODE_TICKVALUE
16
Taille minimale de changement du prix de l'instrument dans la monnaie de dépôt.
MODE_TICKSIZE
17
Pas minimum de la variation du prix de l'instrument dans la devise de cotation
MODE_SWAPLONG
18
Taille du swap pour les positions longues
MODE_SWAPSHORT
19
Taille du swap pour les positions courtes
MODE_DÉMARRAGE
20
Date de début du calendrier (généralement utilisée pour les contrats à terme)
MODE_EXPIRATION
21
Date d'expiration (normalement utilisée pour les contrats à terme)
MODE_TRADE AUTORISÉ
22
Autorisation de négocier l'instrument spécifié
MODE_MINLOT
23
Taille minimale du lot
MODE_LOTSTEP
24
Étape de la modification de la taille du lot
MODE_MAXLOT
25
Taille maximale du lot
MODE_SWAPTYPE
26
Méthode de calcul des swaps. 0 - en points ; 1 - en monnaie de base de l'instrument ; 2 - en pourcentages ; 3 - en monnaie de marge.
MODE_PROFITCALCMODE
27
Mode de calcul des bénéfices. 0 - Forex ; 1 - CFD ; 2 - Futures
MODE_MARGINALCMODE
28
Mode de calcul de la marge. 0 - Forex ; 1 - CFD ; 2 - Futures ; 3 - Indices CFD
MODE_MARGININIT
29
Marge initiale requise pour 1 lot
MODE_MARGINMAINTENANCE
30
Montant de la marge requise pour soutenir les positions ouvertes par 1 lot
MODE_MARGINHED
31
Marge facturée sur les positions chevauchées par 1 lot
MODE_MARGINREQUIRED
32
Montant des fonds libres, requis pour ouvrir un lot à l'achat.
MODE_FREEZELEVEL
33
Niveau de gel des commandes en points. Si le prix d'exécution se situe dans les limites définies par le niveau de gel, l'ordre ne peut être modifié, annulé ou clôturé.
Je suis en train d'apprendre à écrire un EA, comme beaucoup de mes premiers EAs sur des indicateurs standards, je viens d'en écrire un nouveau, mais maintenant je me suis compliqué la tâche. En général, comment faire, que dans l'émergence des conditions a ouvert une position et à sa fermeture, disons, pour prendre les mêmes conditions, une nouvelle n'a pas ouvert, et ouvert que lorsque les conditions opposées, etc. Merci ! !!
il existe un exemple prêt à l'emploi dans l'aide
int i,accTotal=OrdersHistoryTotal() ; for(i=0;i<accTotal;i++) { //---- vérifier le résultat de la sélection if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError(),")) ; break ;
} Nous devons nous souvenir de l'heure de clôture de l'ordre, comparer l'heure de clôture de l'ordre avec l'heure de clôture de l'itération précédente, si (l'heure de clôture est supérieure et le type d'opération commerciale est Achat ou Vente), alors nous devons nous souvenir de l'heure de l'ordre actuel et du type d'opération commerciale // en conséquence, à la fin du cycle, nous connaissons le type d'ordre qui a clôturé en dernier } Quelque chose comme ceci .
Vérifier au préalable les niveaux de réglage du stop et du profit .
Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
3.3 Si une position est ouverte via le terminal du client en utilisant un Expert Advisor, le client ne peut pas désigner d'ordre de Stop Loss et/ou de Take Profit. Si le client souhaite passer ces ordres, il peut le faire en modifiant une position existante conformément aux clauses 5.16 - 5.22 et 9.13 - 9.16.
Je me demande s'il est possible de vérifier cela de manière programmatique. Si je comprends bien, non. Vous devez d'abord écrire dans le programme une fonction d'ouverture des positions/de définition des ordres en attente, en tenant compte des conditions fixées par le courtier.
Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
J'aimerais savoir si cela peut être vérifié de manière programmatique. Si je comprends bien, non. Vous devez à l'origine écrire dans un programme une fonction d'ouverture de positions / de définition d'ordres en attente, en tenant compte des conditions fixées par le courtier.
Je ne comprends pas vraiment les règles de fixation des ordres, essayez de jouer avec la démo et voyez ce que vous pouvez et ne pouvez pas faire. D'après ce que j'ai compris, rien ne vous empêche de définir un ordre par programme et de le modifier ensuite. C'est vrai que c'est étrange, à moins que vous ne coupiez la connexion après avoir ouvert une position sans laisser de stop.
Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
J'aimerais savoir si cela peut être vérifié de manière programmatique. Si je comprends bien, non. Vous devez initialement écrire dans le programme une fonction permettant d'ouvrir des positions/de définir des ordres en attente, en tenant compte des conditions fixées par le courtier.
Il n'y a pas de problème du tout. Même (si ce n'est pas pour un usage personnel, parce que vous savez sur quels comptes (conditions de négociation et avec qui) l'utiliser), mais si vous envoyez l'EA à l'ordre et le client n'a pas encore décidé sur quels comptes et où il sera utilisé, même sur les types de comptes avec la possibilité de définir un take et stop immédiatement, puis par défaut produire l'EA avec des valeurs nulles de ces niveaux lors de l'établissement de tous les types d'ordres, puis avec leur modification (fonctionnera là et là), alors que, bien sûr, personne n'a annulé les exigences de contrôle et les restrictions à p.
Je ne comprends pas bien les règles d'établissement des ordres, essayez de jouer avec la démo, ce que vous pouvez et ce que vous ne pouvez pas. D'après ce que j'ai compris, rien ne vous empêche de définir un ordre par programme et de le modifier ensuite. C'est vrai que c'est étrange, à moins que vous ne coupiez la connexion après avoir ouvert une position sans laisser de stop.
))) Non. Vous vous méprenez complètement. Je n'ai pas parlé de "définir par programme", j'ai parlé de "définir par programme". Sur certains types de comptes, il n'est pas possible d'ouvririmmédiatementune position et de définir des arrêts/stops, ce qui serait préférable/sûr pour moi. Sur mql5, si je ne me trompe pas, il semble être possible de le déterminer. J'aimerais pouvoir le déterminer et, en fonction de la définition, choisir la fonction à utiliser.
Il n'y a pas de problème du tout. Même (si ce n'est pas pour un usage personnel, parce que vous savez sur quels comptes (conditions de trading et avec qui) l'utiliser), mais si vous faites une EA pour commander et que le client n'a pas encore décidé sur quels comptes et où il va l'utiliser, même sur des types de comptes avec la possibilité de définir une prise et un arrêt immédiat, alors vous faites quand même une EA avec des valeurs nulles de ces niveaux par défaut lors de la définition de tous les types d'ordres, puis avec leur modification (fonctionnera là et là), alors que, bien sûr, personne n'a annulé les exigences de contrôle et les restrictions à la p.
Oui, il n'y a pas de problème quand il y a une solution. Vous devez juste utiliser ce que vous avez et l'utiliser correctement).
Roman. et ivandurak merci beaucoup pour vos réponses, mais j'ai encore du mal à comprendre. J'ai trouvé une suggestion sur un autre forum sur la façon de faire cela, mais jusqu'à présent je ne peux pas l'appliquer à mon code habituel.
int BuyTrue, SellTrue;// Définir les variables qui serviront de drapeaux. .... //--- Condition d'achat if (BuyTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position { .... OrderSend(....) ; //fonction d'ouverture d'un ordre BuyTrue=1 ; // Si BuyTrue=1, la condition d'ouverture de la position ne sera pas entièrement satisfaite. // par conséquent, lors d'un signal d'achat répété, une transaction ne sera pas ouverte. SellTrue=0 ; // A SellTrue=0, la condition d'ouverture de la position sera entièrement satisfaite. // donc la prochaine transaction sera Vendre seulement .... }
//--- Condition de vente if (SellTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position { .... OrderSend(....) ; //fonction d'ouverture d'un ordre SellTrue=1 ; // Si SellTrue=1, la condition d'ouverture de l'ordre ne sera pas entièrement satisfaite. // donc, à un deuxième signal de vente, une position ne sera pas ouverte. BuyTrue=0 ; // A BuyTrue=0, la condition d'ouverture de la position sera entièrement satisfaite. // par conséquent, la prochaine transaction sera uniquement un achat. .... }
Mon code pour ouvrir une position
total=OrdersTotal() ; si(total<1) { // aucun ordre ouvert identifié si(AccountFreeMargin()<(1000*Lots)) { Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin() ; retour(0) ; } // vérification de la position longue (BUY) if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,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()) ; retour(0) ; } // vérification de la position courte (SELL) if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ; si(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) } else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ; retour(0) ; } retour(0) ; }
Roman. et ivandurak: merci beaucoup pour vos réponses, mais j'ai encore du mal à comprendre. J'ai trouvé une suggestion sur un autre forum sur la façon de faire cela, mais jusqu'à présent je ne peux pas l'appliquer à mon code habituel.
int BuyTrue, SellTrue;// Définir les variables qui serviront de drapeaux décrits ci-dessus. .... //--- Condition d'achat if (BuyTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position { .... OrderSend(....) ; //fonction d'ouverture d'un ordre BuyTrue=1 ; // Si BuyTrue=1, la condition d'ouverture de la position ne sera pas entièrement satisfaite. // par conséquent, lors d'un signal d'achat répété, une position ne sera pas ouverte. SellTrue=0 ; // A SellTrue=0, la condition d'ouverture de la position sera entièrement satisfaite. // donc la prochaine transaction sera Vendre seulement .... }
//--- Condition de vente if (SellTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position { .... OrderSend(....) ; //fonction d'ouverture d'un ordre SellTrue=1 ; // Si SellTrue=1, la condition d'ouverture de l'ordre ne sera pas entièrement satisfaite. // donc, lors d'un signal de vente répété, une position ne sera pas ouverte. BuyTrue=0 ; // A BuyTrue=0 la condition d'ouverture de position sera entièrement satisfaite // par conséquent, la prochaine transaction sera uniquement un achat. .... }
Mon code pour ouvrir un marché.
total=OrdersTotal() ; si(total<1) { // aucun ordre ouvert identifié si(AccountFreeMargin()<(1000*Lots)) { Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin() ; retour(0) ; } // vérification de la position longue (BUY) if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,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()) ; retour(0) ; } // vérification de la position courte (SELL) if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ; si(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) } else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ; retour(0) ; } retour(0) ; }
Tout d'abord, collez votre code dans l'éditeur via Ctrl+Alt+M (ou appuyez sur SRC en haut du menu), sinon c'est mauvais, ce qui est clair - tout se mélange en un seul...:-))
Deuxièmement, lisez le tutoriel, en particulier les informations sur le lien que je vous ai recommandé, sous le code se trouve sa description et à la toute fin de la description est précisément décrite - comment signaler une fois un prix au-dessus/au-dessous de la MA (vous aurez une analogie avec une entrée unique à une condition de trading donnée - l'utilisation de drapeaux et tout), avant de travailler votre assistant ... :-)))))
P.S. ou recherche google : Comment insérer correctement un code site:mql4.com
Pouvez-vous nous dire s'il est possible de déterminer par programme la possibilité de fixer un stop loss/stake profit immédiatement à l'ouverture d'une position/ordre en attente ou après ?
Vérifiez au préalable les niveaux d'arrêt et de profit.
Les identificateurs de requête utilisés dans la fonction MarketInfo(). Peut être l'une des valeurs suivantes :
Je suis en train d'apprendre à écrire un EA, comme beaucoup de mes premiers EAs sur des indicateurs standards, je viens d'en écrire un nouveau, mais maintenant je me suis compliqué la tâche. En général, comment faire, que dans l'émergence des conditions a ouvert une position et à sa fermeture, disons, pour prendre les mêmes conditions, une nouvelle n'a pas ouvert, et ouvert que lorsque les conditions opposées, etc. Merci ! !!
il existe un exemple prêt à l'emploi dans l'aide
int i,accTotal=OrdersHistoryTotal() ; for(i=0;i<accTotal;i++) { //---- vérifier le résultat de la sélection if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError(),")) ; break ; } Nous devons nous souvenir de l'heure de clôture de l'ordre, comparer l'heure de clôture de l'ordre avec l'heure de clôture de l'itération précédente, si (l'heure de clôture est supérieure et le type d'opération commerciale est Achat ou Vente), alors nous devons nous souvenir de l'heure de l'ordre actuel et du type d'opération commerciale // en conséquence, à la fin du cycle, nous connaissons le type d'ordre qui a clôturé en dernier } Quelque chose comme ceci .Vérifier au préalable les niveaux de réglage du stop et du profit .
Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
3.3 Si une position est ouverte via le terminal du client en utilisant un Expert Advisor, le client ne peut pas désigner d'ordre de Stop Loss et/ou de Take Profit. Si le client souhaite passer ces ordres, il peut le faire en modifiant une position existante conformément aux clauses 5.16 - 5.22 et 9.13 - 9.16.
J'aimerais savoir si cela peut être vérifié de manière programmatique. Si je comprends bien, non. Vous devez à l'origine écrire dans un programme une fonction d'ouverture de positions / de définition d'ordres en attente, en tenant compte des conditions fixées par le courtier.Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
Je ne comprends pas vraiment les règles de fixation des ordres, essayez de jouer avec la démo et voyez ce que vous pouvez et ne pouvez pas faire. D'après ce que j'ai compris, rien ne vous empêche de définir un ordre par programme et de le modifier ensuite. C'est vrai que c'est étrange, à moins que vous ne coupiez la connexion après avoir ouvert une position sans laisser de stop.
J'aimerais savoir si cela peut être vérifié de manière programmatique. Si je comprends bien, non. Vous devez initialement écrire dans le programme une fonction permettant d'ouvrir des positions/de définir des ordres en attente, en tenant compte des conditions fixées par le courtier.Il n'y a pas de contrôle dans cette liste pour certains types de comptes. Voici un paragraphe du Règlement des opérations de trading pour les comptes NDD :
Il n'y a pas de problème du tout. Même (si ce n'est pas pour un usage personnel, parce que vous savez sur quels comptes (conditions de négociation et avec qui) l'utiliser), mais si vous envoyez l'EA à l'ordre et le client n'a pas encore décidé sur quels comptes et où il sera utilisé, même sur les types de comptes avec la possibilité de définir un take et stop immédiatement, puis par défaut produire l'EA avec des valeurs nulles de ces niveaux lors de l'établissement de tous les types d'ordres, puis avec leur modification (fonctionnera là et là), alors que, bien sûr, personne n'a annulé les exigences de contrôle et les restrictions à p.
Je ne comprends pas bien les règles d'établissement des ordres, essayez de jouer avec la démo, ce que vous pouvez et ce que vous ne pouvez pas. D'après ce que j'ai compris, rien ne vous empêche de définir un ordre par programme et de le modifier ensuite. C'est vrai que c'est étrange, à moins que vous ne coupiez la connexion après avoir ouvert une position sans laisser de stop.
))) Non. Vous vous méprenez complètement. Je n'ai pas parlé de "définir par programme", j'ai parlé de "définir par programme". Sur certains types de comptes, il n'est pas possible d'ouvrir immédiatement une position et de définir des arrêts/stops, ce qui serait préférable/sûr pour moi. Sur mql5, si je ne me trompe pas, il semble être possible de le déterminer. J'aimerais pouvoir le déterminer et, en fonction de la définition, choisir la fonction à utiliser.
Il n'y a pas de problème du tout. Même (si ce n'est pas pour un usage personnel, parce que vous savez sur quels comptes (conditions de trading et avec qui) l'utiliser), mais si vous faites une EA pour commander et que le client n'a pas encore décidé sur quels comptes et où il va l'utiliser, même sur des types de comptes avec la possibilité de définir une prise et un arrêt immédiat, alors vous faites quand même une EA avec des valeurs nulles de ces niveaux par défaut lors de la définition de tous les types d'ordres, puis avec leur modification (fonctionnera là et là), alors que, bien sûr, personne n'a annulé les exigences de contrôle et les restrictions à la p.
Oui, il n'y a pas de problème quand il y a une solution. Vous devez juste utiliser ce que vous avez et l'utiliser correctement).
Roman. et ivandurak merci beaucoup pour vos réponses, mais j'ai encore du mal à comprendre. J'ai trouvé une suggestion sur un autre forum sur la façon de faire cela, mais jusqu'à présent je ne peux pas l'appliquer à mon code habituel.
int BuyTrue, SellTrue;// Définir les variables qui serviront de drapeaux.
....
//--- Condition d'achat
if (BuyTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position
{
....
OrderSend(....) ; //fonction d'ouverture d'un ordre
BuyTrue=1 ; // Si BuyTrue=1, la condition d'ouverture de la position ne sera pas entièrement satisfaite.
// par conséquent, lors d'un signal d'achat répété, une transaction ne sera pas ouverte.
SellTrue=0 ; // A SellTrue=0, la condition d'ouverture de la position sera entièrement satisfaite.
// donc la prochaine transaction sera Vendre seulement
....
}
//--- Condition de vente
if (SellTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position
{
....
OrderSend(....) ; //fonction d'ouverture d'un ordre
SellTrue=1 ; // Si SellTrue=1, la condition d'ouverture de l'ordre ne sera pas entièrement satisfaite.
// donc, à un deuxième signal de vente, une position ne sera pas ouverte.
BuyTrue=0 ; // A BuyTrue=0, la condition d'ouverture de la position sera entièrement satisfaite.
// par conséquent, la prochaine transaction sera uniquement un achat.
....
}
Mon code pour ouvrir une position
total=OrdersTotal() ;
si(total<1)
{
// aucun ordre ouvert identifié
si(AccountFreeMargin()<(1000*Lots))
{
Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin() ;
retour(0) ;
}
// vérification de la position longue (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,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()) ;
retour(0) ;
}
// vérification de la position courte (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice())
}
else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
retour(0) ;
}
retour(0) ;
}
Roman. et ivandurak: merci beaucoup pour vos réponses, mais j'ai encore du mal à comprendre. J'ai trouvé une suggestion sur un autre forum sur la façon de faire cela, mais jusqu'à présent je ne peux pas l'appliquer à mon code habituel.
int BuyTrue, SellTrue;// Définir les variables qui serviront de drapeaux décrits ci-dessus.
....
//--- Condition d'achat
if (BuyTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position
{
....
OrderSend(....) ; //fonction d'ouverture d'un ordre
BuyTrue=1 ; // Si BuyTrue=1, la condition d'ouverture de la position ne sera pas entièrement satisfaite.
// par conséquent, lors d'un signal d'achat répété, une position ne sera pas ouverte.
SellTrue=0 ; // A SellTrue=0, la condition d'ouverture de la position sera entièrement satisfaite.
// donc la prochaine transaction sera Vendre seulement
....
}
//--- Condition de vente
if (SellTrue==0 && ... plus vos autres conditions) //condition d'ouverture de position
{
....
OrderSend(....) ; //fonction d'ouverture d'un ordre
SellTrue=1 ; // Si SellTrue=1, la condition d'ouverture de l'ordre ne sera pas entièrement satisfaite.
// donc, lors d'un signal de vente répété, une position ne sera pas ouverte.
BuyTrue=0 ; // A BuyTrue=0 la condition d'ouverture de position sera entièrement satisfaite
// par conséquent, la prochaine transaction sera uniquement un achat.
....
}
Mon code pour ouvrir un marché.
total=OrdersTotal() ;
si(total<1)
{
// aucun ordre ouvert identifié
si(AccountFreeMargin()<(1000*Lots))
{
Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin() ;
retour(0) ;
}
// vérification de la position longue (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,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()) ;
retour(0) ;
}
// vérification de la position courte (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ;
si(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice())
}
else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;
retour(0) ;
}
retour(0) ;
}
Tout d'abord, collez votre code dans l'éditeur via Ctrl+Alt+M (ou appuyez sur SRC en haut du menu), sinon c'est mauvais, ce qui est clair - tout se mélange en un seul...:-))
Deuxièmement, lisez le tutoriel, en particulier les informations sur le lien que je vous ai recommandé, sous le code se trouve sa description et à la toute fin de la description est précisément décrite - comment signaler une fois un prix au-dessus/au-dessous de la MA (vous aurez une analogie avec une entrée unique à une condition de trading donnée - l'utilisation de drapeaux et tout), avant de travailler votre assistant ... :-)))))
P.S. ou recherche google : Comment insérer correctement un code site:mql4.com