Вопрос программистам - Восьмибуферный многовалютный индикатор с вложенным 7 буферным. - страница 3

 

Народ я вставил внутрь индикатор, но не поверите стало ещё хуже, полагаю, потому что увеличивается количество расчетов, ведь приходится с каждым обращением пересчитывать тоже самое...По крайней мере, я не понял как это организовать, чтоб не пересчитывал историю... Эмулировать буфера?

Я попробовал вставить хотя бы 2-хбуферный индикатор, там 2 цикла... 1 цикл пропадает, 1 остаётся, организую как функцию, отвожу место под массив. В результате виснет терминал, не загрузить индикатор...

Помогло, кстати, вычисления через минуту.

 
zfs >>:

Эмулировать буфера?

естесно

в идеале нужно интегрировать все в одном зацикленном скрипте (индикатор и советник)

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

переменные extern тоже заменить на глобальные переменные

 

еще одна идея по поводу такой организации -

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

Успехов..

 
sab1uk >>:

естесно

в идеале нужно интегрировать все в одном зацикленном скрипте (индикатор и советник)

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

переменные extern тоже заменить на глобальные переменные


содержимое буферов транслировать в глобальные переменные- это как?

 
zfs >>:

содержимое буферов транслировать в глобальные переменные- это как?

double Signal[300];

//

   for(shift=0; shift<300; shift++) GlobalVariableSet("Signal["+shift+"]",Signal[shift]);

#property indicator_separate_window
#property indicator_buffers 1

double Signal[];
//+------------------------------------------------------------------+ 
int init()
{
   SetIndexBuffer(0,Signal); SetIndexEmptyValue(0,0);

   return(0);
}
//+------------------------------------------------------------------+ 
int start()
{
   ArrayInitialize(Signal,0);

   for(int shift=0; shift<300; shift++) Signal[shift]=GlobalVariableGet("Signal["+shift+"]");

   return(0);
}
//+------------------------------------------------------------------+
 
sab1uk >>:


А для чего в глобальные.?. не понял. Мне эти буфера выводить не надо,только для расчета, сделаю в одном цикле, хоть и запара это, и будет недостаточно? И главное, спасибо.

 

Привет всем. Я припознился (кучу вкусных советов уже накидали) но позволю себе вставить исчё один.

Если не принципиально использование Close или Open, то можно делать расчёт по Open и поставить запрет на запуск при каждом тике,

тогда появляется время для расчёта аж целый бар.

Я так делаю во многих тяжелых индюках.

____________________________________________________________________________________________________________Open рулит.

 
Urain >>:

Привет всем. Я припознился (кучу вкусных советов уже накидали) но позволю себе вставить исчё один.

Если не принципиально использование Close или Open, то можно делать расчёт по Open и поставить запрет на запуск при каждом тике,

тогда появляется время для расчёта аж целый бар.

Я так делаю во многих тяжелых индюках.

____________________________________________________________________________________________________________Open рулит.


Это уже используется. На выходе получаю:

memory handler,

инкорреут старт позишн,

аррэй инициализатион функцион,

cannot resize array,

подвисание компьютера(с этим уже лучше после минутки) и терминала (осталось молится на 1 индикатор, а их желательно таких 6 повесить),

отсутствие параметров в индикаторе при повторном заходе.

 
zfs >>:

Это уже используется...

А сколько времени идёт расчёт?

 
zfs писал(а) >>

Это уже используется. На выходе получаю:

memory handler,

инкорреут старт позишн,

аррэй инициализатион функцион,

cannot resize array,

подвисание компьютера(с этим уже лучше после минутки) и терминала (осталось молится на 1 индикатор, а их желательно таких 6 повесить),

отсутствие параметров в индикаторе при повторном заходе.

лучше покажи как ты используешь память инициализация и изменение..

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