2017-07-18 5 views
0

J'essaie d'écrire un EA qui va placer un achat, lorsque l'indicateur personnalisé montre une flèche {vendre ou acheter}. Pour ce faire, j'utilise un iCustom(), mais j'ai du mal à comparer les valeurs.Tampon iCustom() - comment obtenir des valeurs à partir des tampons d'indicateur personnalisé dans MT4?

Voici mon code:

void OnTick() 
 
    { 
 
//--- 
 
     double sell=iCustom(NULL,0,"fx30",0,0); 
 
     double buy=iCustom(NULL,0,"fx30",1,0); 
 
     
 
     if(sell>0)//sell 
 
     { 
 
     //check if buy trade is running 
 
     //close a buy trade 
 
     //open a sell trade on success 
 
     if(buyTicket>0) 
 
      { 
 
      bool ret=OrderClose(buyTicket, lot, Bid, slipage,clrBlue); 
 
      if(ret==true) 
 
       { 
 
       printf("the sell number is: "+sell); 
 
       sellTicket=OrderSend(Symbol(),OP_SELL,lot,Bid,slipage,NULL,NULL,"MATHUNYA SELL",magic,0,clrRed); 
 
       } 
 
      } 
 
     else 
 
     { 
 
      //we dont have a buy trade open 
 
      //place a sell trade 
 
      //only one trade should be open 
 
      if(sellTicket>0) 
 
      { 
 
      printf("sell order already running"); 
 
      } 
 
      else 
 
      { 
 
      printf("the sell number is: "+sell); 
 
      sellTicket=OrderSend(Symbol(),OP_SELL,lot,Bid,slipage,NULL,NULL,"MATHUNYA SELL",magic,0,clrRed); 
 
      }  
 
     }    
 
     } 
 
     else{ 
 
     Print("buy: "+buy+", sell: "+sell+" Time: "+TimeToStr(Time[1])); 
 
     printf("awaiting sell order.."); 
 
     } 
 
     
 
     if(buy>0)//buy 
 
     { 
 
     //check if sell trade is running 
 
     //close a sell trade 
 
     //open a buy trade on success 
 
     if(sellTicket>0) 
 
      { 
 
      bool ret=OrderClose(sellTicket, lot, Ask, slipage,clrYellow); 
 
      if(ret==true) 
 
       { 
 
       printf("the buy number is: "+buy); 
 
       buyTicket=OrderSend(Symbol(),OP_BUY,lot,Ask,slipage,NULL,NULL,"MATHUNYA BUY",magic,0,clrGreen); 
 
       } 
 
      } 
 
     else 
 
     { 
 
      //we dont have a sell trade open 
 
      //place a buy trade 
 
      //only one trade should be open 
 
      if(buyTicket>0) 
 
      { 
 
      printf("buy order already running"); 
 
      } 
 
      else 
 
      { 
 
       printf("the buy number is: "+buy); 
 
       buyTicket=OrderSend(Symbol(),OP_BUY,lot,Ask,slipage,NULL,NULL,"MATHUNYA BUY",magic,0,clrGreen); 
 
      }  
 
     }   
 
     }else 
 
     { 
 
     Print("buy: "+buy+", sell: "+sell+" Time: "+TimeToStr(Time[1])); 
 
     printf("awaiting buy order.."); 
 
     } 
 
     
 
    } 
 
//+------------------------------------------------------------------+

// global variables 

int buyTicket = 0; 
int sellTicket = 0; 
double lot  = 0.01; 
int slipage = 3; 
int magic  = 321; 

Répondre

0

que voulez-vous dire en comparant les valeurs? comme je peux le voir, vous comparez seulement sell>0 et buy>0. Mon conseil: immédiatement en dessous de cette comparaison ajouter ligne
Print(__LINE__," indicator value = "+DoubleToStr(sell,Digits)); et même avec buy. Il est probable, mais bien sûr nous n'avons pas de boule de cristal ici, que votre indicateur renvoie la valeur (par exemple 100 ou 1.16000) sur un tampon, et EMPTY_VALUE sur un autre. EMPTY_VALUE est 2^31-1 dans mql4 donc il est plus grand que zéro. si vous voyez que la valeur de l'indicateur est 2147483648.00000 ou quelque chose comme ça, - vous devez remplacer sell > 0 par sell != EMPTY_VALUE ou combiner.