Вы хотите сказать что функция iCustom работает только на ценовых константах? так как на хандле ее запустить не получается... причем только в том случае когда есть хоть какие-нибудь параметры у пользовательского индикатора..
более того я заметил (в курсе тестированя) что функция показывает погоду... то ошибка 4003.. один и тот же индикатор не работает, когда терминал запускается.. и работает (тоже не очень стабильно) когда терминал запущен.. !
Наверняка вы уже в курсе что другие таймфрэймы работают плохо когда используется iCustom или CopyTime. Pечь идет о таймфрэймах отличных от текущего..
Наверняка вы уже в курсе что другие таймфрэймы работают плохо когда используется iCustom или CopyTime. Pечь идет о таймфрэймах отличных от текущего..
Вы хотите сказать что функция iCustom работает только на ценовых константах? так как на хандле ее запустить не получается... причем только в том случае когда есть хоть какие-нибудь параметры у пользовательского индикатора..
Пользовательский индикатор должен использовать функцию OnCalculate() первого вида:
Если в индикаторе используется первая форма вызова, то при запуске пользовательского индикатора на вкладке "Parameters" можно дополнительно указать на каких данных он будет рассчитываться. Если параметр "Apply to" не выбран явно, то по умолчанию расчет производится по значениям "Close".
При вызове пользовательского индикатора из mql5-программы параметр Applied_Price или хэндл другого индикатора должен передаваться последним после всех предусмотренных пользовательским индикатором входных переменных.
Спасибо за ответ и ссылку на интересный раздел справки.
Конечно немного странно, что для безотказной работы функций Копи необходимо проделать столько проверок по загрузке данных.
В принципе разрабатывая индикаторы на разных таймфреймах надо все время об этом думать...
а так хотелось бы чтобы низкого уровня программинг, оставалсья спрятанным в MQl5...
Разработчик проводит кучу времени над техническими проблемами, загрузка данных, размер массива, и не получается сосредоточится над функциональным кодом, собственно ради чего язык и нужен...
Кстати, скрипт из примера (TestLoadHistory) выдает ошибку Load Failed, что говорит о том что все же какие-то проблемы возможно все еще есть.. B любом случае спасибо, за своевременный ответ!
Привет,
Eсть еще одна неполадка в функции iCustom Когда функция вызывается для периода отличного от PERIOD_CURRENT, скажем таймфрейм ТФ
int iCustom( |
- 2009.11.23
- Андрей
- www.mql5.com
Привет,
Eсть еще одна неполадка в функции iCustom Когда функция вызывается для периода отличного от PERIOD_CURRENT, скажем таймфрейм ТФ
int iCustom( |
Значение PERIOD_CURRENT в пользовательском индикаторе равно PERIOD_CURRENT, вместо ТФ !
Расскажите поподробнее, как вы это запрашиваете и как проверяете?
Расскажите поподробнее, как вы это запрашиваете и как проверяете?
запускать индицатор надо на таймфрайме M30, H1, H4
Вот пример использования функции
bug2.mq5:
//---
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
double Buffer[];
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
SetIndexBuffer(0,Buffer);
Print("Call user_indicator PERIOD_H12");
handle=iCustom(
Symbol(),
PERIOD_H12,
"user_indicator",
14
);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
if(BarsCalculated(handle)<=0) return(prev_calculated);
//--- variables
Print("End...");
//---- OnCalculate done. Return new prev_calculated.
return(rates_total);
}
//+------------------------------------------------------------------+
Вот пример иицпользования функции:
bug2.mq5:
Просьба, правильно оформляйте код, чтобы его было удобно читать. В данном случае я подправил оформление кода в Вашем сообщении.
В справвке для раздела Периоды графиков сказано:
Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
Итак, Вы вызываете пользовательский индикатор "user_indicator", указав для него период H12, из индикатора bug2.mq5 на графике с периодом H4. Какое значение должна содержать предопределенная переменная _Period в этом случае?
При этом заметьте, что индикатор "user_indicator" с указанным таймфреймом H12 вычисляется правильно, Вы это можете проверить самостоятельно.
//--- #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_type1 DRAW_LINE double Buffer[]; int handle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0,Buffer); Print("Call user_indicator PERIOD_H12"); handle=iCustom( Symbol(), PERIOD_H12, "user_indicator", 14 ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(BarsCalculated(handle)<=0) return(prev_calculated); double value[]; if(CopyBuffer(handle,0,0,1,value)>0) { Print("value =",value[0]); } //--- variables //Print("End..."); //---- OnCalculate done. Return new prev_calculated. return(rates_total); } //+------------------------------------------------------------------+
Просьба, правильно оформляйте код, чтобы его было удобно читать. В данном случае я подправил оформление кода в Вашем сообщении.
В справвке для раздела Периоды графиков сказано:
Итак, Вы вызываете пользовательский индикатор "user_indicator", указав для него период H12, из индикатора bug2.mq5 на графике с периодом H4. Какое значение должна содержать предопределенная переменная _Period в этом случае?
При этом заметьте, что индикатор "user_indicator" с указанным таймфреймом H12 вычисляется правильно, Вы это можете проверить самостоятельно.
я не говорил, что индикатор неправильно расчитывается...
мне просто хотелось бы знать как узнать текущий таймфрейм в ползовательском индикаторе вызываемого через iCustom
значения PERIOD_CURRENT , Perid(), _Period возвращают таймфрейм основного индикатора, а не пользовательского...
т.е. вызываемый индикатор (а не тот что подвешивается на график) не может определить таймфрейм на котором он работает???
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
всем привет. у меня не получается использовать функцию iCustom на базе хэндла от другого индикатора:
handle_P=iCustom( Symbol(), PERIOD_CURRENT,
"My custom indicators\\P",
range, // some input parameter
handle // handle of an other indicator that works well
);
Проблема в том что, без инпут параметра range в индикаторе P iCustom работает (правда толко для буффера 0 для индикатора hadle)
В данном примере (инпут параметер присутствует) iCustom возвращает данные, но не из handle, а из price = close, значение по умолчанию
----------------
Есть ли у вас пример индикатора iCustom который запускается на данных из handle, и имеет инпут параметры? В чем моя ошибка?
спасибо!