Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Откуда такие сведения? У меня написан класс один, который протестирован уже ни один раз. Так с 1 слэшем. Вот так там написано:
То что я создал 2 раза тот же хэндл, это лишь случайность. Тестировал, проверял. Переписал всё в одной функции без проверок под идеальные условия для тестера. В реале, конечно, допишу проверки. Вот что вышло:
Параметры функции getCandlePatternsValue() видны на прикреплённом скрине.
Я бы мог показать целый код, но это усложнит анализ кода. Я вижу, что ошибка в этом момент. Поэтому я его и показываю.
Там более, видно, что функция CopyBuffer() возвращает res == -1. А это значит, что не получается считать данные с буфера индикатора CandlePatterns.
Виктор, ну вы же продолжаете создавать индикатор непосредственно перед обращением к нему.
Надо заранее в ОнИнит все что нужно создать, а потом обращаться. Скорее всего не успевает.Такое бывает, если неправильно указан индекс буфера. Проверьте значение bufferIndex, передаваемое в getCandlePatternsValue и посмотрите, есть ли в индикаторе буфер с таким индексом. Его явно нет.
Нет. В индикаторе же лишь 2 буфера сейчас. Индексы буферные 0 и 1. Конечно, они в индикаторе присутствуют. Это можно увидеть невооружённым глазом в прикрепленном файле (индикаторе)
P. S. А почему тема в разделе для MQL4? Думаю, стоит перенести в раздел для MQL5.
Я тоже об этом сегодня подумал. Но не хотел дёргать модераторов ради этого.
Виктор, ну вы же продолжаете создавать индикатор непосредственно перед обращением к нему.
Надо заранее в ОнИнит все что нужно создать, а потом обращаться. Скорее всего не успевает.@Aleksey Mavrin вы правы в этом. Учту. Но, в целом, на сложившуюся ситуацию перенос инициализацию в OnInit() ничего не дало. Я написал тестовый бот, чтобы протестироватькак читаются данные с моего индюка. Вот он:
Так вот. Ничего не копиуется с буфера индикатора. Ни с 0-го, ни с 1-го индекса. Вот для первого я выше код и привёл. В журнале вижу следующее:
Неужели что-то с индикатором? Что может на это влиять? Индикатор же элементарный..
@Aleksey Mavrin вы правы в этом. Учту. Но, в целом, на сложившуюся ситуацию перенос инициализацию в OnInit() ничего не дало. Я написал тестовый бот, чтобы протестироватькак читаются данные с моего индюка. Вот он:
Так вот. Ничего не копиуется с буфера индикатора. Ни с -го, ни с 1-го индекса. Вот для первого я выше код и привёл. В журнале вижу следующее:
Неужели что-то с индикатором? Что может на это влиять? Индикатор же элементарный..
Уже интересно) вы бы сделали задержку, чтобы расчеты все точно он провёл, и ошибку на каждой итерации выводили. Позже протестю.
Ещё смущает что в массиве точный 0.0, хотя он же им не инициализирован, а это не 4-ка, там вроде как обычно мусор.
@Aleksey Mavrin вы правы в этом. Учту. Но, в целом, на сложившуюся ситуацию перенос инициализацию в OnInit() ничего не дало. Я написал тестовый бот, чтобы протестироватькак читаются данные с моего индюка. Вот он:
Так вот. Ничего не копиуется с буфера индикатора. Ни с -го, ни с 1-го индекса. Вот для первого я выше код и привёл. В журнале вижу следующее:
Неужели что-то с индикатором? Что может на это влиять? Индикатор же элементарный..
А как вы хотите поменять в этом цикле
значение массива в нулевом индексе???
ps; извините, не поменять, а прочесть иное значение, чем оно есть там.
А как вы хотите поменять в этом цикле
значение массива в нулевом индексе???
Так а разница какая? Я для теста создал массив размерностью 1 элемент, чтобы на каждой итерации писать в этот первый элемент массива т.е. на 0-ой индекс то, что считаю.
Но суть в том, что ничего не считывается. Вот это самый интересный момент..
Уже интересно) вы бы сделали задержку, чтобы расчеты все точно он провёл, и ошибку на каждой итерации выводили. Позже протестю.
Ещё смущает что в массиве точный 0.0, хотя он же им не инициализирован, а это не 4-ка, там вроде как обычно мусор.
В общем-то, я придумал чутка другую проверку. Чтобы было проще проверить только что я накидал скрипт следующего содержания:
В данном случае, я хочу получить значение 1-го буфера индикатора при помощи функции CopyBuffer(). Ничего не выходит. В журнале вижу:
Если замению 1, на 0 т.е. хочу получить значение 0-го буфера то всё получается:
Кстати, когда я получаю данные с 0-го буфера, то всё чётко. Находится нужный бар, с паттерном, который отображает индикатор. Принтуется цена открытия этого бара (если расскоментирую в скрипте строку для этого). По сути, все мысли сошлись на том, что что-то не то лишь с функцией CopyBuffer(), либо с индикатором. С функцией CopyBuffer(), навряд ли, что-то не то т.к. ей пользуются все и не первый год. Значит что-то с индюком.
Но интересно то, что оба буфера, по сути, написаны чуть-ли не копипастом один от другого с изменением одного лишь условия. Вот что интересно. Как проверить этот момент очень инетресно..
Скрипт и индикатор, у которого отключил отрисовку и закинул все включения в него прикрепляю. Если удобнее, могу приложить в библиотеками. Они компактные. Но код читается тогда удобнее т.к. нет лишнего в контексте логики.
По сути, я выложил индикатор и скрипт, которым можно считать данные из бферов этого индикатора. Но данные читаютя только из 1 буфера (0-го индекса). Другой буфер не считыватся. Вот это, на самом деле, интересно. Создаётся впечатление, что терминал гонит. У меня он портабельно запускается. Код уже лопатил ни один раз.