Ниже код варианта стохастика. Не могу сообразить как оптимизировать код чтобы не пересчитывать все 500 (Barcount) баров за тик.
Подскажите
где докрутить?
for(shift =prev_calculated; shift <rates_total ; shift ++)
в shift будет номер первого бара истории с индексом в несколько тысяч
вы наверно имели ввиду
shift = rates_total - prev_calculated
получаю 2020.02.06 02:34:18.484 ptr_DDS_test EURUSD.I,M1: array out of range in 'ptr_DDS_test.mq4' (53,32)
в shift будет номер первого бара истории с индексом в несколько тысяч
вы наверно имели ввиду
получаю 2020.02.06 02:34:18.484 ptr_DDS_test EURUSD.I,M1: array out of range in 'ptr_DDS_test.mq4' (53,32)
Потому что если limit указывает на первый бар в истории (тот, что левее всех по графику), то левее него (индекс + 1 и более) ничего нет - выход за пределы массива.
А вот здесь:
for(counter =shift; counter <=Pds + shift ; counter ++) { Price= GetIndexValue2(counter); if(Price > MyHigh) MyHigh = Price; if(Pds <= 0) MyHigh = Price; if(Price < MyLow) MyLow = Price; if(Pds <= 0) MyLow = Price; }
происходит обращение к элементам массива ExtHistoBuffer2, которых не существует (они должны быть левее на графике, но их нет).
Все потому, что в функции GetIndexValue2() нет проверки на ошибку выхода за пределы массива.
- www.mql5.com
в shift будет номер первого бара истории с индексом в несколько тысяч
вы наверно имели ввиду
получаю 2020.02.06 02:34:18.484 ptr_DDS_test EURUSD.I,M1: array out of range in 'ptr_DDS_test.mq4' (53,32)
Вы спросили что надо чтобы не пересчитывать все 500 баров, я именно это и ответил, что вы с shift дальше делаете для этого не важно.
Потому что если limit указывает на первый бар в истории (тот, что левее всех по графику), то левее него (индекс + 1 и более) ничего нет - выход за пределы массива.
А вот здесь:
происходит обращение к элементам массива ExtHistoBuffer2, которых не существует (они должны быть левее на графике, но их нет).
Все потому, что в функции GetIndexValue2() нет проверки на ошибку выхода за пределы массива.
спасибо за подсказку - исправил.
Историю отрисовывает правильно. А вот онлайн рисовать не хочет.
спасибо за подсказку - исправил.
Историю отрисовывает правильно. А вот онлайн рисовать не хочет.
т.е. что-то не могу сообразить из алгоритма, вообще реально не пересчитывать всю историю чтобы получить теже данные на выходе, что и при пересчете.
судя по тому что вы пишите про шифт - вы не запутались с индексацией массивов индикатора? он индексируется так что 0 ячейка массива - самый старый бар - самый левый т.е.
да вроде не запутался
ArraySetAsSeries(ExtHistoBuffer, true); *** int limit = rates_total - prev_calculated; if (limit != 0) limit --; for(shift = limit; shift >=0 ; shift --) ExtHistoBuffer[shift] = value;
да вроде не запутался
а какой смысл в ExtHistoBuffer[shift] = value;
шифт всегда будет ноль, кроме первого просчёта истории. т.е. вы меняете самый старый бар, а надо наверное самый новый, не? а говорите не запутались)
а какой смысл в ExtHistoBuffer[shift] = value;
шифт всегда будет ноль, кроме первого просчёта истории. т.е. вы меняете самый старый бар, а надо наверное самый новый, не? а говорите не запутались)
почему 0 - это самый старый ?
0 - это самый новый бар - нулевая свеча. Ведь ArraySetAsSeries(ExtHistoBuffer,
true);
указывает что хранение элементов как в тайм серии. Или я чего-то не понимаю?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ниже код варианта стохастика. Не могу сообразить как оптимизировать код чтобы не пересчитывать все 500 (Barcount) баров за тик.
Подскажите где докрутить?