Скачать MetaTrader 5

Передать данные из индикатора в эксперт

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Matvey Alekseev
661
Matvey Alekseev  

Всем привет!

Написал простенький индикатор, есть пара ключевых переменных которые мне нужно передать эксперту, какие для этого существуют механизмы? где почитать?

Nikolay Demko
12596
Nikolay Demko  
mat.twg:

Всем привет!

Написал простенький индикатор, есть пара ключевых переменных которые мне нужно передать эксперту, какие для этого существуют механизмы? где почитать?

Самое простое записать из в буффер типа INDICATOR_CALCULATIONS и читать из советника.

Можно через глобалы, можно через файлы, можно через пайпы.

Но первый механизм самый простой и надёжный по синхронизации. Хотя придётся тягать дополнительную память буффера.

Matvey Alekseev
661
Matvey Alekseev  
Спасибо, взял глобальные переменные по тику...
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
Matvey Alekseev
661
Matvey Alekseev  
Появилась новая проблема.... Переписал индикатор, теперь есть базовый класс и куча его объектов, все они хранятся в массиве своём, что самое важное индекс элементов массива используется в расчётах, в эксперте....  ну или будет использоваться.

CMyClass *objectCollection[];
Использовал GlobalVariableSet Но! раньше если мне достаточно было передать значения нескольких переменных, а теперь я хочу на глобальный уровень вывести весь массив объектов со всеми их свойствами и значениями (по сути передать указатель на массив), подскажите есть ли что-нибудь подобное для передачи в эксперта.
Vladimir Gomonov
8317
Vladimir Gomonov  
mat.twg:
Появилась новая проблема.... Переписал индикатор, теперь есть базовый класс и куча его объектов, все они хранятся в массиве своём, что самое важное индекс элементов массива используется в расчётах, в эксперте....  ну или будет использоваться.

Использовал GlobalVariableSet Но! раньше если мне достаточно было передать значения нескольких переменных, а теперь я хочу на глобальный уровень вывести весь массив объектов со всеми их свойствами и значениями (по сути передать указатель на массив), подскажите есть ли что-нибудь подобное для передачи в эксперта.

У mql-программ нет разделяемой памяти.  Все они изолированы друг от друга (в смысле адресного пространства памяти).  Кстати, указателей тоже нет, то что условно называется указателями, на самом деле индексы в скрытой от юзера системной таблице реальных указателей (хендлы).

Поэтому вся передача данных между программами строго через контролируемые "официальные" средства ввода вывода:

1.  файлы  (в том числе map-файлы),

2.  пайп-соединения,

3. юзерские события (в рамках EventChartCustom

bool  EventChartCustom(
   long    chart_id,            // идентификатор графика-получателя события
   ushort  custom_event_id,     // идентификатор события
   long    lparam,              // параметр типа long
   double  dparam,              // параметр типа double
   string  sparam               // строковый параметр события
   );

4.  DLL,

5.  Глобальные переменные // только тип double

6.  индикаторные буферы // read-only

Так что даже передать объект в типизированной форме готовой к употреблению не выйдет (придётся передавать бинарный блок данных без гарантии правильной интерпретации получателем),

не говоря уже про указатель.

Поэтому лучше оптимизируйте проект с учётом ограничений ввода вывода.  Возможно сможете обойтись без разделяемого доступа к одним и тем же объектам.

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

Удачи.

Matvey Alekseev
661
Matvey Alekseev  
Комбинатор
16529
Комбинатор  
MetaDriver:
7. Хукохаки )
Vladimir Gomonov
8317
Vladimir Gomonov  
TheXpert:
7. Хукохаки )
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий