Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 319

 
Vitaly Muzichenko:

limit - количество баров на графике, это чтобы при прокрутке истории, индикатор отображался до конца истории.


Спасибо Огромное! :)

 

Доброго времени, подскажите как в индикаторе, данном случаи Moveng прописать параметр - применить к - Median Price

Опишу задачу, в индикаторе есть массив[][] он записывает данные расчета MA - Задача чтобы данные записывались по ценам HL/2, а не по умолчанию

 

Здравствуйте, я пытаюсь записать в bin файл объект класса CDecisionForest (это из Alglib библиотеки), но никак не могу понять как. Пытался через FileWriteStruct, но компилятор выдает ошибку на аргументе с моим классом:

'df' - structures containing objects are not allowed

Вообще возможно ли как-то записать это или надо разбирать сам объект, записывать по частям, а потом собирать обратно?
 
Vitaly Muzichenko:

limit - количество баров на графике, это чтобы при прокрутке истории, индикатор отображался до конца истории.


Уважаемый, поясните пожалуйста.

Пользуясь информацией по Вашей ссылке, успеха не достиг.

При объявлении значения limit самостоятельно - вылезает окошко "Array out of range".

Дебаггер указывает на строчки с массивами в цикле for.

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

Может можно как-то это всё проще сделать?
Прорисовка мне не нужна.

Только значения на текущем и предыдущем барах.

 
Ras al Ghul:

Уважаемый, поясните пожалуйста.

Пользуясь информацией по Вашей ссылке, успеха не достиг.

При объявлении значения limit самостоятельно - вылезает окошко "Array out of range".

Дебаггер указывает на строчки с массивами в цикле for.

Может можно как-то это всё проще сделать?
Прорисовка мне не нужна.

Только значения на текущем и предыдущем барах.

Как вы лимит рассчитываете?

Вообще-то, при обратном просчёте индикатора - от начала истории, к её концу (к текущим данным), лимит рассчитывается в общем случае так:

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
Под понятием "нужное_количество_баров_для_верного_расчёта" имеется в виду минимальное количество баров, на которых индикатор будет верно рассчитываться. Для фрактала 2Х2 - шесть баров - два слева, один в центре, два справа и ещё один крайний справа, который должен быть полностью сформирован чтобы фрактал не перерисовывался.
 

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

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

И размер массива превышает количество баров

 

Застрял, как мне кажется, на таком простом месте. Как быть с глобальными int chekcount=0; int count=0; в том случае если я хочу параллельно запускать несколько counter() функций?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

Застрял, как мне кажется, на таком простом месте. Как быть с глобальными int chekcount=0; int count=0; в том случае если я хочу параллельно запускать несколько counter() функций?

Только использовать класс, ну или делать копии функций с разными именами.

 
Vitaly Muzichenko:

Только использовать класс, ну или делать копии функций с разными именами.

Значит не так уж все просто... Спасибо!

 

Может кто-то может переписать данную функцию использовав класс, если не трудно ?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }