Похоже в Heighest or Lowest все таки косяк

 
1. индикатор появляется на графике только при первом тике
2. при каждом тике абсолютно все меняется хотя в MT 3.xx этот же алгоритм не косячит

P.S. может я чтото не углядел

Пример
//+------------------------------------------------------------------+
//|                          The percentage indicator basis on break |
//|                                     of the dynamic price channel |
//|                                                 BDPC_Percent.mq4 |
//|                                 Copyright © 2004, OfficeFX Group |
//|                                            http://officefx.nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, OfficeFX Group"
#property link      "http://officefx.nm.ru"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow  // BUY signal
#property indicator_color2 Blue    // BUY signal
#property indicator_color3 Red     // SELL signal
//---- Indicator Buffers --------------------------------------------+
double DynamicLineTrend[]; //Data buffer for dynamic line trend
double BUYSignals[];       //Data buffer for BUY signals
double SELLSignals[];      //Data buffer for SELL signals
//---- User defines -------------------------------------------------+
extern int Percent=15;     // Percent dynamic channel
extern int MaxPeriod=50;   // Maximal period for calculate trend
//---- Variables ----------------------------------------------------+
int Shift=0;               // Current bar for calculate trend
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- Indicators ---------------------------------------------------+
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DynamicLineTrend);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,233);
   SetIndexBuffer(1,BUYSignals);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,234);
   SetIndexBuffer(2,SELLSignals);
//-------------------------------------------------------------------+
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {// Get digits of Symbol
   double Point=MarketInfo(Symbol(),MODE_POINT);
   // Set count bars for calculate trend
   int Counted_Bars=IndicatorCounted()-MaxPeriod;
//---- Calculation DynamicLineTrend ---------------------------------+
   for (Shift=Counted_Bars;Shift>=0;Shift--)
      {// Calculate of maximal period
      if (Close[Shift]<DynamicLineTrend[Shift+1])
         {//Calculate Upper trend
         DynamicLineTrend[Shift]=Close[Highest(NULL,0,MODE_CLOSE,
         MaxPeriod,Shift+1)]-Percent*Point;
         };
      if (Close[Shift]>=DynamicLineTrend[Shift+1])
         {// Calculate Down trend
         DynamicLineTrend[Shift]=Close[Lowest(NULL,0,MODE_CLOSE,
         MaxPeriod,Shift+1)]+Percent*Point;
         };    
      // Check crosses DynamicLineTrend and Price
      if (Close[Shift+3]>DynamicLineTrend[Shift+2])
         if (Close[Shift+2]<DynamicLineTrend[Shift+3])
            BUYSignals[Shift]=Low[Shift]-10*Point;
         else
            BUYSignals[Shift]=0;
      else
         BUYSignals[Shift]=0;
      if (Close[Shift+2]<DynamicLineTrend[Shift+1])
         if (Close[Shift+2]>DynamicLineTrend[Shift+3])
            SELLSignals[Shift]=High[Shift]-10*Point;
         else
            SELLSignals[Shift]=0;
      else
         SELLSignals[Shift]=0;   
      };
//-------------------------------------------------------------------+
   return(0);
  }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
и еще встречный вопрос

можно ли добавить AccountLeverage()?
будет легко рассчитывать возможные лоты!
 
первая проблема: IndicatorCounted() при первом запуске всегда 0. (ну и время от времени обнуляется, хотя и не должен в некоторых случаях). поэтому заголовок цикла должен звучать примерно так
   for (Shift=Bars-Counted_Bars;Shift>=0;Shift--)


вторая проблема: Highest и Lowest могут возвращать значение -1. поэтому код надо несколько модифицировать.

         index=Highest(NULL,0,MODE_CLOSE,MaxPeriod,Shift+1);
         if(index>=0) DynamicLineTrend[Shift]=Close[index]-Percent*Point;


третья (возможная) проблема: Highest и Lowest считаются несколько иначе, чем в тройке. например Highest(NULL,0,MODE_CLOSE,10,10) будет искать во втором десятке баров (10 баров, начиная с 10-го), в отличие от тройки, где аналогичный текст означал поиск в первом десятке (начиная с 10-го бара назад 10 баров)

 
Спасибо!
Причина обращения: