И есть еще такой вариант
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Automated-Trading, 2018.03.29 11:09
- В исходниках есть кроссплатформенные функции (файл Data_String.mqh), которые позволяют помещать/извлекать любые данные в/из строки. Например, это дает возможность производить удобный обмен произвольными данным между любыми MQL-программами за счет string-параметра (sparam) пользовательских событий;
Но в этом варианте действует ограничение на длину передаваемой структуры.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2018.11.21 10:15
// Отправка данных #property indicator_chart_window #property indicator_plots 0 #include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166 #include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618 const RESOURCEDATA<MqlTick> Resource("::" + __FILE__); // Ресурс для передали данных (тики) void OnInit() { _GlobalVariableSet("ResourceName", Resource.GetFullName()); // Записали в глобальную переменную полное имя ресурса (read-only) } void OnDeinit( const int ) { _GlobalVariableDel("ResourceName"); } int OnCalculate( const int, const int, const int, const double &[] ) { MqlTick Ticks[]; CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 5); // Сформировали данные Resource = Ticks; // Записали данные return(0); }
// Получение данных #property indicator_chart_window #property indicator_plots 0 #include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166 #include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618 int OnCalculate( const int, const int, const int, const double &[] ) { static const RESOURCEDATA<MqlTick> Resource(_GlobalVariableGet<string>("ResourceName")); // Создали ресурс на основе переданного в глобальной переменной полного имени MqlTick Ticks[]; Resource.Get(Ticks); // Считали данные из ресурса. ArrayPrint(Ticks); // Распечатали полученные данные return(0); }
Дикий лес, fxsaber. Все проще.
Реализовал полноценную связь между программами через EventChartCustom(); Передаю сообщения и массивы между индикаторами и советниками.
Вот пример сборки и отправки сообщения с массивом данных в другую программу:
int OnInit() { //------------------------------- string Данные[1000], Строка = NULL, Подстрока = NULL; int Счетчик_подстрок = 0,Позиция = 0; //------------------------------- for(int a1 = 0; a1 < 30000; a1++) { //-------------------------- //Формируем строку сообщения: //-------------------------- Строка += source[a1] + "`"; //-------------------------- //Даем комманду второй стороне подготовить массив для приема сообщения. //-------------------------- if((int)source[a1] == _STOP) { if(EventChartCustom(0,RESIZE_CONTENT,a1 + 1,0,NULL))Alert(__FUNCTION__," Сообщение source_size_message было отправлено! "); //--------------------------------------- //Разбиваем строку сообщения по блокам из 127-ми символов и записываем их в массив. //--------------------------------------- for(int b1 = 0; b1 < 900; b1++) { Подстрока = StringSubstr(Строка,Позиция,127); if(Подстрока == NULL)break; //--------------------- Данные[Счетчик_подстрок] = Подстрока; Счетчик_подстрок++; Позиция += 127; } //--------------------------------------- break; } } //------------------------------- //Пересылаем сообщения частями. //------------------------------- for(int a2 = 0; a2 <= Счетчик_подстрок; a2++) { EventChartCustom(0,DOWNLOADING_CONTENTS,a2,0,Данные[a2]); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+
Прием сообщения на другой стороне внутри OnChartEvent():
if(id == CHARTEVENT_CUSTOM + DOWNLOADING_CONTENTS) { Строка += sparam; }
Далее, сообщение распаковывается и делать с ним можно все что угодно.
Я советую разрабатывать это направление. За ним будущее.
Дикий лес, fxsaber. Все проще.
Реализовал полноценную связь между программами через EventChartCustom()
Этот вариант был сразу описан во втором сообщении этой ветки.
Это теория. Я предоставил практический пример. Пользуюсь этим способом постоянно, поэтому, знаю о чем говорю.
Это теория. Я предоставил практический пример. Пользуюсь этим способом постоянно, поэтому, знаю о чем говорю.
Это не теория, а цитата из рабочего решения из КБ. Что же касается Ресурсов, то это наилучший способ передачи данных, т.к. прошел несколько жестких проверок.
Это не теория, а цитата из рабочего решения из КБ. Что же касается Ресурсов, то это наилучший способ передачи данных, т.к. прошел несколько жестких проверок.
Как вариант для передачи больших массивов данных, да. Но маленькие сообщения? Тоже через ресурсы передавать? Не уверен, что хорошее решение.
Как вариант для передачи больших массивов данных, да. Но маленькие сообщения? Тоже через ресурсы передавать? Не уверен, что хорошее решение.
Первый ответ в этой ветке содержит все варианты передачи данных без DLL. К чему этот разговор?
Суть в том, что если передавать маленькие сообщения через ресурсы, то сигнал о передачи все равно нужно передавать через EventChartCustom.
Спрашивается, а зачем нам две операции внутри одной передачи, если можно использовать одну?
Поэтому, EventChartCustom. мне видится более универсальным способом, нежели остальные варианты.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования