2 вопроса МТ5 - страница 3

 
Сергей Таболин:

1. Спасибо.

2. С этим я уже разобрался. Вот здесь цветом выделено всё, что должно, по идее, инициировать синхронизацию (перед первым жёлтым - добавление инструмента в обзор рынка). Я считаю, что там прописаны явно излишние меры, но и они не гарантируют запуск индикатора. К примеру, я запустил индикатор на графике. Инструменты в обзоре есть, данные уже закачаны. Закрываю терминал. Запускаю его. И индикатор не запускается. 

Связывать это с выходными не получается по простой причине - данные то уже есть в терминале.


Кстати, выход по INIT_FAILED не имеет никакого смысла, ибо индикатор всё-равно висит на графике. Помогает такая конструкция

Впрочем, в таком случае, уже и return теряет смысл.

Напрасно вы пытаетесь получать данные в OnInit().

 
Alexey Viktorov:

Напрасно вы пытаетесь получать данные в OnInit().

Я вовсе не получаю данные. Из документации:

"любая Copy-функция при нехватке истории в формате HCC терминал автоматически инициирует посылку такого запроса от терминала к торговому серверу"

Документация по MQL5: Доступ к таймсериям и индикаторам
Документация по MQL5: Доступ к таймсериям и индикаторам
  • www.mql5.com
Функции для работы с таймсериями и индикаторами. Таймсерия отличается от обычного массива тем, что индексация элементов таймсерии производится от конца массива к началу (от самых свежих данных к самым старым). Для копирования значений таймсерий и индикаторов рекомендуется использовать только динамические массивы, так как функции копирования...
 
Сергей Таболин:

Я вовсе не получаю данные.

А это тогда что?

         else
         {
            double   chk[];
            ArrayFree(chk);
            CopyBuffer(handle_iCustom,3,0,300,chk);
         }
 
Alexey Viktorov:

А это тогда что?

Это подключённый индикатор от Vladimir Karputov.  Вызывал его с надеждой дополнительно проинициировать синхронизацию инструмента. Не помогло (((

А chk после выхода из блока уничтожается.

 

Вы точно проверяли?

 
Vladimir Karputov:

Вы точно проверяли?


Владимир, я точно проверял (код инициализации выложил). И проверял Ваш пример. Он работает. Но дело в том, что для моего индикатора важна синхронизация данных со всех инструментов. Именно для этого и использую Bars() и именно в OnInit()

int bc = Bars(symbols_name[i],PERIOD_CURRENT);
.........................
if(bars_calc > bc)   bars_calc = bc;

У Вас же каждый инструмент (на индикаторе) независим. 

-------------------

Ещё я попробовал добавить пример из скрипта из Организация доступа к данным.

Это тоже не решило проблему. Хотя и стало заметно лучше, но иногда всё-равно приходится запускать индикатор по нескольку раз, чтобы он заработал. И после перезагрузки терминала не на всех графиках он запускается автоматом.

------------------

Далее я подумал, что все данные уж наверняка синхронизируются с сервером при открытии графика инструмента. И сделал такое обрамление 

chID[nC++] = myChart.Open(symbols_name[nV-1],PERIOD_CURRENT);
// тут вся прочая синхронизация
for(int n = 0; n < ArraySize(chID); n++) ChartClose(chID[n]);

Думал, что теперь то уж точно будут все необходимые данные....

И опять ошибся.

Уже и не знаю что делать дальше...

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 

Я вот подумал, а чё это я упёрся в OnInit()?

Может стоит перенести всю эту синхронизацию в OnCalculate()?

 

Всё шикарно. Запускается с первого раза )))

Вот только не совсем понял почему получилось так?


 
Сергей Таболин:

Всё шикарно. Запускается с первого раза )))

Вот только не совсем понял почему получилось так?


Потому, что пока не закончится OnInit данные не подгружены и никакая синхронизация не спасёт. Затем, после перезагрузки отображаются те значения которые остались при предыдущем пересчёте индикатора. Но это равносильно мусору.
 
Alexey Viktorov:

Потому, что пока не закончится OnInit данные не подгружены и никакая синхронизация не спасёт. Затем, после перезагрузки отображаются те значения которые остались при предыдущем пересчёте индикатора. Но это равносильно мусору.

Уже понял. ))

Не совсем понял. После перезагрузки терминала? Так вот перезагрузил и на "проблемном" графике индикатор отрисовался нормально. А до перезагрузки я в свойствах индикатора указал другой символ для рассчёта и индикатор тоже отрисовался полностью.

Как этот мусор чистить?

Причина обращения: