Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужна мобильная версия MetaTrader 5? Скачивай и торгуй!
Matvey Alekseev
507
Matvey Alekseev 2013.06.24 16:16 

Всем привет!

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

Nikolay Demko
12465
Nikolay Demko 2013.06.24 16:18  
mat.twg:

Всем привет!

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

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

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

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

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

CMyClass *objectCollection[];
Использовал GlobalVariableSet Но! раньше если мне достаточно было передать значения нескольких переменных, а теперь я хочу на глобальный уровень вывести весь массив объектов со всеми их свойствами и значениями (по сути передать указатель на массив), подскажите есть ли что-нибудь подобное для передачи в эксперта.
Vladimir Gomonov
8277
Vladimir Gomonov 2013.06.29 22:40  
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
507
Matvey Alekseev 2013.06.29 22:54  
Комбинатор
15931
Комбинатор 2013.06.29 22:58  
MetaDriver:
7. Хукохаки )
Vladimir Gomonov
8277
Vladimir Gomonov 2013.06.30 00:05  
TheXpert:
7. Хукохаки )
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий