Советники: Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7 - страница 4

 
wf2000cn #:

Привет @Stanislav Korotky, я новичок в MQL5. Нашел, что вы выкладываете файл wss.zip для использования websocket. Как его использовать, есть ли демо или что-то, что я могу изучить. Искренне благодарю!

Несколько примеров вы можете найти в книге по алготрейдингу, в разделе, описывающем (пошаговую) реализацию проекта веб-сервиса для копирования сделок и сигналов.

MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
  • www.mql5.com
As an end-to-end demonstration project, which we will develop throughout this chapter, we will take a simple, but at the same time quite...
 
Stanislav Korotky #:

Несколько примеров можно найти в книге по алготрейдингу, в разделе, описывающем (шаг за шагом) реализацию проекта веб-сервиса для копирования сделок и сигналов.

Хорошо, я сначала изучу это. Искреннее спасибо!
 

Здравствуйте @StanislavKorotky

Я пытаюсь реализовать частичное закрытие позиции отложенным ордером в противоположном направлении.

например:

  • если у меня открыта позиция на покупку по XAUUSD размером 2 лота
  • открываю отложенный ордер на продажу по XAUUSD размером 1 лот
  • в событии OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD (transaction.type) у меня есть

MqlTradeRequestSync reqs(transaction.symbol);

reqs.closeby(target_position_ticket_id, transaction.order);

Я считаю, что приведенная выше строка должна выполнить свою работу, но моя проблема заключается в том, как получить `target_position_ticket_id`в обработчике события OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD ( transaction.type) или как-то связать отложенный ордер с target_position_ticket_id, который должен закрываться каждый раз, когда отложенный ордер будет исполнен.

Я попробовал добавить `target_position_ticket_id`в комментарий отложенного ордера, когда создаю отложенный ордер, но проблема в том, что внутри OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD (transaction.type) я не могу получить доступ к комментарию, так как
атрибутыMqlTradeTransaction не имеют 'comment'

Пожалуйста, буду благодарен за помощь.

 
pauldic MqlTradeTransaction отсутствует 'comment'.

Метод closeby(ticket1, ticket2) из книги предполагает, что вы используете хеджирующий счет и у вас уже есть 2 открытые позиции (покупка и продажа) с тикетами ticket1 и ticket2. Полагаю, что выполнить действие TRADE_ACTION_CLOSE_BY против отложенного ордера невозможно (в общем случае). Но если ваш счет находится в режиме неттинга, я думаю, вы можете просто выставить отложенный ордер в противоположном направлении, и когда он сработает, он соответствующим образом изменит существующую позицию - закроет ее, или сделает частичное закрытие, или даже инверсию (если новый объем больше старого).

 
Небольшие исправления в websockets (a la carte & en masse).
Файлы:
wsprotocol.mqh  17 kb
wss.zip  16 kb
 
Stanislav Korotky #:
Небольшие исправления в websockets (a la carte & en masse).
@StanislavKorotky Спасибо за постоянное обновление, пожалуйста, есть кое-что, с чем я не могу разобраться. В MT5 "Обзор рынка" я могу щелкнуть правой кнопкой мыши на любом "Символе" и просмотреть все связанные с ним свойства так же, как и программно, нажав на "Спецификацию".

Одним из этих свойств является "Комиссия" Символа, которая, очевидно, отличается у разных брокеров, как видно на приложенной картинке. Однако я не смог получить доступ к этому свойству программно. Пожалуйста, не могли бы вы подсказать, как получить комиссионные символа?


Кроме того, это сообщение часто появляется в журнале при работе с PositionFilter, особенно когда советник загружается в первый раз или перекомпилируется "Unresolved int value as enum: 8 для MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>". Он по-прежнему работает нормально и ничего не останавливает
Файлы:
 
pauldic #:
@StanislavKorotky Спасибо за постоянное обновление, пожалуйста, есть кое-что, что я пытался выяснить. В MT5 "Обзор рынка" я могу щелкнуть правой кнопкой мыши на любом "Символе" и просмотреть все связанные с ним свойства так же, как и программно, нажав на "Спецификацию".

Одно из этих свойств - "Комиссии" Символа, которые, очевидно, отличаются у разных брокеров, как видно на приложенной картинке. Однако я не смог получить доступ к этому свойству программно. Пожалуйста, не могли бы вы подсказать, как получить комиссию символа?

К сожалению, не все свойства сущностей терминала доступны через MQL5.

pauldic #:
На стороне это сообщение часто появляется в журнале, когда я работаю с PositionFilter, особенно когда советник загружается в первый раз или перекомпилируется "Unresolved int value as enum: 8 для MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>". Он по-прежнему работает нормально и ничего не останавливает.

Это просто предупреждение, вызванное тем, что соответствующее встроенное перечисление MQL5 имеет пробел в константах, которые обычно назначаются последовательно. Этот разрыв возникает из-за того, что MQL5 постоянно меняется, и некоторые константы могут устареть и быть удалены. Вы можете отредактировать исходный код, чтобы предотвратить появление подобных предупреждений.

 

Прилагаю обновленную версию библиотеки JSON - toyjson3.mqh - замену toyjson2.mqh и toyjson.mqh из книги.

Эта версия оптимизирована для обработки огромных json-файлов. Для простоты предыдущие версии использовали функцию StringSplit для токенизации текста во время парсинга, и этот вызов может внутренне запрашивать гигабайты свободной памяти из-за фрагментации и ожидания дальнейшего потока данных. Она освобождается после парсинга, но менеджер памяти MQL5 может держать ее в резерве еще некоторое время, поскольку освобождает мусор отложенным способом.

Теперь во время парсинга требуется в разы меньше памяти.

Файлы:
toyjson3.mqh  39 kb
 
Вот еще одно незначительное исправление в ToyJson3.mqh - числа с плавающей точкой и экспонентой (научная нотация, например, "1e-8") теперь корректно распознаются при разборе.
Файлы:
toyjson3.mqh  39 kb
 
Stanislav Korotky #:
Я прилагаю несколько исправлений и улучшений в классах websockets.

Это именно то, что мне было нужно.

Огромное вам спасибо.

Ты чувствуешь себя этим парнем для меня.

https://clip.cafe/top-gun-maverick-2022/good-afternoon-ladies-gentlemen-s2/

Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
  • clip.cafe
Watch the clip 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' from the movie Top Gun: Maverick on Clip.Cafe. Lt. Jake 'Hangman' Seresin: [after destroying the plane that almost killed Maverick and Rooster] Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your seat belts, return the tray tables to their locked an upright positions and prepare for landing. Bradley 'Rooster' ...