comment ajouter le code de l'indicateur dans le code du conseiller-expert ? - page 3

 
Je souhaite ajouter un filtre à mon ea, que dois-je faire ?
 

Bonjour, j'ai quelques problèmes ici... ~~

je souhaite faire une nouvelle ea avec l'indicateur rvi,

mais il semble que j'ai fait une grosse erreur.

J'ai même regardé cette page https://www.mql5.com/en/articles/1456,

mais j'ai toujours un problème.

Voici le code que je fais.

quelqu'un peut s'il vous plaît me donner un coup de main pour faire cette ea facile ? ??

//+------------------------------------------------------------------+
//|                                                       RVI EA.mq4 |
//|                                             Copyright 2012, Abu. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Abu."
#property link      "http://www.metaquotes.net"

//--- input parameters
extern double    TakeProfit=100.0;
extern double    StopLoss=100.0;
extern int       TotalOrder=10;
extern double    FixedLotSize=0.1;
extern double    FlexibleLotSize=0.1;
extern double    RVIPeriod=5;
//---- indicator buffers
double     ExtRVIBuffer[];
double     ExtRVISignalBuffer[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if(AccountFreeMargin()<200)        //----
   {
   Print("Margin is lesser than 200");   //----
   return(0);
   for (int i=100; i<TotalOrder(); i++) {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
   if (OrderSymbol()==Symbol()) {
   return(True);
   }
   } 
   } 
   return(false);
   }

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   int i,j,nLimit,CountedBars;
   double dValueUp,dValueDown,dNum,dDeNum;
//----
   if(Bars<=RVIPeriod+8) return(0);
//----
   CountedBars=IndicatorCounted();
//---- check for possible errors
   if(CountedBars<0) return(-1);
//---- last counted bar will be recounted
   Limit=Bars-RVIPeriod-4;
   if(CountedBars>RVIPeriod+4)
      Limit=Bars-CountedBars;
//---- RVI counted in the 1-st buffer
   for(int i = limit); i >= 1; i--
     {
      dNum=0.0; 
      dDeNum=0.0;
   for(int j=i; j<i+RVIPeriod; j++)
        {
         dValueUp=((Close[j]-Open[j])+2*(Close[j+1]-Open[j+1])+2*(Close[j+2]-Open[j+2])+(Close[j+3]-Open[j+3]))/6;
         dValueDown=((High[j]-Low[j])+2*(High[j+1]-Low[j+1])+2*(High[j+2]-Low[j+2])+(High[j+3]-Low[j+3]))/6;
         dNum+=dValueUp;
         dDeNum+=dValueDown;
        }
      if(dDeNum!=0.0)
         ExtRVIBuffer[i]=dNum/dDeNum;
      else
         ExtRVIBuffer[i]=dNum;   
     }

//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
   int start()
    {
      if ((i<j));
      {
         OpenSell();
         return(0);
      }
      else 
      
      if ((j<i));
      {
         OpenBuy();
         return(0);
      }
      else  
 //----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Vous ne pouvez PAS utiliser les tampons d'indicateurs ou d'autres fonctions d'indicateurs telles que IndicatorCounted() dans un EA. Créez un Indicateur, accédez aux tampons des Indicateurs depuis votre EA en utilisant iCustom. Vous pouvez aussi simplement utiliser la fonction iRVI que mql4 propose ....

init() est pour le code que vous voulez exécuter une fois quand votre EA démarre, deinit() est pour le code que vous voulez exécuter une fois quand votre EA est fermée . . . start() est pour le code que vous voulez exécuter à chaque tick . . .

 

comment connaître le plus haut et le plus bas de la bougie de n'importe quel timeflame ...

 
comment définir la barre la plus basse ou la barre la plus haute ?
 
comment définir ExtDepth et shift sur ea ?
 
   int a, b;
   double zag, zig; b=0; while(a<2) {
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, b);
   if(zig>0) a+=1;
   b++;
   ZigZagHigh=iCustom(NULL,0,"ZigZag",MODE_HIGH,0);
   ZigZagLow=iCustom(NULL,0,"ZigZag",MODE_LOW,0);    
   double LowestBar=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
   double HighestBar=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];

comme ci-dessus, je souhaite définir a= prix le plus élevé de la bougie

et b= prix le plus bas de la bougie

J'essaie d'ajouter l'indicateur zigzag dans mon EA.

mais la variable n'est toujours pas définie.

comment corriger ces erreurs ?

 
Lisez ce fil de discussion: https://www.mql5.com/en/forum/139051/page2#623895 les principes sont les mêmes.
 
albert_lim83:

comme ci-dessus, je souhaite définir a= prix le plus élevé de la bougie

et b= prix le plus bas de la bougie

J'essaie d'ajouter l'indicateur zigzag dans mon EA.

mais la variable n'est toujours pas définie.

Comment corriger ces erreurs ?

Avez-vous déclaré ZigZagHigh, ZigZagLow et ExtDepth ?

iHighest et iLowest renvoient le numéro de la barre qui est la plus haute/la plus basse... et ils regardent les barres qui commencent par shift et en regardant les barres ExDepth....

 

J'ai finalement résolu le problème de la variable,

maintenant il n'y a que

( - définition de fonction inattendue

) - parenthèse droite déséquilibrée...

est-ce que je dois mettre ( et ) dans mon code ??

Raison: