J'ai un problème dans le déroulement de mon programme.
Voici la partie du code (présent dans le OnTick) qui pose problème :
Code : #
if (magicNumber ==0) // L'EA vérifie si il n'y a pas déja un ordre ouvert par l'EA
{
if ((MMA96>MMA384) && (Open[1]<MMA5) && (Close[1]>MMA5)&& (Close[1]<=(Open[1]+0.0010))) // Vérification du déclencheur d'achat
{
ticket=OrderSend(Symbol(),OP_BUY,lot,priceA=Ask,3,stoplossA=Low[2],NULL,"Ordre d'achat",magicNumber=1234,0,clrGreen); // Achat
if(ticket<0) // Vérification d'erreur lors de l'achat
Print("Ordre non placé. Error code #",GetLastError());
else
Print("Ordre placé avec succès à : ",priceA);
}
if ((MMA96<MMA384) && (Open[1]>MMA5) &&(Close[1]<MMA5)&& (Close[1]>=(Open[1]-0.0010))) //Vérification du déclencheur de vente
{
ticket=OrderSend(Symbol(),OP_SELL,lot,priceV=Bid,3,stoplossV=High[2],NULL,"Ordre de vente",magicNumber=1234,0,clrRed); // Vente
if(ticket<0) // Vérification d'erreur lors de la vente
Print("Ordre non placé. Error code #",GetLastError());
else
Print("Ordre placé avec succès à : ",priceV);
}
}
else if (ticket2>0)
{
if(OrderSelect(ticket2, SELECT_BY_TICKET)==true) //Recherche d'une position ouverte avec stoploss modifié
{
if((OrderType()==0) && (Ask>coursAchat)) // Recherche d'une position d'achat en hausse
{
// Incrémentation du stoploss
bool res=OrderModify(ticket2=OrderTicket(),OrderOpenPrice(),stopSuiveurA=stopSuiveurA+(Ask-coursAchat),OrderTakeProfit(),0,Blue);
if(!res) // Vérification d'erreur
Print("Echec de la hausse du stoploss suiveur. Error code #",GetLastError());
else
Print("Hausse du stoplosssuiveur : ",stopSuiveurA);
}
if((OrderType()==1) && (Bid<coursVente)) // Recherche d'une position de vente en baisse
{
// Incrémentation du stoploss
bool res=OrderModify(ticket2=OrderTicket(),OrderOpenPrice(),stopSuiveurV=stopSuiveurV-(Bid+coursVente),OrderTakeProfit(),0,Blue);
if(!res) // Vérification d'erreur
Print("Echec de la hausse du stoploss suiveur. Error code #",GetLastError());
else
Print("Hausse du stoplosssuiveur : ",stopSuiveurV);
}
}
}
Toutes les variables sont bien déclarées et initialisées à 0 en début de programme.
Le premier "if" se lance donc car la variable "magicNumber" est bien égale à 0.
Le programme vérifie un déclencheur, ouvre un ordre si le déclencheur est ok, et il stock le numéro de ticket dans la variable "ticket" et créer un magicNumber qu'il stock dans la variable magicNumber. Si le déclencheur n'est pas bon, la suite du programme n'étant que des "else if" il lance ce "if" en boucle jusqu'à ouvrir une position.
Jusque la tout va bien, c'est ce que je veux
Une fois la position ouverte, "magicNumber" n'est plus égal à 0, il passe donc au "else if" suivant. La variable "ticket2" n'a pas été modifiée et est donc toujours égale à 0 (c'est la variable "ticket" qui a été modifiée)
Le "else if (ticket2>0)" ne devrait donc pas s'exécuter et le programme devrait passer au "else if" suivant.
Seulement en lisant le journal de l'expert, je vois que celui-ci a bien été exécuté et a abouti à une erreur (ça c'est normal car il n'était pas censé s'exécuté à ce moment la donc il lui manque des variables).
Alors peut être le problème est devant mon nez et je ne vois rien mais j'ai beau réfléchir je comprend pas pourquoi l'EA exécute ce "else if" si la condition n'est pas remplie...
Si quelqu'un pouvait éclairer ma lanterne