PDA

Просмотр полной версии : Индикатор на основе ClusterDeltra volume



kamalligator
10.12.2017, 11:24
Добрый день!
Пытаюсь задействовать индикатор обьема cluster delta в своем индикаторе. Вызываю его таким способом: iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i)
Индикатор компилится без ошибок, но при добавлении на график дает ошибку:
"ClusterDelta_PremiumVolume_3.9 GBPUSD,H4: cannot set millisecond timer (100)"

Не подскажите, что не так?

Заранее благодарю

deniss
10.12.2017, 12:50
Добрый день!
Пытаюсь задействовать индикатор обьема cluster delta в своем индикаторе. Вызываю его таким способом: iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i)
Индикатор компилится без ошибок, но при добавлении на график дает ошибку:
"ClusterDelta_PremiumVolume_3.9 GBPUSD,H4: cannot set millisecond timer (100)"
Не подскажите, что не так?
Заранее благодарю

Хм, хороший вопрос. Для изменения данных индикатора должно произойти какое-то событие (входящий тик), но по опыту было замечено, что активность фьючерса выше чем форекса (или ДЦ), по этому для постоянного обновления индикатора используется таймер с частотой 100 мс для регулярной проверки входящих буферов. Формально, его можно отключить, в коде надо найти где устанавливается EventSetMilisecondTimer и закомментировать эту строку. Глобально это никак не повлияет на показания индикатора.

TheXpert
12.12.2017, 12:01
cannot set millisecond timer это ошибка терминала, которую никак не могут пофиксить. ее по идее вообще быть не должно никогда. с нескольких попыток таймер запустить обычно получается.
НО. при вызове индикатора через iCustom таймеры в нем все равно не работают. Поэтому в этом случае их можно даже не делать

deniss
12.12.2017, 16:10
cannot set millisecond timer это ошибка терминала, которую никак не могут пофиксить. ее по идее вообще быть не должно никогда. с нескольких попыток таймер запустить обычно получается.
НО. при вызове индикатора через iCustom таймеры в нем все равно не работают. Поэтому в этом случае их можно даже не делать

Тут момент в том, что обновление индикаторов премиум висит на двух событиях - по тику и по времени, и при iCustom таймер инициализируется непосредственно в вызываемом индикаторе, а соответственно лучше править код.

kamalligator
15.12.2017, 10:03
Что собственно хочу сделать - индикатор силы Елдера.
Взял стандартный индикатор МТ4 ForceIndex и заменил Volume[i] на iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i).
Не работает, ошибку указанную в первом посте дает не всегда, но вот что выводит: http://prntscr.com/hnr1r3

Помоги разобраться, плиз!

//+------------------------------------------------------------------+
//| Force Index indicator |
//+------------------------------------------------------------------+
int start()
{
int nLimit;
int nCountedBars=IndicatorCounted();
//---- insufficient data
if(Bars<=ExtForcePeriod) return(0);
//---- last counted bar will be recounted
if(nCountedBars>ExtForcePeriod) nCountedBars--;
nLimit=Bars-nCountedBars;
//---- Force Index counted
for(int i=0; i<nLimit; i++)
ExtForceBuffer[i]=iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i)*
(iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtF orceAppliedPrice,i)-
iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtFo rceAppliedPrice,i+1));
//---- done
return(0);
}

deniss
15.12.2017, 13:49
Что собственно хочу сделать - индикатор силы Елдера.
Взял стандартный индикатор МТ4 ForceIndex и заменил Volume[i] на iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i).
Не работает, ошибку указанную в первом посте дает не всегда, но вот что выводит: http://prntscr.com/hnr1r3

Помоги разобраться, плиз!

//+------------------------------------------------------------------+
//| Force Index indicator |
//+------------------------------------------------------------------+
int start()
{
int nLimit;
int nCountedBars=IndicatorCounted();
//---- insufficient data
if(Bars<=ExtForcePeriod) return(0);
//---- last counted bar will be recounted
if(nCountedBars>ExtForcePeriod) nCountedBars--;
nLimit=Bars-nCountedBars;
//---- Force Index counted
for(int i=0; i<nLimit; i++)
ExtForceBuffer[i]=iCustom(NULL, 0, "ClusterDelta_PremiumVolume_3.9", 0, i)*
(iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtF orceAppliedPrice,i)-
iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtFo rceAppliedPrice,i+1));
//---- done
return(0);
}

попробуйте поменять цикл в этой строке таким образом:

for(int i=0; i<Bars; i++)