как добавить код индикатора в код expertadvisor? - страница 3

 
Я хочу добавить некоторый фильтр в мою ea, что мне нужно сделать?
 

Привет, у меня тут проблемы... ~~

Я хочу сделать новую еа с индикатором rvi,

но, похоже, у меня большая ошибка.

Я даже заглянул на эту страницу https://www.mql5.com/en/articles/1456,

но проблема осталась.

Вот код, который я делаю.

Кто-нибудь может помочь мне сделать эту простую еа?

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+
 

Вы НЕ можете использовать буферы индикаторов или другие функции индикаторов, такие как IndicatorCounted(), в советнике. Создайте индикатор, получите доступ к буферам индикаторов из советника с помощью iCustom. Вы также можете просто использовать функцию iRVI, которую предлагает mql4. ...

init() - для кода, который вы хотите запустить один раз при запуске советника, deinit() - для кода, который вы хотите запустить один раз при закрытии советника. ... start() - для кода, который вы хотите запускать на каждом тике. ...

 

как узнать самый высокий и самый низкий уровень свечи любого таймфламе ...

 
как определить самый низкий бар или самый высокий бар?
 
как определить ExtDepth и shift на 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)];

как указано выше, я хочу определить a=высшая цена свечи

и b = самая низкая цена свечи

пытаюсь добавить индикатор зигзаг в мой советник.

но все равно переменная не определяется.

Как исправить эту ошибку?

 
Почитайте эту тему:https: //www.mql5.com/en/forum/139051/page2#623895 Принципы одни и те же.
 
albert_lim83:

как указано выше, я хочу определить a=высшая цена свечи

и b = самая низкая цена свечи

пытаюсь добавить индикатор зигзаг в мой советник.

но все равно переменная не определена.

Как исправить эту ошибку?

Объявили ли вы ZigZagHigh, ZigZagLow и ExtDepth?

iHighest и iLowest возвращают номер бара, который является самым высоким/самым низким ... они рассматривают бары, начинающиеся со сдвига и просматривая бары ExDepth ....

 

наконец-то решил проблему с переменными,

теперь только

( - неожиданное определение функции

) - несбалансированная правая скобка...

это левая скобка ( и ) в моем коде?

Причина обращения: