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
Bonjour !
Pour corriger l'indicateur, il fallait remplacer tous les points "." par un "" vide.
Salutations.
J'ai modifié le type de sélection descommandes dans la fonction écrite de certains comptages de commandes, de la sélection par commande à la sélection par ticket.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Ensuite, lors de l'exécution de quelques dizaines de bougies, tout fonctionne correctement et après cela, il y a des erreurs répétées dans le journal :
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1 : ticket inconnu 2 pour la fonction OrderModify
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1 : OrderModify error 4108 // Numéro de ticket invalide.
Voici le texte complet, je l'ai modifié dans les quatre fonctions :
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
Et là, il y a un moment - après avoir changé la fonction de sélection, la fonction de modification de l'ordre a commencé à générer une erreur et seulement après un certain temps detest, au début tout était normal.
Pourquoi cela se produit-il et comment y faire face ?
Salutations.
J'ai modifié le type de sélection descommandes dans la fonction écrite de certains comptages de commandes, de la sélection par commande à la sélection par ticket.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Ensuite, lors de l'exécution de quelques dizaines de bougies, tout fonctionne correctement et après cela, il y a des erreurs répétées dans le journal :
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1 : ticket inconnu 2 pour la fonction OrderModify
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1 : OrderModify error 4108 // Numéro de ticket invalide.
Voici le texte complet, je l'ai modifié dans les quatre fonctions :
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
Et là, il y a un moment - après avoir changé la fonction de sélection, la fonction de modification de l'ordre a commencé à générer une erreur et seulement après un certain temps detest, au début tout était normal.
Pourquoi cela se produit-il et comment y faire face ?
Vous obtenez probablement cette erreur parce que vous essayez de modifier un ordre en attente qui a déjà été déclenché ou supprimé. Vous devez réinitialiser les variables où le ticket en attente est stocké, par exemple, lorsque l'ordre en attente a été déclenché.
Bonjour à tous, aidez-moi à comprendre ce qui ne va pas.
mon Expert Advisor ouvre ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green) ;
for(int prev=0 ; prev<OrdersTotal();prev++) //Contrôle de l'opération EA précédente
{
ViborOrdera=OrderSelect(prev,SELECT_BY_POS) ;
si(OrderSymbol()==Symbol())
//*************************************
//-------Vérifier le cycle d'achat--------
if(OrderType()==OP_BUY && OrderMagicNumber()==1111)
{
PriceAsk=OrderOpenPrice();//prix d'ouverture, nécessaire pour la suite du travail de l'EA.
}
question, où est l'erreur, il n'y a pas de contrôle ? Le corps de la boucle est dans l'Inite.
Pas le temps de faire le tri..........
Essayez de lire et de placer aux bons endroits.
boolRefreshRates() ;
Bonjour à tous, aidez-moi à comprendre ce qui ne va pas.
mon Expert Advisor ouvre ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green) ;
Question, où est l'erreur, il n'y a pas de contrôle ? Le corps de la boucle est en Inite.
Pas le temps de faire le tri..........
Essayez de lire et de placer aux bons endroits.
boolRefreshRates() ;
Et prouver que c'est le cycle qui ne rentre pas. D'ailleurs, pourquoi devrions-nous vérifier TOUTES les commandes depuis le tout début de la vie du compte si nous avons besoin des dernières ?
Preuve : Print("Previous PriceAsk-",PriceAsk) ; le journal est vide.
D'ailleurs, pourquoi devrais-je vérifier TOUTES les commandes depuis le début de la vie du compte, si j'ai besoin des dernières ? - Comment faire autrement, s'il y a 10 paires de devises ouvertes ?
Tout allait bien jusqu'à ce que nous changions ViborOrdera=OrderSelect(prev,SELECT_BY_POS) dans MQL ;
Il s'agissait auparavant deOrderSelect(prev,SELECT_BY_POS) ;. C'était il y a longtemps), mais ça a marché.