Помогите найти ошибку в индикаторе

 
Индикатор несложный, показывет расстояние в пипсах от хайест хай до лоуест лоу за N баров.

#property indicator_separate_window
#property indicator_buffers 2 
 
#property indicator_color1 DarkKhaki
#property indicator_color2 DarkKhaki
 
#property indicator_level1 30
#property indicator_level2 100
//#property indicator_level3 0
//#property indicator_width1 2
#property indicator_minimum 0
#property indicator_maximum 200
 
 
//extern int PointsH=15;
//extern int Points=10;
extern int Bar=10;
 
//---- buffers
double Buffer1[];
double Buffer2[];
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,Buffer1);
   SetIndexLabel(0,"EWO");
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(1,Buffer2);
   SetIndexLabel(0,"EWO");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   double MA5,MA35;
//---- TODO: add your code here
   for(int i=Bars;i>=0;i--){
      MA5=High[Highest("USDCHF",PERIOD_M15,MODE_HIGH,Bar,i)];
      MA35=Low[Lowest("USDCHF",PERIOD_M15,MODE_LOW,Bar,i)];
      
      Buffer1[i]=(MA5-MA35)*10000;
      //Buffer2[i]=MA35;
      }
//----
   return(0);
  }
Вся проблема в том, что га чифе он работает правильно - на других парах показывает не пойму что
например на чифе показал 27 пипсов за последние 12 баров, на евро : - 5 пипсов.
Он же должен на любой паре показать одно и тоже, т.е. считать только с чифа М15 и отобразить.

Вообще хочу сделать такие вычисления для нескольких пар только в одном индикаторе,
может у кого то есть что то похожее.
 
ram25:

Вся проблема в том, что га чифе он работает правильно - на других парах показывает не пойму что
например на чифе показал 27 пипсов за последние 12 баров, на евро : - 5 пипсов.
Он же должен на любой паре показать одно и тоже, т.е. считать только с чифа М15 и отобразить.

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Возвращает индекс найденного наибольшего значения (смещение относительно текущего бара).

double iHigh( string symbol, int timeframe, int shift)
Возвращает значение максимальной цены указанного параметром shift бара с соответствующего графика (symbol, timeframe).

Попробуй подумать в сторону приведённых функций...
 
Думал, результат тот же

Тут проблема в другом, на чифе показывает все почти корректно, на ене вообще не пойму откуда значения берутся.
  Хотя обращение идет строго к чифу  М15
 
ram25:
Думал, результат тот же

Тут проблема в другом, на чифе показывает все почти корректно, на ене вообще не пойму откуда значения берутся.
Хотя обращение идет строго к чифу М15

Ошибка в том, что поиск максимума выполняется корректно, а вот сам бар по этому индексу выбирается не правильно. Массивы High[] и Low[] всегда будут содержать цены текущей пары. Вам нужно, как уже правильно подметили, использовать функции iHigh() и iLow() с указанием символа и таймфрейма аналогично тому, как вы делаете это для iHighest/iLow().
 
ram25:

Да, но я ищу хайест хай и лоуест лоу, а не просто хай и лоу


1. Вам всё-таки просто нужно спокойно подумать над определением функций, которые я вам указал. Почитайте их несколько раз ОЧЕНЬ МЕДЛЕННО.

2. Функции Lowest и Highest являются устаревшими функциями.
Старое название Новое название
Lowest iLowest
 
ram25:
в примере в справке в эдиторе так
val=High[iHighest(NULL,0,MODE_HIGH,20,4)];
зачем тут High не понятно, если уже указано MODE_HIGH

Очень жаль, что вы не читаете того, что вам тут отвечают :) Функция iHighest() возвращает индекс бара. Чтобы получить соответствующее значение используется массив High[] с полученным индексом.

Однако в вашем случае это работать не будет, по причинам, которые я вам объяснял ранее.

Вместо того, что вы используете:

MA5=High[Highest("USDCHF",PERIOD_M15,MODE_HIGH,Bar,i)];
вы должны использовать функции iHigh() и iHighest() вот так:

MA5 = iHigh( "USDCHF", PERIOD_M15, iHighest( "USDCHF", PERIOD_M15, MODE_HIGH, Bar, i ) );
Причина обращения: