{
if(OrdersTotal()==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}
}
C'est une solution mais ce n'est pas la meilleure solution comme vous l'apprendrez si vous continuez.
Mais elle peut vous aider pour le moment.
C'est une solution mais ce n'est pas la meilleure solution comme vous l'apprendrez si vous continuez.
Mais elle peut vous aider à ce stade.
oui il a résolu le problème dans le sujet, mais quand il se ferme il crée aussi un nouvel ordre, s'il est toujours au-dessus du nuage. Pouvez-vous m'aider à résoudre ce nouveau problème ?
Comment bloquer tous les nouveaux ordres après avoir réussi à fermer le premier ?
Vous pouvez créer un indicateur.
Puis vous pouvez mettre la valeur à un lorsque la commande est passée.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
order=1;
}
}
Mais vous serez averti que vous devez vérifier la valeur de retour de la fonction ordersend.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
int ticket=OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if(ticket!=-1)
{
order=1;
}
}
}
}
Pourquoi ne pas définir le drapeau en fonction de la réussite ou de l'échec de la commande ?
Dans ce cas, si votre ordre échoue, il continuera à essayer.
oui il a résolu le problème dans le sujet, mais quand il se ferme il crée aussi un nouvel ordre, s'il est toujours au-dessus du nuage. Pouvez-vous m'aider à résoudre ce nouveau problème ?
Comment bloquer tous les nouveaux ordres après avoir réussi à fermer le premier ?
Comme Marco y a déjà fait allusion, vous rencontrerez probablement d'autres problèmes.
Que faire s'il y a un ordre ouvert sur un autre symbole ?
Et s'il y a des ordres contrôlés par un autre EA ?
Et s'il y a des ordres en attente?
Et si le déclencheur est toujours actif lorsque vous fermez le premier ?
En réponse à cette dernière question, vous pourriez utiliser un drapeau comme l'a suggéré Marco. N'oubliez pas que vous devez décider quand réinitialiser le drapeau, sinon l'EA ne prendra plus jamais de position.
Vous pouvez aussi vérifier s'il y a un croisement ou un changement d'état entre le dessous/le nuage et le dessus du nuage.
j'ai mis votre code et dit que le ticket n'est pas déclaré, donc je l'ai déclaré, mais maintenant le code ouvre plusieurs commandes, comme avant, comment procéder maintenant ?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
j'ai mis votre code et dit que le ticket n'est pas déclaré, donc je l'ai déclaré, mais maintenant le code ouvre plusieurs commandes, comme avant, comment procéder maintenant ?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Cela vous aiderait probablement de lire sur la portée des variables.
Qu'arrive-t-il à la valeur de l'ordre à chaque tick ?
Ok, donc vous déclarez le ticket avec le drapeau booléen.
int ticket;
Et ensuite
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>0)
{
order=1;
}
}
}
}
Vous ne pouvez pas les déclarer dans OnTick() car leur valeur sera réinitialisée à chaque tick bien sûr.
Notez également que l'OrderSend renvoie soit le numéro du ticket, soit -1 moins un s'il échoue.
Je mets
bool order et
int ticket
sur des variables globales, et le reste du code sur OnTick, mais il n'y a toujours pas d'entrée maintenant.

- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Je suis nouveau dans mql4 et ce code ouvre des ordres multiples, comment puis-je l'éviter ? il devrait juste ouvrir 1 ordre jusqu'à ce qu'il se ferme,
Comment puis-je faire cela ?
Merci
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}