хелп с пересчетом последнего бара

 
помогите пли3,тормо3ит индикатор не умею редактором работать что где писать,чтоб всю историю не вычислял кол-во отобрахаемых баров ументшил,а тормоит всерано!!
//+------------------------------------------------------------------+
//|                                                     Trigger Line |
//|                             Copyright © 2005 dwt5 and adoleh2000 |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005 dwt5 and adoleh2000 "
#property  link      "http://www.metaquotes.net/"

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4           
#property indicator_color1 Red     
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Green

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

int width;

extern int Rperiod = 15;
extern int LSMA_Period = 5;
extern int Div = 3;
extern int Bar = 100;
int Draw4HowLong;
int shift;
int i;
int j;
int loopbegin;
int length;
int lsma_length;

double lengthvar;
double tmp ;
double tmp2 ;
double wt[];
double sum[];
double lsma_sum[];
double lsma_ma[];
double middle[];
int c;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 7 additional buffers are used for counting.
   IndicatorBuffers(7);  
  
//---- drawing settings
  
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
  
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_NONE);
  
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
  
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexStyle(3,DRAW_NONE);
  
  
  
   SetIndexBuffer(4,sum);       
   SetIndexBuffer(5,wt);        
   SetIndexBuffer(6,lsma_ma);
  
//---- initialization done
   return(0);
   }
  
int start()

  {   Draw4HowLong = Bars-Rperiod - 5;                            //Rperiod = 20
      length = Rperiod;                                           //length now = 20 
      lsma_length = LSMA_Period;
      loopbegin = Draw4HowLong - length - 1;

     
     
           for(shift = loopbegin = 550 ; shift >=0; shift--)  //  MAIN For Loop
      {
         sum[1] = 0;                                             
         for(i = length; i >= 1  ; i--)             //LSMA loop
         {
         lengthvar = length + 1;                               //lengthvar = 21 
         lengthvar /= Div;                                       //lengthvar = 7
         tmp = 0;
         tmp = ( i - lengthvar)*Close[length-i+shift];         //tmp = 20 - 7 * close[20-i+shift]
         sum[1]+=tmp;
         }
         wt[shift] = sum[1]*6/(length*(length+1)); 
         j = shift;
         lsma_ma[shift] = wt[j+1] + (wt[j]-wt[j+1])* 2/(lsma_length+1);
 
               
//========== COLOR CODING ===========================================                      
       
       
            ExtMapBuffer1[shift] = (wt[shift]+lsma_ma[shift])/2;
            ExtMapBuffer2[shift] = lsma_ma[shift];
            ExtMapBuffer3[shift] = (wt[shift]+lsma_ma[shift])/2;
            ExtMapBuffer4[shift] = lsma_ma[shift];
           
           
           
            if (wt[shift]  < lsma_ma[shift])
            {
                ExtMapBuffer4[shift] = EMPTY_VALUE;
                ExtMapBuffer3[shift] = EMPTY_VALUE;
           }         
       
        }
  }
//+------------------------------------------------------------------+------+
Файлы:
 

У Вас внешний цикл прописан так, что на каждом баре 550 итераций проходит, плюс еще внутренний цикл. Лучше использовать функции нового образца OnCalculate(). Я таким шаблоном пользуюсь при написании:

#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrBlue        // на покупку
#property indicator_color2 clrRed         // на продажу

input int       history = 1000;

double arrowUp[];
double arrowDn[];

//+-------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0, arrowUp);
  SetIndexBuffer(1, arrowDn);
  SetIndexStyle(0, DRAW_ARROW);
  SetIndexStyle(1, DRAW_ARROW);
  SetIndexArrow(0, 233);                                    // Назначение значка "стрелка вверх"
  SetIndexArrow(1, 234);                                    // Назначение значка "стрелка вниз"
  SetIndexLabel(0,"arUp");
  SetIndexLabel(1,"arDn");
}
//+-------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
                const double &open[], const double &high[], const double &low[], const double &close[],
                const long &tick_volume[], const long &volume[], const int &spread[])
{
  
  int needForCount = rates_total - prev_calculated;         // как правило, выдает 0-й или 1-й индекс свечи для расчета
  if(prev_calculated == 0 )                                 // кол-во баров при первом подсчете
  {
    needForCount = rates_total - 1;
    if(needForCount > history) needForCount = history-1;
  }

  for(int i = needForCount; i >= 0; --i)
  {
    function1(i);
    function2(i);
  }
  
  return(rates_total);
}


//+------------------------------------------------------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------------------------------------------------------+
void function1(const int i)
{
  
}

//+------------------------------------------------------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------------------------------------------------------+
void function2(const int i)
{

}
Файлы:
 
я в этом ничего не смыслю, я правильно понимаю,мне нухно куда-то скопировать эту часть которую вы написали???
нашел еще такую модификацию на выходных еще не пробовал во время торгов


 
int start()

        {
 
  //***** Modified by Kelvinhand ***********************
   int counted_bars = IndicatorCounted();
   //---- check for possible errors
   if (counted_bars<0) return(-1);
  
   //---- last counted bar will be recounted
   if (counted_bars>0) counted_bars--;

   int i,j;
   double lengthvar;
   double sum ;
  
   int limit = Bars - counted_bars - Rperiod;
     

      for(i = limit; i >= 0; i--)  //  MAIN For Loop
      {
         sum = 0;                                             
         for(j = Rperiod; j >= 1  ; j--)             //LSMA loop
         {
         lengthvar = (Rperiod + 1)/3.0;                               //lengthvar = 21 
         sum+= ( j - lengthvar)*Close[Rperiod-j+i];         //tmp = 20 - 7 * close[20-j+i]
         }
         wt[i] = sum*6/(Rperiod*(Rperiod+1)); 
         lsma_ma[i] = wt[i+1] + (wt[i]-wt[i+1])* 2/(LSMA_Period+1);
 
            ExtMapBuffer1[i] = wt[i];
            ExtMapBuffer2[i] = lsma_ma[i];
            ExtMapBuffer3[i] = wt[i];
            ExtMapBuffer4[i] = lsma_ma[i];
           
            if (wt[i]  < lsma_ma[i])
            {
                ExtMapBuffer4[i] = EMPTY_VALUE;
                ExtMapBuffer3[i] = EMPTY_VALUE;
           }         
       
        }
  }
//+------------------------------------------------------------------+
 

Код из Вашего цикла 

for(i = limit; i >= 0; i--)  //  MAIN For Loop 

можно переместить в цикл

for(int i = needForCount; i >= 0; --i)

 Ну глобальные переменные в соответствие привести

 
3аработало не тормо3ит,только при 3агру3ке шаблона терминал подвисает надолго,дахе страшно,что не включится,,,но потом нормально, такой дефект устранить реально??и не скахете куда прописать кол-во баров отобрахаемых??
Ваш,вариант, не сработал вообще индикатор пропал!
 
GOLDNG:

Ваш,вариант, не сработал вообще индикатор пропал!
Что-то неправильно сделали. Посмотрите вложение, я не анализировал работу Вашего кода с циклами, просто вставил его как и предлагал вначале во внешний цикл своего шаблона
for(int i = needForCount; i >= 0; --i)
Файлы:
 
получилось! я в свой индикатор вставил Ваши настройки, стал быстро 3агрухаться и не тормо3ит больше!!! СПАСИБО БОЛЬШОЕ!!!
 
Кста, а не подскахешь как в терминал вывести кнопки с нестандартным таймфреймом?
 
GOLDNG:
Кста, а не подскахешь как в терминал вывести кнопки с нестандартным таймфреймом?
Используйте МТ5, там больше таймфреймов. В МТ4 к кнопкам нужно будет еще и графики с нестандартным ТФ прописывать.
 
а,как,для,мт5,переделать,этот,индикатор??
Причина обращения: