Данные в буфере для графика верные (печать подтверждает), но на графике данные не отображаются. В .png файле показано, что данные в буфере LinReg[] верные.
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[] ) { //--- //////Линейная регрессия DD Par; Par = LinPar(period,0);// //Отрисовка регрессии int j; for(j=0;j<period;j++) { //LinReg[j] = Line(j, Par.a0, Par.a1); double lr = Line(j, Par.a0, Par.a1); int k = rates_total-1-period+j; LinReg[k] = lr; Print("LinReg[",j,"/",k,"] = ",LinReg[k]); } LinReg[period] = EMPTY_VALUE;//гасим линию слева периода //--- return value of prev_calculated for next call return(rates_total); }
-- примерно так -- не проверял -- возможно корректность расчёта k надо проверить -- но в каком направлении "копать" должно быть понятно
-- по вашей формуле -- данные в LinReg[] пишутся начиная с 0-го бара (с начала истории) -- а текущий бар имеет номер rates_total-1 -- т.е. запись в LinReg[] надо сместить от начала истории к текущему бару
да, надо уточнить k:
также надо проверить корректно ли берёт данные функция Line() -- чтобы не с начала истории
Спасибо Андрей, но проблема не в расчётах. Все расчёты ведутся корректно. Данные выверены по точкам и даже с калькулятором. Это иллюстрирует Print всех 60-ти точек значений регрессии внизу под графиком. Проблема в отрисовке буфера LinReg[]. Где то там я накосячил. И это связано только с моей попыткой переписать прогу с mql4 на mql5. Что то в пятом я туплю. Только начал переходить с четвёртого на пятый. Это просто моя первая тестовая программка, которую я набросал для самопроверки и которая с треском провалилась в mql5 :) В mql4 всё работает отлично. В приложении работающий код LinReg.mq4 с картинкой результата в 1.png. А код LinReg.mq5, который я как то криво переделал для mql5, на график ничего не выводит, хотя распечатывает все 60 значений LinReg[] абсолютно точно (см. 0.png).
Спасибо Андрей, но проблема не в расчётах. Все расчёты ведутся корректно. Данные выверены по точкам и даже с калькулятором. Это иллюстрирует Print всех 60-ти точек значений регрессии внизу под графиком. Проблема в отрисовке буфера LinReg[]. Где то там я накосячил. И это связано только с моей попыткой переписать прогу с mql4 на mql5. Что то в пятом я туплю. Только начал переходить с четвёртого на пятый. Это просто моя первая тестовая программка, которую я набросал для самопроверки и которая с треском провалилась в mql5 :) В mql4 всё работает отлично. В приложении работающий код LinReg.mq4 с картинкой результата в 1.png. А код LinReg.mq5, который я как то криво переделал для mql5, на график ничего не выводит, хотя распечатывает все 60 значений LinReg[] абсолютно точно (см. 0.png).
вы мои исправления в посту выше не учли -- внесите правки, как я расписал -- и проверьте -- должно работать корректно.
проблема не в расчёте -- а в методике определения индекса бара -- в мкл4 нумерация от текущего бара в историю -- в мкл5 от истории до текущего бара
... Ключивая фраза была: "... в мкл5 от истории до текущего бара" !!! Когда я читал методику, то видимо пролистнул и не обратил на эту тонкость внимания, посчитав, что должна быть очевидная приемственность в семействах языков:)
в документации об индексации баров подробно расписано здесь -- https://www.mql5.com/ru/docs/series
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования