Как можно ограничить начало и конец вычисления индикаторов? - страница 2

 
stringo:
Поставьте ограничение в 50 тыс баров (предполагается, что до этого стоял анлимитед), перезагрузите терминал и увидите разницу.
Ставлю ограничение 5000 баров и все равно не помогает, я использую несколько сот индикаторов для анализа и еще по нескольким валютам.
 

всеравно терминал считает больше чем указанно...

стоит ограничение в 5 тысяч баров

а реально терминал обсчитывает все данные

хотя в окне отображается 5 тысяч.

но обсчитываются все

это можно понять по вызову аррау сайз буфера индикатора.

 

Если я правильно понял задачу тогда вот:

 

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2010, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1 Yellow

input int NBars=50; // Число баров для расчета

double OpenBuf[];
double HighBuf[];
double LowBuf[];
double CloseBuf[];

double MainColorBuf[];
double MainBuf[];

datetime Time;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,OpenBuf,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,HighBuf,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,LowBuf,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,CloseBuf,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,MainBuf,INDICATOR_DATA);
   SetIndexBuffer(5,MainColorBuf,INDICATOR_COLOR_INDEX);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   IndicatorSetString(INDICATOR_SHORTNAME,"My_TEST");

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 start=Bars(_Symbol,_Period)-NBars;
   if(start<prev_calculated) start=prev_calculated-1;

     {
      for(int i=start;i<rates_total;i++)
        {

         OpenBuf[i]=open[i];
         HighBuf[i]=high[i];
         LowBuf[i]=low[i];
         CloseBuf[i]=close[i];
         if(Time==time[i])
           {
            Print("НЕ РАСЧИТЫВАЕМ!!!");
            return(rates_total);
           }
         else
           {
            MainColorBuf[i]=0;
            MainBuf[i]=0;
           }
         Time=time[i];
         Print("РАСЧИТАЛИ");
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Если нет то извините) 

 
gal:
Ставлю ограничение 5000 баров и все равно не помогает, я использую несколько сот индикаторов для анализа и еще по нескольким валютам.

Да написать необходимые индикаторные функции внутри эксперта и вааще без буферов и массивов и усё!

 

 

с появление мкл5 появилось возможность создавать искусвенную среду для индикаторов...

с расширением количества буферов.

 
OneBillionUSD:

Если я правильно понял задачу тогда вот:

Большое спасибо за ваш простой и наглядный ответ. Но здесь проблема не только в расчетах, добавтье в вашу программу Print(ArraySize(OpenBuf)) и вы увидете что расчитали или не расчитали в итоге даже на часовом графике один массив занимает 72000 элементов а в памяти 700 мБ - вот основная проблема как уменьшить занимаемую память пустыми элементами массива. В итоге мы рассчитываем 50 баров, а занимаем 72000 не говоря о минутном графике.

 GODZILLA "Да написать необходимые индикаторные функции внутри эксперта и вааще без буферов и массивов и усё! "

Написать это конечно неплохо и занимать будет в памяти гораздо меньше, но тогда чем эти данные анализировать, дебагером внутри памяти? 

 

CoreWinTT с появление мкл5 появилось возможность создавать искусвенную среду для индикаторов...с расширением количества буферов.
 

А можно об этом по подробнее? 

 
gal:
Ставлю ограничение 5000 баров и все равно не помогает
Если все именно так, напишите в сервис-деск - это баг. Дайте знать, что вам ответят.
 
GODZILLA:

Да написать необходимые индикаторные функции внутри эксперта и вааще без буферов и массивов и усё!

 

тож верно =)

опят таки же создание среды определенной длинны =))))

с появление визуального тестера вообще в МТ4 и в скором времени и в мт5

ваше не вижу смысла просчитывать всю историю

хватит 500 баров даже для визуального тестирования и пробежки по истории

 

CoreWinTT с появление мкл5 появилось возможность создавать искусвенную среду для индикаторов...с расширением количества буферов.
 

А можно об этом по подробнее? 

в мт5 можно создать неограниченное количество буферов

кто мешает использовать исскусвенный расчетный буфер для анализа

и уже чтобы индикатор использовал его, а не данные всего графика

например уже в широком доступе появился алгоритм расчета скользящей средней от пользовательского массива

кто мешает просчитать 500 бавро от вычесленного массива

например от цен хенки аши и уже строить по ним индикаторы

то есть получается искувсвенная среда

как бы уже внутренний алгоритм индикатора видит только arraysize не всего графика а именно той части которой надо чтобы, он видел

соответсвенно у индикатора не остаётся другова выбора как обсчитать только доступные данные

и потом копируем буфер в результирующий и выводим на экран с переворачиваем через аррау сет ас серриес


 

элдер был ваше не притязателен к расчетам ему хватает 120 =)
Причина обращения: