Соединитель ZeroMQ все еще успешно отправил данные, но не смог получить ответ от сервера MT4 - PullRequest
2 голосов
/ 16 апреля 2020

Я новичок в этом сообществе.

Я следил за 7 видеоуроками о том, как взаимодействовать python с MetaTrader Terminal 4, и без проблем запустил их на ядре i Python в соответствии с инструкциями в этом видео

Без проблем я имею в виду, что сделка была легко отправлена ​​на сервер, и клиент (мой ноутбук) получил надлежащий ответ после выполнения каждого действия. Когда я звоню zmq._get_response_(), я могу получить доступ к ответу сервера.

Проблема начинает возникать, когда я хочу скомпилировать класс DWX_ZeroMQ_Connector в программе. Итак, я начинаю с простой программы, подобной этой:

def main():  
    zmq = DWX_ZeroMQ_Connector()
    my_trade = { '_action':       'OPEN',
                 '_type':         0,
                 '_symbol':       'USOIL',
                 '_price':        0.0,
                 '_SL':           0,
                 '_TP':           0,
                 '_comment':      'dwx-zeromq',
                 '_lots':         0.01,
                 '_magic':   123456,
                 '_ticket':       0
                 }
    #
    zmq._DWX_MTX_NEW_TRADE_(_order=my_trade)
    #
    reply     = zmq._get_response_()  
    all_trade = zmq._DWX_MTX_GET_ALL_OPEN_TRADES_()
    #
    print( "reply" + str( reply ) )
    print( "----------------------" )
    print( "alltrade" + str( all_trade ) )

main()

Странная часть этого сценария - ПОСТОЯННО ОТПРАВЛЯТЬ ЗАКАЗЫ УСПЕШНО, НО НЕ ПРЕПЯТСТВУЕТ НИКАКОЙ ОТВЕТНОЙ ОБРАТНОЙ СВЯЗИ, поскольку ответ оказался нулевым. Боролся с этим в течение недели.

Некоторая дополнительная информация:

  • Я обнаружил проблему, когда не получал ответ только при использовании приглашения Anaconda для выполнения скомпилированного файла, но Я получил правильный ответ на ядро ​​i Python, поэтому я предположил, что это не может быть моей зависимостью. Оба работали на локальном хосте

  • страница github, которую я клонировал, является последней версией v2.0.1 RC8 версия

  • Вот печатная версия zmq._get_response_() enter image description here
  • Вот мои параметры для кода MQL4 enter image description here
  • Вот картинка MT4 активно выдвигает кавычку enter image description here

    • Вот изображение консоли, когда я пытался установить _monitor = True в процессе инициализации объекта DWX_ZeroMQ_Connector. Теперь он даже не смог отправить сделки в Терминал 4 MetaTrader ( сервисный сервер DWX-кода на стороне терминала ) и, конечно, все еще не смог получить ответ. enter image description here

    • Вот копия журнала терминала и журнала эксперта примеры при попытке получить ответ от терминала МТ4 (сервер ). Поскольку были выходные, мне пришлось экспериментировать с bitcoin сделкой.


ЖУРНАЛ ТЕРМИНАЛА

0   16:33:17.600    MetaTrader build 1260 started (Exness Ltd.)
0   16:33:17.600    Windows 10 Pro x64, IE 11, UAC, 4 x Intel Core i7-5500U  @ 2.40GHz, Memory: 4899 / 8103 Mb, Disk: 73 / 99 Gb, GMT+7
0   16:33:17.600    Data Folder: C:\Users\Admin\AppData\Roaming\MetaQuotes\Terminal\F5C18A2156882613427FB4ACF0892997
2   16:33:20.664    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: loaded successfully
2   16:33:20.767    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:22.258    '36006969': login on Exness-Trial4 through DC00 (ping: 235.09 ms)
0   16:33:24.299    '36006969': login datacenter on Exness-Trial4 through DC00 (ping: 235.09 ms)
0   16:33:24.933    '36006969': previous successful authorization performed from 171.255.70.226
2   16:33:31.235    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: removed
2   16:33:31.247    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:42.019    '36006969': order buy market 0.01 BTCUSD sl: 0.00 tp: 0.00
0   16:33:42.514    Trades: use hosting service to speed up the execution - 0.33 ms via 'MQL5 Amsterdam 01 (MQL5.community)' instead of 235.09 ms
0   16:33:42.514    '36006969': order was opened : #2991084 buy 0.01 BTCUSD at 7110.21 sl: 0.00 tp: 0.00
2   16:35:11.850    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: removed
2   16:35:11.866    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: removed
0   16:35:12.081    MetaTrader build 1260 stopped

ЖУРНАЛ ЭКСПЕРТА:

0   16:33:20.269    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1: loaded successfully
0   16:33:20.270    DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=false; 
0   16:33:20.664    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1: loaded successfully
0   16:33:20.664    DWX_ZeroMQ_Server_v2.0.1_RC8 USOIL,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=false; 
00  16:33:20.767    Expert DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1: loaded successfully
0   16:33:20.767    DWX_ZeroMQ_Server_v2.0.1_RC8 GBPJPY,H1 inputs: PROJECT_NAME=DWX_ZeroMQ_MT4_Server; ZEROMQ_PROTOCOL=tcp; HOSTNAME=*; PUSH_PORT=32768; PULL_PORT=32769; PUB_PORT=32770; MILLISECOND_TIMER=1; t0=--- Trading Parameters ---; MagicNumber=123456; MaximumOrders=1; MaximumLotSize=0.01; MaximumSlippage=3; DMA_MODE=true; t1=--- ZeroMQ Configuration ---; Publish_MarketData=true; 

1 Ответ

1 голос
/ 16 апреля 2020

В случае, если кто-то никогда не работал с ZeroMQ,
здесь можно с первого взгляда посмотреть на "ZeroMQ Принципы менее чем за Пять секунд"
, прежде чем углубляться в подробности



Исходный код DWX_ZeroMQ_Connector(), предоставленный как есть, страдает от нескольких недостатков ZeroMQ в самообслуживании. защита узла связи от взаимоблокировки и отсутствие нескольких касаний для достижения надежности программного обеспечения профессионального уровня.

Тем не менее, самое большое предупреждение - явный оператор только для Win10 + подчиняется всем зависимостям DLL + НЕ ИСПОЛЬЗУЕТСЯ в я Python + не обновляюсь до v2.0.2 , поэтому следуйте ему, пока авторы не опубликуют sh стабильную и надежную версию. Если кто-то решил выстрелить себе в собственную ногу, это может быть мудрым шагом, чтобы никогда не выстрелить себе в собственную ногу и не делать прямо противоположное, а затем попросить сообщество StackOverflow помочь и спасти самоуничтоженную ногу, не так ли?


( v2.0.2 в настоящее время в бета-тестировании, пожалуйста, не обновляйте до v2.0.2 )
...
5) Этот проект и весь сопровождающий его исходный код должны выполняться автономно (например, через консоль Python или I Python , или пакетный процесс).

6) Пожалуйста НЕ запускайте этот код в Jupyter или I Python Ноутбуках.

7) Зависимости проекта требуют MS VC ++ Библиотеки . Без них вы можете столкнуться с ошибками «истечения времени ожидания ресурса». DLL в проектах зависимостей (mql-zmq, libzmq, libsodium) требуют , чтобы у вас была установлена ​​последняя версия Visual C ++ runtime (2015) библиотеки.

8) Этот проект не тестировался в эмулируемых средах (например, WINE, VMWare и др. c).

9) Этот проект в настоящее время предназначен для использования исключительно в Windows 10 средах.

StackOverflow поощряет пользователей соблюдать Политики при публикации высококачественных Вопросов. В этом смысле было бы справедливо опубликовать:

  • a полная копия всех print -едных ответов от запущенного DWX_ZeroMQ_Connector()
  • копия журнала терминала MetaTrader, в которой были сделаны подключения с узла python к узлу терминала MetaTrader.
  • копия параметров MQL4-кода терминала MetaTrader:

enter image description here

  • копия доказательства активной работы терминала MetaTrader - получение торговых заявок и нажмите QUOTE-обновления:

enter link description here


Лучше проверьте все опубликованные условия совместимости Darwinex выше и проверьте свое соответствие установленным правилам.


По-прежнему отсутствует: полная копия [ Терминала Metatrader JOURNAL (журнал) ] с первой строки:
2020.04.12 11: 10: 46.093 MetaTrader - {BrokerEntity} сборка 1090 запущена ({WhiteLabel}) до конца эксперимента. - user3666197 23 часа a go

hi @ user3666197 Я загрузил в мой репозиторий github репозиторий и Журнал терминала, а также удалил ненужную информацию (индикаторы инициализированы, .et c ) для вашего удобства :) - tiensison 51 мин. go

StackOverflow настоятельно не рекомендует ссылаться на сторонние ресурсы, тем более со слабыми или вообще отсутствующими ссылками. Поместите все относящиеся к проблеме данные (, а не для my удобство) в качестве состояния политик StackOverflow для передового опыта сообщества.


ЭПИЛОГ: " ... не удалось получить ответы от МТ4 ..." , ну не так ...

Проблема (не получен МТ4. PUSH -es) вызвано непониманием правил игры, а шаги, необходимые для рабочего решения, скрыты в -3- разных местах:

1) API- издатель, Darwinex , возможно, где-то задокументировал это, но первый провал - попытка использовать один и тот же TCP-порт # три раза, у которого нет другого шанса, кроме как взломать sh любые такие поздние попытки получить уже полученный ресурс (так как код, связанный с ZeroMQ в версии 2.0.1 (как есть, поскольку у меня были шансы просмотреть), не использует надлежащие параметры самозащиты, эти сбои могут блокировать любые другие варианты использования из-за зависания Context() - экземпляры, некоторые могут сохраняться даже до перезагрузки O / S.

2) Инициализация Expert явно отключена в 2 из 3 случаев запуска, когда-либо получать уведомления о MT4. PUSH -ed FxMarketEVENTs (QUOTE - (tick) -data), почетным пользователем ее / его / х / жидкость / * - self

3) Вы ложно ожидаете, что код v2.0.1-RC8 что-то делать, это было явно установлено в императивной настройке кода, чтобы не делать (опять-таки, API-издатель, Darwinex , мог бы где-то задокументировать эту слабость, но учитывая, что Брокер свободен назвать торгуемые инструменты свободными как позволяют условия лицензии и ограничения конфигурации пакета MT4-Server для MetaQuotes, это ваш головной удар, если вы не адаптируете код для соответствия фактическим _Symbol именам своего брокера и headbang в третий раз из-за всех этих несоответствий дела)

0   16:33:20.270           DWX_ZeroMQ_Server_v2.0.1_RC8 EURUSDm,H1 inputs: PROJECT_NAME       =      DWX_ZeroMQ_MT4_Server;
                                                                           ZEROMQ_PROTOCOL    =      tcp;
                                                                           HOSTNAME           =      *;
                                                                           PUSH_PORT          =  32768;
                                                                           PULL_PORT          =  32769;
                                                                           PUB_PORT           =  32770;
                                                                           MILLISECOND_TIMER  =      1;
                                                                           t0                 =      --- Trading Parameters ---;
                                                                           MagicNumber        = 123456;
                                                                           MaximumOrders      =      1;
                                                                           MaximumLotSize     =      0.01;
                                                                           MaximumSlippage    =      3;
                                                                           DMA_MODE           =      true;
                                                                           t1                 =      --- ZeroMQ Configuration ---;
                                                                           Publish_MarketData =      false;
###########################################################################^^^^^^^^^^^^^^^^^^--------!!!!!!-( YOU OWE ME A BEER ................... )

Вы должны мне пиво ...

...