Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1069

 
CloseAllBuy() est appelée à un seul endroit : dans la fonction OnTick() par la condition if(Bid>buycloseprice) CloseAllBuy() ; cette condition n'est pas apparue lors de la nouvelle activation et n'est pas apparue non plus pendant la période de désactivation, mais la fonction CloseAllBuy() a quand même été déclenchée lorsque l'EA a été réactivé.
 
rapid_minus:
CloseAllBuy() est appelé à un seul endroit : dans la fonction OnTick() par la condition if(Bid>buycloseprice) CloseAllBuy() ; cette condition ne s'est pas produite lors de la nouvelle activation et ne s'est pas non plus produite pendant la période de désactivation, mais la fonction CloseAllBuy() a quand même été déclenchée lorsque l'EA a été réactivé.
Y aura-t-il un code ? Qu'est-ce que buycloseprice, d'où vient-il, avec quoi a-t-il été initialisé, où a-t-il été modifié, on ne le voit pas d'ici...
 
Voici un morceau de code :
 
Je n'arrive pas à voir si le SRC est inséré pour une raison quelconque. Si ce n'est pas le cas, faites-le moi savoir et je le répéterai dans le texte.
 
Question : . Veuillez m'indiquer comment appliquer une variable globale dansce cas précis. Je n'arrive pas à comprendre. Merci.
 
rapid_minus:
Voici un morceau de code :

n'est pas visible.

rapid_minus:
Question:pourriez-vous me dire comment appliquer une variable globale dans ce cas précis ? Je n'arrive pas à comprendre. Merci.

Lisez la documentationVariables globales du terminal, consultez l'aide du méta-éditeur, la mise à jour y est plus rapide.

Vous pouvez également enregistrer les paramètres et les valeurs des variables importantes dans un fichier et les lire à partir de celui-ci lors du chargement.

Mais la plupart du temps, vous pouvez vous passer de tout cela, il suffit d'utiliser votre tête et de faire la bonne logique dans le code.

 
Répétition avec le texte :RefreshRates() ;
total=OrdersTotal() ;
if(total>0)
{
for(int i=0 ; i<=OrdersTotal() ; i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates() ;
if(Bid>buycloseprice) CloseAllBuy() ;
}

if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates() ;
if(Ask<sellcloseprice) CloseAllSell() ;
}
}
}

if((total==0) || (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol() !=Symbol())
{
Comment("Aucune position ouverte") ;

if(condition && timeBar !=iTime(Symbol(),Period(),1))
{
Print("Le critère-1 pour BAY est apparu") ;
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue) ;
Sleep(1000) ;
RefreshRates() ;
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue) ;
Sleep(1000) ;
RefreshRates() ;
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue) ;
Sleep(1000) ;
RefreshRates() ;
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue) ;
Sleep(1000) ;
RefreshRates() ;
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue) ;
timeBar=iTime(Symbol(),Period(),1) ;
double spread = (Ask-Bid) ;
buyopentime = iTime(Symbol(),Period(),0) ;
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits) ;
Comment("Magic 510015 BAY") ;
Print("CLOSE PRICE = ",buycloseprice) ;
}
}

}

//+------------------------------------------------------------------+*/
void CloseAllBuy()
{
bool fc ;
for (int i=OrdersTotal()-1 ; i>=0 ; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if (OrderType()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip) ;
buycloseprice=0.0 ;
tc=OrderCloseTime() ;
}
}
}
 
Alors où est-ce que je fais une erreur dans mon code ?
 
rapid_minus:
Répétition dans le texte :

On ne sait toujours pas d'où vient le buycloseprice, ce qui lui arrive avant la conditionif(Bid>buycloseprice) CloseAllBuy() ;. Parce que je vois seulement ceci dans le code, après - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits) ;, mais où cebuycloseprice est déclaré et quelle valeur est initialisée ?


S'il s'agit du prix de clôture supposé d'un ordre d'achat, alors la logique s'effondre ici car la valeur est transmise à la variable après son déclenchement et vous ne nous avez pas montré ce qu'elle contenait auparavant.

Maintenant un peu d'arithmétique, il y a une telle boucle dans le code :

for(int i=0 ; i<=OrdersTotal() ; i++)

Disons qu'il y a 5 commandes allant de 0 à 4. La boucle compte de 0 à 5. Cette boucle fonctionne-t-elle correctement ?

De même, dans la ligne if(condition && timeBar!=iTime(Symbol(),Period(),1)), d'où viennent la condition et la timeBar?

 
Je pense avoir compris - l'erreur est que j'ai défini le global buycloseprice et lui ai immédiatement donné une valeur de 0.0. Et bien qu'ensuite elle prenne une valeur spécifique lors de l'ouverture d'une position, cette valeur est perdue lors de l'extinction du terminal et prend la valeur d'origine lors de l'allumage, c'est-à-dire 0.0, et respectivement la condition if(Bid>buycloseprice) est respectée et la commande de fermeture. Mais comment transférer cette variable au terminal global, je ne comprends pas.
Raison: