ERR_INDICATOR_DATA_NOT_FOUND | 4806 | Запрошенные данные не найдены |
Где принтует-то, в Init или ниже?
Добавлено: вот тут
Ниже, при копировании буфферов. Хендл нормально запрашивается. Это мкл 5.
У меня таймсерии массивы p, time.
BARS=Bars(_Symbol,time_,time[i],TimeCurrent())-1;
возвращает количество баров, то есть индекс бара, как в мкл4.
Почитал кто сталкивался с этим, попробовал Sleep и ничего. Из за какой-то ерунды пол дня барахтаюсь.
Делаю индикатор, для вызова его на младших таймфреймах со старших. Номер ошибки в названии топика(на текущем таймфрейме ошибка не возникает). Как исправить?
Взял код из примера "iAC" там тоже самое выходит.
У вас в limit количество баров текущего тайма, предположим 1000. На старшем тайме история всего на 900 баров, но цикл хочет взять 1000, которых на старшем тайме нет.
Проверяйте доступное количество баров на получаемом тайме, и после этого крутите цикл.
У вас в limit количество баров текущего тайма, предположим 1000. На старшем тайме история всего на 900 баров, но цикл хочет взять 1000, которых на старшем тайме нет.
Проверяйте доступное количество баров на получаемом тайме, и после этого крутите цикл.
Переменная "BARS" запрашивает количество баров со старшего таймфрема и с этого количества копирует данные.
Вообщем проехали. Кто видел хороший пример, как сделать индикатор на мкл5 показывающий значения со старшего таймфрема, где не так много строк кода?
Я так понял там нужно проверки всякие проводить и прочее, но что-то у меня не получается пока, да и время на эту ерунду нет желания тратить.
Индикатор мне нужен для визуализации, чтобы накинуть после одиночного прогона в тестере.
Честно говоря, кто эти примеры подбирал, нужно семь-пять строк для примера, а начинают на все 300 строк городить много ненужной информации.
Делаю индикатор, для вызова его на младших таймфреймах со старших. Номер ошибки в названии топика(на текущем таймфрейме ошибка не возникает). Как исправить?
Взял код из примера "iAC" там тоже самое выходит.
time []- время баров с текущего ТФ. А значит, BARS может быть нулевым. И вы ещё отнимаете у него 1. Понятно что на некоторых итерациях будет ошибка
Ну, да логично, поправил. Убрал -1. Данные отрисовываются, после обновления окна, только все данные попадают не на те индексы.
То есть на текущем таймфрейме та же картина, что и на большом.
Тут не все так просто, как в мкл4. Там баршифтом можно найти индекс и взять оттуда со старшего таймфрейма.
Нашел описание проблемы https://www.mql5.com/ru/forum/190003#comment_4877625
- 2017.04.14
- www.mql5.com
Если кому нужно, сделал. Только обновлять окно необходимо вручную.
#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 1 //--- plot Label1 #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrBlue #property indicator_style1 STYLE_SOLID double p[]; double P[]; int ac; input ENUM_TIMEFRAMES time_=PERIOD_CURRENT; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { ac=iAC(NULL,time_); Sleep(1000); if(ac<0) { Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!"); return(-1); } //--- indicator buffers mapping SetIndexBuffer(0,P,INDICATOR_DATA); IndicatorSetInteger(INDICATOR_DIGITS,_Digits+2); PlotIndexSetInteger(0,PLOT_LINE_WIDTH,4); SetIndexBuffer(1,p,INDICATOR_CALCULATIONS); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int i,limit; if(prev_calculated==0)limit=500; else limit=prev_calculated-1; for(i=limit;i<rates_total;i++) { if(CopyBuffer(ac,0,time[i],1,p)<0) { Alert("Ошибка копирования буферов индикатора AC - номер ошибки:",GetLastError());return(0); } P[i]=p[0]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Делаю индикатор, для вызова его на младших таймфреймах со старших. Номер ошибки в названии топика(на текущем таймфрейме ошибка не возникает). Как исправить?
Взял код из примера "iAC" там тоже самое выходит.