Ускоряем iCustom()

 
Снова всем привет! Как известно, вызов внешних подпрограмм и функций серьёзно замедляет быстродействие приложения. Это действительно, как я уже понял, и на MQ4. iCustom, конечно, хорошо, но хотелось бы обходиться без вызова внешних индикаторов при написании советников. Вот мне интересно знать последовательность действий, чтобы из индикатора, рисующего линии-палочки-кружочки получить значение для текущего бара, а также значение с учётом задаваемого сдвига. Естественно значение индикатора необходимо рассчитывать в теле советника.
Опять-таки для примера интересно разобрать AMA:
double LastAMA=iCustom(NULL,0,"AMA",0,0); double PrevAMA=iCustom(NULL,0,"AMA",0,1);

Необходимо избавиться от функций iCustom().
 
"Хорошо зафиксированный пациент не требует анестезии".
Есть ли факты, доказывающие необходимость вноса алгоритма расчета индикатора в тело советника? Я пока таких фактов не знаю.
 
))не знаю что вы за этот iCustom взялись)))) при использовании его в експерте он врет безбожно))))
 
Rosh:
Есть ли факты, доказывающие необходимость вноса алгоритма расчета индикатора в тело советника?
О-о-чень медленная работа тестера на моём компьютере.
George-on-Don:

))не знаю что вы за этот iCustom взялись)))) при использовании его в експерте он врет безбожно))))
Скорее не iCustom() врёт, а индикатору, для которого вызывалась эта функция не хватает баров. К примеру, расчёт индикатора проводится для последних 10 000 баров, а тестить стратегию Вы собираетесь, ну, например, с 2004. Понятно, что бары 2004 года не попадают под (сегоднешнее время-10 000 баров). Вот поэтому и приходится увеличивать количество рассчётных баров в самом индикаторе, а потом вызывать его в советнике. В результате производительность тестера из-за огромных рассчётов снижается до 0.
Интересно, можно ли подгрузить iCustom() в память, а затем при необходимости брать из него значения?
 
Уже несколько месяцев не использую индикаторы, но старые наработки остались. Есть и АМА.
//+------------------------------------------------------------------+ //| Индикатор AМА | //| Параметры: | //| sym - наименование инструмента | //| tf - таймфрейм (количество минут) | //| nbi - номер буфера индикатора | //| nb - номер бара | //+------------------------------------------------------------------+ double iAMA(string sym, int tf, int nbi, int nb) { double noise=0.000000001, AMA, AMA0, signal, ER; double dSC, ERSC, SSC, ddK; double slowSC, fastSC, vbi[3]; int nfast=2; int nslow=30; double G=2.0; double dK=2.0; int i; slowSC=(2.0/(nslow+1)); fastSC=(2.0/(nfast+1)); AMA0=iClose(sym, tf, nb+1); signal=MathAbs(iClose(sym, tf, nb)-iClose(sym, tf, nb+AMA_Period)); for(i=0; i<AMA_Period; i++) { noise=noise+MathAbs(iClose(sym, tf, nb+i)-iClose(sym, tf, nb+i+1)); } ER=signal/noise; dSC=(fastSC-slowSC); ERSC=ER*dSC; SSC=ERSC+slowSC; AMA=AMA0+(MathPow(SSC,G)*(iClose(sym, tf, nb)-AMA0)); vbi[0]=AMA; ddK=AMA-AMA0; if (MathAbs(ddK)>dK*Point && ddK>0) vbi[1]=AMA; else vbi[1]=0; if (MathAbs(ddK)>dK*Point && ddK<0) vbi[2]=AMA; else vbi[2]=0; return (vbi[nbi]); }
 
Camelot:
Rosh:
Есть ли факты, доказывающие необходимость вноса алгоритма расчета индикатора в тело советника?
О-о-чень медленная работа тестера на моём компьютере.
George-on-Don:

))не знаю что вы за этот iCustom взялись)))) при использовании его в експерте он врет безбожно))))
Скорее не iCustom() врёт, а индикатору, для которого вызывалась эта функция не хватает баров. К примеру, расчёт индикатора проводится для последних 10 000 баров, а тестить стратегию Вы собираетесь, ну, например, с 2004. Понятно, что бары 2004 года не попадают под (сегоднешнее время-10 000 баров). Вот поэтому и приходится увеличивать количество рассчётных баров в самом индикаторе, а потом вызывать его в советнике. В результате производительность тестера из-за огромных рассчётов снижается до 0.
Интересно, можно ли подгрузить iCustom() в память, а затем при необходимости брать из него значения?
Эти факт ничего не доказывает о производительности МТ4 и некорректности рачетов. Копайте свой код, сначала нужно найти свои ошибки.
 
Всем спасибо, вопрос исчерпан!
 
2 camelot - я пытался использовать c iCustom в эксперте -индикатор Pivot - данные берутся только из предыдущего! дня))) - итог неутешительный)) в результате мне пришлось в советники вставлять расчет этих самых "пивотов" с нуля)))
 
))Я знаю что пивот есть )) вопрос в том что индикатор вызванный в эксперте по iCustom -не верно возварщает значения))) и торговля по нему (по данным из iCustom) соответственно- ник чему хорошему не приведет - вот ссылка на предыдущее обсуждение данной темы https://www.mql4.com/ru/forum/2702/.
 
George-on-Don:
вопрос в том что индикатор вызванный в эксперте по iCustom -не верно возварщает значения))) и торговля по нему (по данным из iCustom) соответственно- ник чему хорошему не приведет
полностью с Вами согласен :). Я просто привёл пару примеров, как можно обходится без iCustom(). Ведь это основная цель темы, не так-ли?
 
))согласен)) хотя вопрос звучит "ускоряем ICustom")) - логичнее было бы назвать - обходимся без ICustom))))))))
Причина обращения: