Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 466

 
Maxim Dobrovolskii:

Приветствую всех. Возник такой вопрос. Есть индикатор (модифицированные фракталы), при загрузке на график все корректно, работает как и должен, однако при попытке использовать его в советнике, говорит что буфер пустой. При этом проходя буфер в Deinit он хранит правильные значения.

исходники индикатора приложены. Готов выслушать советы и подсказки, что делаю не так.

Код из советника:

Очень бегло глянул. Вопрос: а разве фрактал может быть на нулевом баре? А вот в OnDeinit() вы пробегаетесь в цикле по барам и, естественно, находите фрактал (не пустое значение буфера).
 
Artyom Trishkin:
Очень бегло глянул. Вопрос: а разве фрактал может быть на нулевом баре? А вот в OnDeinit() вы пробегаетесь в цикле по барам и, естественно, находите фрактал (не пустое значение буфера).
на нулевом баре не может, у меня минимум на 4, 0-3 я написал для "а может я такой криворукий и что то не так накодил". в Deinit я так же прохожу по 4-6 и все на своих местах, значения имеются.  это мне и не понятно.
 
Maxim Dobrovolskii:
на нулевом баре не может, у меня минимум на 4, 0-3 я написал для "а может я такой криворукий и что то не так накодил". в Deinit я так же прохожу по 4-6 и все на своих местах, значения имеются.  это мне и не понятно.

В OnDeinit() вы пробегаете в цикле (от 0 до 100) по барам в поиске не нулевого значения и выводите в журнал найденное значение.

А в OnTick() вы пытаетесь вывести только 6 последних баров буфера 0. На них фрактала может и не быть.

Сначала найдите бар, на котором есть фрактал, а потом значение этого бара и выводите.

 
Artyom Trishkin:

В OnDeinit() вы пробегаете в цикле (от 0 до 100) по барам в поиске не нулевого значения и выводите в журнал найденное значение.

А в OnTick() вы пытаетесь вывести только 6 последних баров буфера 0. На них фрактала может и не быть. Сначала найдите бар, на котором есть фрактал, а потом значение этого бара и выводите.

в 6 баре по задумке и должен быть фрактал.

2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 29  fractal Up: 1.09855
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 21  fractal Up: 1.09976
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 16  fractal Down: 1.09652
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 6  fractal Up: 1.10721
2015.11.01 13:19:10.577    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: Deinit Function
2015.11.01 13:19:08.380    2015.10.01 00:00  MoneyRobotics_Proboi! test started

это начало лога. старт теста, советник отработал, запускается Deinit, и сразу на 6 позиции находит фрактал. мне в таком случае не понятно, как обращаться к индикаторному буферу.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

повтор изображения.

Файлы:
 
Maxim Dobrovolskii:

в 6 баре по задумке и должен быть фрактал.

2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 29  fractal Up: 1.09855
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 21  fractal Up: 1.09976
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 16  fractal Down: 1.09652
2015.11.01 13:19:11.023    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: x = 6  fractal Up: 1.10721
2015.11.01 13:19:10.577    2015.10.30 22:54  MoneyRobotics_Proboi! EURUSD,H1: Deinit Function
2015.11.01 13:19:08.380    2015.10.01 00:00  MoneyRobotics_Proboi! test started

это начало лога. старт теста, советник отработал, запускается Deinit, и сразу на 6 позиции находит фрактал. мне в таком случае не понятно, как обращаться к индикаторному буферу.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

повтор изображения.

Вот это:

if(Time[0] == prevtime) return;
   prevtime = Time[0];

сделайте

prevtime = Time[0];

в самом конце

 
Artyom Trishkin:

Вот это:

сделайте

в самом конце

а как это может повлиять? к сожалению ничего не изменилось.

как я себе представляю процесс: индикатор подгружается, начинает каждый тик/бар проверять условие, если оно соблюдается, кладет значение в выбранный буфер или буферы, затем советник обращается к индикатору по номеру буфера к значению по определенному смещению и берет значение. Так?

 
Maxim Dobrovolskii:

а как это может повлиять? к сожалению ничего не изменилось.

как я себе представляю процесс: индикатор подгружается, начинает каждый тик/бар проверять условие, если оно соблюдается, кладет значение в выбранный буфер или буферы, затем советник обращается к индикатору по номеру буфера к значению по определенному смещению и берет значение. Так?

А зачем в индикаторе контроль нового бара? Судя по всему сложных расчетов нет
 
Victor Nikolaev:
А зачем в индикаторе контроль нового бара? Судя по всему сложных расчетов нет
контроль нового бара в советнике, который использует индикатор.
 
Честно говоря, я вообще не понимаю, как нормально пользоваться библиотекой в терминале без поиска и возможности сортировки... Просто тупо прокручивать сотни строчек?!!!
 
Alena000:
Честно говоря, я вообще не понимаю, как нормально пользоваться библиотекой в терминале без поиска и возможности сортировки... Просто тупо прокручивать сотни строчек?!!!

Поиск встроен в MetaEditor (верхний правый угол). Искать можно вхождения по:

  • открытому документу
  • по всем файлам
  • MQL4/MQL5.community
Поиск встроен в сам терминал (верхний правый угол). Поиск из терминала идёт по всему MQL5.community (Статьи, Продукты, Библиотека, Сигналы, Форум, Блоги, Документация).