Обсуждение статьи "WebSocket для MetaTrader 5 — Асинхронные клиентские соединения с помощью Windows API"
Здравствуйте, я тоже считаю, что это отличная статья.
Я разрабатываю советник, который использует несколько индикаторов. Изначально я решил функционализировать расчеты индикаторов, чтобы они могли использоваться как в графике индикатора, так и в советнике. После тестирования в тестере стратегий я обнаружил, что функция Bars возвращает разное значение между индикатором, работающим в визуальном режиме, и значением, определяемым советником. Не знаете ли вы, как сообщить разработчикам об этой и других ошибках, которые я обнаружил в MLQ5?
Простым решением было использовать iCustom, который я ранее использовал в MQL4. Однако версия MQL5 позволяет использовать CopyBuffer только на первом графике индикатора, а многие из моих индикаторов имеют несколько буферов на графике.
Я могу предложить следующие решения: использовать WebSockets для связи между несколькими индикаторами и советником, именованные трубы для того же самого, или разделить индикаторы на графики с одним буфером, что повлечет за собой значительное увеличение обработки из-за множества одинаковых вычислений, а также кошмарные попытки синхронизировать дюжину или более индикаторов для обеспечения точности вычислений.
Поскольку WebSockets является асинхронным, каковы последствия того, что ea будет получать десятки потоков данных от индикаторов почти одновременно? Сможет ли она справиться с этим или будут переполнения?
Любые предложения буду очень признателен.
Спасибо за ответ
CapeCoddah
Простым решением было использовать iCustom, который я ранее использовал в MQL4. Однако версия MQL5 позволяет CopyBuffer только на первом графике индикатора, а многие из моих индикаторов имеют несколько буферов.
Я могу предложить следующие решения: использовать ваши WebSockets для связи между несколькими индикаторами и советником, именованные трубы для того же самого, или разделить индикаторы на графики с одним буфером, что повлечет за собой значительное увеличение обработки из-за множества одинаковых вычислений, а также кошмарные попытки синхронизировать дюжину или более индикаторов для обеспечения точных вычислений.
Поскольку WebSockets является асинхронным, каковы последствия того, что ea будет получать десятки потоков данных от индикаторов почти одновременно? Сможет ли она справиться с этим или возникнут переполнения?
Любые предложения будут высоко оценены.
Спасибо за ответ
CapeCoddah
Здравствуйте. Вы говорите:
Простым решением было использовать iCustom, который я ранее использовал в MQL4. Однако, версия MQL5 позволяет CopyBuffer только на первом графике индикатора, а многие из моих индикаторов имеют несколько буферов.
Это не верно. Вы можете скопировать любой буфер. Все три перегрузки функции CopyBuffer позволяют копировать любой указанный вами буфер. В качестве примера можно привести первый вариант (показан ниже):int CopyBuffer( int indicator_handle, // ручка индикатора int buffer_num, // номер буфера индикатора int start_pos, // начальная позиция int count, // количество для копирования double buffer[] // целевой массив для копирования );
Второй параметр 'buffer_num' позволяет указать, какой буфер копировать - начиная с индекса 0 как первый буфер, 1 для второго буфера и т. д., что позволяет скопировать любой буфер из вашего пользовательского индикатора по вашему желанию. Примером может служить встроенный iMACD, который имеет 2 буфера (0 - MAIN_LINE, 1 - SIGNAL_LINE). Я бы посоветовал вам сосредоточиться на iCustom индикаторе для решения вашей проблемы, прежде чем пробовать WebSockets или Sockets любого типа, если на то пошло. Это гораздо более простое решение, которое не требует никаких внешних библиотек, таких как C++ DLL и т.д. Всегда старайтесь использовать язык MQL5 как можно больше, и избегайте DLL, если это не является абсолютно необходимым. Я разрабатываю на C, C++, C# и других языках, и могу сказать вам по опыту, что придерживаться MQL5 (чрезвычайно мощный язык, несмотря на его ограничения - как и любой другой язык) - это лучший подход.
Дайте мне знать, как вы продвигаетесь. Если у вас возникнут какие-либо проблемы с 'CopyBuffer', не стесняйтесь спрашивать. Если вы переходите на MQL5 с MQL4, некоторые вещи делаются по-другому, поэтому ваши знания MQL4 могут быть не совсем применимы. Но продолжайте, MQL5 намного лучше, значительно мощнее и быстрее.
Удачи.
Возможно, вам будет полезно посмотреть примеры кода:
Ryan L Johnson, 2025.04.29 19:52
Этот индикатор вызывает 3 других подоконных индикатора. Все файлы находятся в папке Indicators.Я благодарю вас обоих за ответ на мой вопрос. Я, должно быть, пропустил определения перегруженных функций и прочитал только о первой. Возможно, вы знаете, достаточно ли Terminal умен для параллельной обработки вызовов iCustom, чтобы максимизировать использование процессора, поскольку я планирую варьировать параметр символа для каждой из 28 пар и планирую иметь несколько вызовов iCustom, как Brooky Trend Strength.
Также может ли кто-нибудь из вас сказать мне, где я могу разместить комментарии об ошибках в MQ5, а также где можно разместить предложения для администраторов Mq. Я нашел несколько, в последнее время разница в Bars между терминалом и тестером стратегий. Также, у меня есть 3 экрана с основным дисплеем в крайнем левом углу. Пытаясь переместить панель. Например, панели Navigator или Market, слева направо, очень утомительно. Указатель мыши находится на самом левом экране, но перетаскиваемая панель находится в середине. Я думаю, что либо терминал, либо Windows сходят с ума, когда мышь перемещается на один пиксель, а затем переключает дисплеи, чтобы переместить панель на один пиксель и обратно.
Bars() икает там, где отсутствуют данные о цене - там, где rates_total этого не делает. Если я правильно помню, что читал в прошлом, Bars() можно исправить, обратившись к временным меткам. Возможно, стоит поискать.
У меня есть 3 экрана с основным дисплеем в крайнем левом углу. Попытка переместить панель, например панель Navigator или Market, слева направо очень утомительна. Указатель мыши находится на самом левом экране, но перетаскиваемая панель находится в середине. Я думаю, что либо терминал, либо Windows сходят с ума, когда мышь перемещается на один пиксель, а затем переключает дисплеи, чтобы переместить панель на один пиксель и обратно.
Я действительно не знаю в этом вопросе. У меня есть 3 компьютера, каждый из которых имеет свой собственный монитор и терминал. Я знаю, что в Windows обычно есть настройки отображения нескольких мониторов, включая картинку в картинке, возможно, в качестве обходного пути.
Может ли кто-нибудь еще с реальными несколькими мониторами на одной машине ответить здесь, пожалуйста?
Отличная информация!!!
Спасибо, Райан, ваш комментарий по поводу bars vs rates_total подходит. Моя проблема в том, что в терминале они идентичны, но в STrategy Tester Visualize, Bars на один больше, что привело к тому, что я не дочитал документацию до конца. Я собираюсь взять ваш вклад и использовать его для iCustom. Я предполагаю, что должен быть отдельный адрес iCustom для каждой комбинации символов и временных характеристик.
Кроме того, есть ли способ для советника отображать текст на экране в тестере стратегий? В Mq4 он делал это автоматически, но не сейчас. Я использую много объектов класса для отображения информации, и размещение второй копии в шаблоне еще больше замедляет работу тестера стратегий.
Что касается трехпанельного дисплея, я думаю, проблема в том, что терминал не обновляет местоположение монитора, когда мышь перемещается с экрана 2 на экран 1.
У меня есть 2 мини-ПК, каждый из которых поддерживает 3 монитора, поэтому я подключил 3 экрана к обоим мини-ПК и использую HDMI1 для одного ПК и HDMI2 для другого. Отлично работает с 43-дюймовыми Fire Tv, хотя вы должны убедиться, что пульты правильно настроены для управления только одним монитором (позвоните в службу поддержки amazon). Единственный недостаток - кнопка выключения отключает все мониторы, и иногда мне нужно вытащить вилку, чтобы синхронизировать питание.
CapeCoddah
- Один файл индикатора в одном каталоге может быть повторно использован несколькими экземплярами iCustom().
- Один хэндл индикатора может быть повторно использован несколькими экземплярами CopyBuffer().
- Теперь я понимаю, почему вы используете Bars(), поскольку rates_total ограничивается одним таймфреймом. Предположительно, вы используете Bars() в отдельном цикле для каждого таймфрейма.
Кроме того, есть ли способ для советника отображать текст на экране в тестере стратегий? В Mq4 он делал это автоматически, но не сейчас. Я использую много объектов класса для отображения информации, и размещение второй копии в шаблоне еще больше замедляет работу тестера стратегий.
На 3-панельном дисплее, я думаю, проблема в том, что терминал не обновляет должным образом местоположение монитора, когда мышь перемещается с экрана 2 на экран 1.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья WebSocket для MetaTrader 5 — Асинхронные клиентские соединения с помощью Windows API:
В статье "WebSocket для MetaTrader 5 — Использование Windows API" рассказывалось об использовании Windows API для реализации клиента WebSocket в приложениях MetaTrader 5. Представленная там реализация была ограничена синхронным режимом работы.
В настоящей статье мы вновь рассмотрим применение Windows API для создания клиента WebSocket для программ MetaTrader 5 с целью достижения асинхронной клиентской функциональности. Практическая методология реализации этой цели предполагает создание пользовательской динамически подключаемой библиотеки (DLL), экспортирующей функции, подходящие для интеграции с приложениями MetaTrader 5.
Соответственно, в настоящей статье будет рассмотрен процесс разработки DLL, а затем представлена демонстрация ее применения на примере программы MetaTrader 5.
Автор: Francis Dube