[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 10
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
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
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