J'ai inséré un ticket et des lots dans l'OrderClose sans utiliser OrderTicket() et OrderLots() mais l'ordre n'est pas fermé. Veuillez m'aider.
Il y a plusieurs choses que vous avez mal faites. Je suppose que vous voulez que cet EA fonctionne sur les paires JPY sur le cadre temporel M1. Voulez-vous placer des ordres sur la nouvelle barre uniquement et fermer les ordres sur la nouvelle barre uniquement ou voulez-vous entrer sur la nouvelle barre et sortir si les conditions sont remplies ? Voici ce que je pense :
D'abord vous comptez les ordres avec OrdersTotal().
Ensuite, vous calculez vos variables
S'il y a des ordres sur le marché , vérifiez s'ils doivent être fermés.
S'il n'y a pas d'ordres sur le marché, vérifiez si les conditions d'entrée sont remplies.
N'hésitez pas à me contacter si vous avez des questions.
//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
double bar1;
double bar2;
double bar3;
int total,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
total=OrdersTotal();
/*
counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
IndicatorCounted() is actually for indicators not EA
*/
bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
/*
Comment("Bar1 = "+DoubleToString(bar1,Digits)+"\n"+
"Bar2 = "+DoubleToString(bar2,Digits)+"\n"+
"Bar3 = "+DoubleToString(bar3,Digits)+"\n"
);
*///Close any orders if conditions are metif(total>0)
{
if(bar3<-1) OrderClose(ticket,OrderLots(),Bid,3,Green);
if(bar3>1) OrderClose(ticket,OrderLots(),Ask,3,Red);
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(total<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//+------------------------------------------------------------------+
oui, il peut être fermé maintenant. merci GumRai. maintenant je sais que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
chuale: oui, il peut être fermé maintenant. merci GumRai. maintenant je sais que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Si vous utilisez OrderTicket(), assurez-vous d'abord d'utiliser OrderSelect() et assurez-vous également que c'est bien la transaction que vous voulez fermer.
chuale: Je sais maintenant que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Salut Chuale,
Voici un moyen facile de sélectionner vos ordres et de clôturer vos ordres par symbole et par numéro magique :
//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
externint MagicNumber = 12345;
externint Slip = 3;
double bar1;
double bar2;
double bar3;
int myTrades,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
myTrades = CountTrades();//Count trades function counts this EA trades only//
bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
//Close any orders if conditions are metif(myTrades>0)
{
if(bar3<-1) CloseThisSymbolAll();
if(bar3>1) CloseThisSymbolAll();
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(myTrades<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//========================================================================int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
if(OrderType()==OP_SELL || OrderType()==OP_BUY)
count++;
}
return(count);
}
//========================================================================void CloseThisSymbolAll()
{
int trade;
for(trade=OrdersTotal();trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
}
//Sleep(1000);
}
}
//========================================================================
chuale: oui, il peut fermer maintenant. merci GumRai. maintenant je sais que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Rebonjour Chuale,
J'ai joué avec votre idée sur USDJPY et je n'ai pas pu obtenir de résultats positifs sans quelques changements.Voici un échantillon de mes résultats sur USDJPY sur le graphique M1 :
Avez-vous l'intention de l'utiliser sur une autre paire ?
Exit sur bar3 < -1 ou bar3 > 1 n'a pas donné de résultats positifs.
vérifiez correctement les transactions que vous avez
recherchez le bon symbole et le bon numéro magique
avec une boucle d'ordre, vous pouvez alors sélectionner le bon trade à clôturer.
.
avec votre méthode
vous perdez la valeur du ticket au moment où vous redémarrez votre pc donc
échoue .....
Si vous voulez dire que ce n'est pas la meilleure façon de fermer un ordre, je suis d'accord, mais si la personne ne veut pas utiliser OrderSelect (ou ne sait pas comment le faire) et ne laisse aucun ordre ouvert sur le marché, cela fonctionne.
Nous essayons de nous entraider ici et votre réponse ne l'a pas aidé du tout, vous ne lui avez pas montré comment utiliser la fonction Order Select et son EA ne fonctionne pas mieux maintenant à cause de votre commentaire.
La prochaine fois que vous voulez aider, faites-le de la bonne façon, mettez le bon code pour que les autres puissent apprendre quelque chose.
Il y a plusieurs choses que vous avez mal faites. Je suppose que vous voulez que cet EA fonctionne sur les paires JPY sur le cadre temporel M1. Voulez-vous placer des ordres sur la nouvelle barre uniquement et fermer les ordres sur la nouvelle barre uniquement ou voulez-vous entrer sur la nouvelle barre et sortir si les conditions sont remplies ? Voici ce que je pense :
Tout d'abord, vous comptez les commandes avec OrdersTotal().
Ensuite, vous calculez vos variables
S'il y a des ordres sur le marché, vérifiez s'ils doivent être fermés.
S'il n'y a pas d'ordres sur le marché, vérifiez si les conditions d'entrée sont remplies.
Bonjour à tous,
J'ai inséré un ticket et des lots dans l'OrderClose sans utiliser OrderTicket() et OrderLots() mais l'ordre n'est pas fermé. Veuillez m'aider.
Il y a plusieurs choses que vous avez mal faites. Je suppose que vous voulez que cet EA fonctionne sur les paires JPY sur le cadre temporel M1. Voulez-vous placer des ordres sur la nouvelle barre uniquement et fermer les ordres sur la nouvelle barre uniquement ou voulez-vous entrer sur la nouvelle barre et sortir si les conditions sont remplies ? Voici ce que je pense :
D'abord vous comptez les ordres avec OrdersTotal().
Ensuite, vous calculez vos variables
S'il y a des ordres sur le marché , vérifiez s'ils doivent être fermés.
S'il n'y a pas d'ordres sur le marché, vérifiez si les conditions d'entrée sont remplies.
N'hésitez pas à me contacter si vous avez des questions.
Le ticket est une variable locale, donc au prochain tic, il n'aura pas la même valeur.
Mis en dehors des fonctions pour le rendre Globalscope
total=OrdersTotal();? ????? ..... inutile
vérifiez correctement les transactions que vous avez
recherchez le bon symbole et le bon numéro magique
avec une boucle d'ordre, vous pouvez alors sélectionner le bon trade à clôturer.
.
avec votre méthode
vous perdez la valeur du ticket au moment où vous redémarrez votre pc donc
échoue .....
Pourquoi avez-vous cité mon message et n'avez-vous pas ajouté de commentaire ?
oui, il peut être fermé maintenant. merci GumRai. maintenant je sais que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Si vous utilisez OrderTicket(), assurez-vous d'abord d'utiliser OrderSelect() et assurez-vous également que c'est bien la transaction que vous voulez fermer.
Je sais maintenant que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Salut Chuale,
Voici un moyen facile de sélectionner vos ordres et de clôturer vos ordres par symbole et par numéro magique :
oui, il peut fermer maintenant. merci GumRai. maintenant je sais que le numéro de ticket change en fonction des ticks, alors comment obtenir le numéro de ticket de l'ordre ouvert ? Je dois utiliser OrderTicket(), n'est-ce pas ?
Rebonjour Chuale,
J'ai joué avec votre idée sur USDJPY et je n'ai pas pu obtenir de résultats positifs sans quelques changements.Voici un échantillon de mes résultats sur USDJPY sur le graphique M1 :
Avez-vous l'intention de l'utiliser sur une autre paire ?
Exit sur bar3 < -1 ou bar3 > 1 n'a pas donné de résultats positifs.
? ????? ..... inutile
vérifiez correctement les transactions que vous avez
recherchez le bon symbole et le bon numéro magique
avec une boucle d'ordre, vous pouvez alors sélectionner le bon trade à clôturer.
.
avec votre méthode
vous perdez la valeur du ticket au moment où vous redémarrez votre pc donc
échoue .....
Si vous voulez dire que ce n'est pas la meilleure façon de fermer un ordre, je suis d'accord, mais si la personne ne veut pas utiliser OrderSelect (ou ne sait pas comment le faire) et ne laisse aucun ordre ouvert sur le marché, cela fonctionne.
Nous essayons de nous entraider ici et votre réponse ne l'a pas aidé du tout, vous ne lui avez pas montré comment utiliser la fonction Order Select et son EA ne fonctionne pas mieux maintenant à cause de votre commentaire.
La prochaine fois que vous voulez aider, faites-le de la bonne façon, mettez le bon code pour que les autres puissent apprendre quelque chose.
Il y a plusieurs choses que vous avez mal faites. Je suppose que vous voulez que cet EA fonctionne sur les paires JPY sur le cadre temporel M1. Voulez-vous placer des ordres sur la nouvelle barre uniquement et fermer les ordres sur la nouvelle barre uniquement ou voulez-vous entrer sur la nouvelle barre et sortir si les conditions sont remplies ? Voici ce que je pense :
Tout d'abord, vous comptez les commandes avec OrdersTotal().
Ensuite, vous calculez vos variables
S'il y a des ordres sur le marché, vérifiez s'ils doivent être fermés.
S'il n'y a pas d'ordres sur le marché, vérifiez si les conditions d'entrée sont remplies.
Faites-moi savoir si vous avez des questions.