Обсуждение статьи "Моделирование рынка (Часть 12): Сокеты (VI)"

 

Опубликована статья Моделирование рынка (Часть 12): Сокеты (VI):

В данной статье мы рассмотрим, как решить некоторые проблемы и вопросы, возникающие при использовании кода, написанного на Python внутри других программ. А если говорить более конкретно, то мы покажем распространенную проблему, возникающую при использовании Excel в связке с MetaTrader 5, хотя для этого общения мы будем использовать Python. Однако у данной реализации есть небольшой недостаток. Это происходит не во всех, а только в некоторых конкретных случаях. Когда это происходит, необходимо понять причину. В сегодняшней статье мы начнем объяснять, как решить эту проблему.

В предыдущей статье, "Моделирование рынка (Часть 11): Сокеты (V)", мы рассказали, как создать приложение на Python для использования в Excel. Цель данного приложения - показать, как создать эхо-сервер в Python. Особенность заключалась в том, что данные, связанные с событиями подключения и закрытия, отображались в Excel.

На самом деле, данный сервер не очень полезен для нас, в основном из-за того, что он позволяет только одно соединение, и серверы, целью которых является установление только одного соединения, не слишком полезны. Однако я не хочу, чтобы вы зацикливались на этой детали. Замысел состоял в том, чтобы показать, как скрипт, написанный на Python, может прозрачно работать в Excel. Однако для того, что нам нужно, наш сервер должен быть немного сложнее. Для этого нам придется сделать ещё несколько вещей.

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

В этой статье мы не будем работать непосредственно с Excel или MQL5. Но в случае с MQL5 мы сможем его использовать. Точнее, мы будем использовать то, что разработали в этой же серии. Для полного понимания материала, будет полезно также ознакомиться с тем, что было сделано в MQL5.


Автор: Daniel Jose

 
Я хотел бы выразить глубокую благодарность за знания и мудрость, которыми вы здесь делитесь.
 

Спасибо за информацию статьи еще читаю... как то сокеты могут помочь для связки двух терминалов МТ5 от разных брокеров? на одном форекс на другом moex - парный трейдинг с двух терминалов можно реализовать через сокеты? 

сам эту тему копаю... извините заранее, если маленько не в тему статей вопрос мой... еще читаю статьи и ищу решения для двух МТ5 торги в связке и получение котировок символов от разных бирж по сути и торги в связке после анализа данных по котировкам 2-3-4-5 ти символов....

вот буду сокеты крутить: 

  • Межтерминальный обмен: данные идут напрямую между МТ5 А и МТ5 Б.

  • События:  OnSocketEvent() срабатывает мгновенно при получении данных.

  • Гибкость данных: можно передавать JSON, бинарные структуры, массивы.

  • Скорость: задержка на порядок ниже, чем у опроса переменных.

  • Надёжность: есть механизмы повторной отправки и подтверждения.

вот в этом контексте планирую делать:  расширенный Python-сервер с вычислением спреда, ACK/NACK, хранением состояний позиций и веб-интерфейсом для мониторинга;

// Терминал А
string msg = "{\"cmd\":\"OPEN\", \"symbol\":\"USDRUBF\", \"volume\":1.0}";
SocketSend(socket, msg);

// Терминал Б
string cmd;
SocketReceive(socket, cmd);  // Получил полную структуру сигнала
Посмотрите, вроде работает даже на МТ5
Посмотрите, вроде работает даже на МТ5
  • 2025.10.29
  • www.mql5.com
Вот индикаторы эквити есть - мое прочтение это на МТ5. почему спрашиваю - поставил зеркальные в 4 - прокатило - GBPUSD и EURGBP - индикатор в мт5 исчез Реверс. А по индикаторам с МТ4 там в ветке они описаны как ими пользоваться
 
Roman Shiredchenko # :

Спасибо за информацию статьи еще читаю... как то сокеты могут помочь для связки двух терминалов МТ5 от разных брокеров? на одном форекс на другом moex - парный трейдинг с двух терминалов можно реализовать через сокеты? 

сам эту тему копаю... извините заранее, если маленько не в тему статей вопрос мой... еще читаю статьи и ищу решения для двух МТ5 торги в связке и получение котировок символов от разных бирж по сути и торги в связке после анализа данных по котировкам 2-3-4-5 ти символов....

вот буду сокеты крутить: 

  • Межтерминальный обмен : данные идут напрямую между МТ5 А и МТ5 Б.

  • События :  OnSocketEvent()  срабатывает мгновенно при получении данных.

  • Гибкость данных : можно передавать JSON, бинарные структуры, массивы.

  • Скорость : задержка на порядок ниже, чем у опроса переменных.

  • Надёжность : есть механизмы повторной отправки и подтверждения.

вот в этом контексте планирую делать:   расширенный Python-сервер с вычислением спреда, ACK/NACK, хранением состояний позиций и веб-интерфейсом для мониторинга;

Ваш вопрос актуален и интересен. Но, мне кажется, вы делаете поспешные выводы. Позвольте уточнить: хотя MQL5 и реализует сокеты, как я объясняю в своих статьях, он не позволяет создать сервер. Только клиент. Следовательно, многое из того, что вы планируете сделать , НЕВОЗМОЖНО реализовать на MQL5. Вам потребуется внешний код. В вашем случае вы упоминаете использование Python, что само по себе уже является решением.

На самом деле, многое из того, что вам нужно, можно реализовать на Python. Однако есть небольшая проблема с тем, что вы пытаетесь сделать: взаимодействие напрямую с брокером. Почему я это говорю? Из соображений безопасности брокеры обычно не принимают доступ через сокеты. Для такого взаимодействия существует специальный протокол, специально предназначенный для предотвращения перебоев во внутренних механизмах брокера. Но попытка не пытка. Они могут сообщить вам протокол связи, чтобы вы могли получить к нему доступ, когда вам удобно. Но не думайте, что это будет легко, если только у вас нет ОЧЕНЬ БЛИЗКОГО ДРУГА в брокерской компании, который может предоставить вам необходимую информацию.

Ещё один момент, который привлёк моё внимание, — это взаимодействие и обмен информацией между двумя разными экземплярами MetaTrader 5. По моему скромному мнению, то, что вы пытаетесь сделать, — не лучшая идея. Вы не понимаете некоторых концепций параллельного программирования и связанных с ним проблем. Если вас не затруднит, попробуйте изучить задачу «производитель-потребитель». Это поможет вам понять уровень сложности и подводные камни, с которыми можно столкнуться при передаче информации между разными экземплярами MetaTrader 5 в торговых целях.

В любом случае, удачи с вашим проектом. 🙂👍

 
Daniel Jose #:

Ваш вопрос актуален и интересен. Но, мне кажется, вы делаете поспешные выводы. Позвольте уточнить: хотя MQL5 и реализует сокеты, как я объясняю в своих статьях, он не позволяет создать сервер. Только клиент. Следовательно, многое из того, что вы планируете сделать , НЕВОЗМОЖНО реализовать на MQL5. Вам потребуется внешний код. В вашем случае вы упоминаете использование Python, что само по себе уже является решением.

На самом деле, многое из того, что вам нужно, можно реализовать на Python. Однако есть небольшая проблема с тем, что вы пытаетесь сделать: взаимодействие напрямую с брокером. Почему я это говорю? Из соображений безопасности брокеры обычно не принимают доступ через сокеты. Для такого взаимодействия существует специальный протокол, специально предназначенный для предотвращения перебоев во внутренних механизмах брокера. Но попытка не пытка. Они могут сообщить вам протокол связи, чтобы вы могли получить к нему доступ, когда вам удобно. Но не думайте, что это будет легко, если только у вас нет ОЧЕНЬ БЛИЗКОГО ДРУГА в брокерской компании, который может предоставить вам необходимую информацию.

Ещё один момент, который привлёк моё внимание, — это взаимодействие и обмен информацией между двумя разными экземплярами MetaTrader 5. По моему скромному мнению, то, что вы пытаетесь сделать, — не лучшая идея. Вы не понимаете некоторых концепций параллельного программирования и связанных с ним проблем. Если вас не затруднит, попробуйте изучить задачу «производитель-потребитель». Это поможет вам понять уровень сложности и подводные камни, с которыми можно столкнуться при передаче информации между разными экземплярами MetaTrader 5 в торговых целях.

В любом случае, удачи с вашим проектом. 🙂👍

СПАСИБО большое за предоставленную обратную связь... нет друзей в брокерских компаниях!!!  ) есть терминалы МТ5 в двух разных брокерских конторах! надо их подружить... ) это проект на следующий год!!!

вот - пытаюсь... спасибо за статьи  - читаю изучаю содержимое!!! если скорости ок будут позволять - то может и напрямую через файлы сделаю... доступ - по типу как ранее жесткие диски подключали в биосе два шт: один master другой slave... )

так и здесь... на мощном компе два терминала МТ5 один мастер (основной) - другой ведомый (второй), на одном биржа - на другом МТ5 форекс! может реализация через файлы ) чтение - запись сделаю...  но хотелось бы более быстрый легкий в плане чтения - получения данных вариант реализовать.... по типу глобальных переменных клиентского терминала (файлы не использую - долго), но глобальные переменные клиентского терминала видны только в этом терминале.... нужно подключение внешних процессов... может быть таблиц в памяти сделать... типа dll библиотек подключения реализую!!!

Хорошего дня!