Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
So the promised 3 years are waiting... there is very little left - a year to wait ))
Вероятно :))
Опубликована новая статья Websockets для MetaTrader 5:
Автор: Франсис Дюбе
Привет, отличная работа @Francis Dube,
Я реализовал вашу библиотеку для работы с моим сервером веб-сокетов в nodejs/nestjs. Проблема в том, что когда я использую сокеты локально с моим сервером, все работает нормально. mql5 сокет отправляет рукопожатие, я получаю правильный ответ, т.е. "101 Switching protocols".
Но все меняется, как только я развертываю свое приложение nestjs на платформе приложений digitalocean. Первоначально я не мог подключить mql5 сокеты к моему серверу, но затем я смог подключиться к нему, но я не получаю правильный ответ для рукопожатия, из-за чего метод подключения из "CWebsocketClient" возвращает false, поскольку метод обновления не смог разобрать какой-либо ответ, я получаю только "H" в качестве ответа от моего развернутого приложения.
Хотя я не уверен в остальной функциональности, поскольку статус сокета постоянно устанавливается на "CONNECTING", я не могу ничего сделать после успешного подключения. Однако, если после вызова метода connect отправить данные на мой сервер с помощью метода "sendString" , то данные будут доставлены.
И вот тут я запутался в том, как реализовать все это в моем приложении, так как я не могу протестировать рукопожатие другим способом, я пробовал расширения, чтобы проверить, работает ли мой веб-сокет в моем приложении, оказалось, что он работает нормально, но как только дело доходит до mql5, все запутывается и не достаточно продумано, чтобы понять причину такого поведения.
Любые рекомендации или советы по этому вопросу будут очень признательны.
PS: Я не делаю никаких наворотов в моем mql5 советнике, я просто следую руководству по подключению в статье и просто соединяюсь с сервером. Больше ничего! :(
Обратите внимание, что в WebsocketClient.fillRxBuffer есть ошибка в сценарии, когда в цикле while происходит несколько вызовов m_socket.Read(...).
m_socket.Read(...) не добавляет данные в конец массива, а записывает в начало массива.
В моем случае, когда я подключался к локальному веб-сокету для тестирования, я обнаружил, что первый вызов m_socket.Read(...) получает только один байт, а второй цикл m_socket.Read(...) получает все остальное. В результате в буфере отсутствовал первый байт, что приводило к ошибке при разборе кадра.
Также необходимо убедиться, что m_rxbuf пуст перед заполнением буфера, иначе он может подумать, что было получено больше данных, чем на самом деле. Буфер очищается после разбора кадра, но на всякий случай я решил очищать его при каждом вызове fillRxBuffer.
Я также сделал так, чтобы m_socket.Read(...) прекращал цикл, когда больше нет данных для чтения, чтобы не ждать таймаута. В идеале, я думаю, он должен продолжать чтение до тех пор, пока не будет достаточно данных для разбора кадра, но это требует некоторой реструктуризации кода.
Тем не менее спасибо за эту статью. Пока что это самое близкое решение к тому, что я искал. В конечном итоге я могу создать свою собственную библиотеку веб-сокетов.
h ttps:// www.mql5.com/en/book
Я думаю, вы путаете вебсокеты с обычными сетевыми сокетами или обычными HTTP WebRequests. Вебсокеты требуют пользовательского кодирования поверх обычных HTTP-запросов. Мне удалось получить решение, основанное на этой статье, с некоторыми изменениями в зависимости от проекта.
Мне кажется, вы путаете веб-сокеты с обычными сетевыми сокетами или обычными HTTP WebRequests. Вебсокеты требуют пользовательского кодирования поверх обычных HTTP-запросов. Мне удалось получить решение, основанное на этой статье, с некоторыми изменениями в зависимости от проекта.
Дал вам подсказку,
если вы не хотите заглядывать в книгу, это ваша потеря, а не моя ;)
Также необходимо убедиться, что m_rxbuf пуст перед заполнением буфера, иначе он может подумать, что было получено больше данных, чем на самом деле. Буфер очищается после разбора кадра, но на всякий случай я решил очищать его при каждом вызове fillRxBuffer.
Я также сделал так, чтобы m_socket.Read(...) прекращал цикл, когда больше нет данных для чтения, чтобы не ждать таймаута. В идеале, я думаю, он должен продолжать чтение до тех пор, пока не будет достаточно данных для разбора кадра, но это требует некоторой реструктуризации кода.
Тем не менее спасибо за эту статью. Пока что это самое близкое решение к тому, что я искал. В конечном итоге я могу создать свою собственную библиотеку веб-сокетов.
Заранее спасибо.
Пожалуйста, @ Shane Leigh Kingston, я знаю, что это старое сообщение, но мне нужен способ реализовать websocket с mql5, и эта библиотека кажется единственной относительно близкой к этому. Но я снова столкнулся с проблемой, которую вы только что описали, но я не эксперт в этой области. Пожалуйста, не могли бы вы подсказать мне, как заставить это работать. Я буду очень благодарен, если вы сможете помочь.
В книге по алготрейдингу есть еще одна реализация websockets.
Актуальную версию исходных кодов вы можете найти в обсуждении на форуме:
Форум о трейдинге, автоматических торговых системах и тестировании торговых стратегий
Эксперты: Программирование на MQL5 для трейдеров - исходные коды из книги. Часть 7
Станислав Короткий, 2025.03.10 13:32
Прилагаю несколько исправлений и улучшений в классах websockets.В книге по алготрейдингу есть еще одна реализация websockets.
Актуальную версию исходных кодов вы можете найти в обсуждении на форуме: