Обсуждение статьи "Соединение MetaTrader 5 и Python: получение и отправка данных" - страница 7

 
yogibass:

@Максим Дмитриевский

Я просто хотел сказать спасибо за то, что вы сделали это доступным. Я всегда хотел иметь возможность кодировать свои индикаторы на Python, и с тех пор, как вы начали эту тему, я получил доступ к фьючерсным данным в реальном времени и использую их для разработки и запуска своих индикаторов. Я использую свой Python для построения графиков и анализа живого потока, а сделки заключаю через платформу MT5 - все работает отлично. Пожалуйста, продолжайте в том же духе, и я искренне надеюсь, что Python будет полностью принят сообществом MT.

Спасибо и наилучшие пожелания!

Здравствуйте, вы не знаете, почему код не компилируется, я получаю значение none.

rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates
 
Dannyhill.0:
Здравствуйте, вы знаете, почему код не компилируется, я получаю значение none.

Несколько причин...

  • отсутствие скобки на списочном компе
  • использование устаревших функций из пакета MetaTrader5
  • i не определено
  • загрязнение пространства имен за счет использования from x import * (возможны коллизии?)
  • close не является атрибутом ndarray
  • не используйте итер ndarray для извлечения серии
  • терминал инициализирован?

Это должно выглядеть так

import MetaTrader5 as mt

try:
    if not mt.initialize():
        raise Exception('Failed to initialize')
    close_price_map = {}
    for symbol in ['EURUSD', 'USDJPY']:
        rates = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_M1, 0, 5)
        close_price_map[symbol] = rates['close']
        print(symbol)
        print(close_price_map[symbol])
except Exception as e:
    print(e)
finally:
    mt.shutdown()
    
# EURUSD
# [1.12594 1.12598 1.12584 1.12564 1.12543]
# USDJPY
# [107.5   107.494 107.509 107.525 107.527]

См. документацию https://www.mql5.com/ru/docs/integration/python_metatrader5

Documentation on MQL5: Integration / MetaTrader for Python
Documentation on MQL5: Integration / MetaTrader for Python
  • www.mql5.com
Python is a modern high-level programming language for developing scripts and applications. It contains multiple libraries for machine learning, process automation, as well as data analysis and visualization. MetaTrader package for Python is designed...
 
Я пытаюсь использовать это для MT4, и он говорит"SocketClose функция не определена" ... MQL5 функции также работают для MQL4? Я не вижу ничего в документации. Это должно работать на MQL4? Вы можете помочь мне разобраться с этим, пожалуйста?
 

нашел очень хороший github

python metatrader api

 
sanazgolriz:
Я пытаюсь использовать это для MT4, но он говорит"SocketClose функция не определена" ... MQL5 функции также работают на MQL4? Я не вижу ничего в документации. Это должно работать на MQL4? Вы можете помочь мне разобраться с этим, пожалуйста?

Привет, я думаю, что функции сокетов не работают в metatrader4.

Вы можете использовать их в mt5, также вы можете использовать новый пакет MetaTrader5 (см. документацию)

для mt4 вы можете попробовать zeromq

Documentation on MQL5: Integration / MetaTrader for Python
Documentation on MQL5: Integration / MetaTrader for Python
  • www.mql5.com
Python is a modern high-level programming language for developing scripts and applications. It contains multiple libraries for machine learning, process automation, as well as data analysis and visualization. MetaTrader package for Python is designed...
 

Здравствуйте, Максим!

В другой ветке Вы мне помогли с доработкой кода, за что ещё раз хочу Вас поблагодарить. Прошелся поиском по сайту MQL5 и вот нашёл Вашу статью про получение и отправке данных с применением языка программирования Python. Меня как раз интересует эта тема.  Однако возник дилетантский, возможно даже, детский вопрос: сетевой сокет - это какое-то физическое устройство или все-таки программный продукт в виде совокупности нескольких файлов или в виде одиночного файла, например, того же csv?

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Максим!

В другой ветке Вы мне помогли с доработкой кода, за что ещё раз хочу Вас поблагодарить. Прошелся поиском по сайту MQL5 и вот нашёл Вашу статью про получение и отправке данных с применением языка программирования Python. Меня как раз интересует эта тема.  Однако возник дилетантский, возможно даже, детский вопрос: сетевой сокет - это какое-то физическое устройство или все-таки программный продукт в виде совокупности нескольких файлов или в виде одиночного файла, например, того же csv?

С уважением, Владимир.

Это программный интерфейс, через который программы (процессы) могут обмениваться данными. Например, когда вы заходите на какой-то сайт, то обращаетесь к открытому сокету сервера сайта. То же самое можно делать внутри одного PC. Грубо говоря, сокет это встроенная возможность операционной системы.

 
Maxim Dmitrievsky:

Это программный интерфейс, через который программы (процессы) могут обмениваться данными. Например, когда вы заходите на какой-то сайт, то обращаетесь к открытому сокету сервера сайта. То же самое можно делать внутри одного PC. Грубо говоря, сокет это встроенная возможность операционной системы.

Спасибо, Максим!

Правильно ли понял суть Вашей статьи? Изложу своими словами, а Вы поправьте меня, если, что-то не так понял.

  1. Предположим, что на моем компьютере есть какие-то сторонние программы, которые созданы на языке программирования в корне отличающемся от языка программирования MQL, однако эти программы мне очень нужны для работы.
  2. Программный код, написанный на языке программирования Python, позволяет связать между собой взаимодействие этих сторонних программ, допустим, с тем же терминалом МТ5.
  3. Сторонние программы c другого компьютера могут дистанционно управлять работой всё того же терминала МТ5 на моем компьютере.

Всё правильно? Позже объясню, почему задаю такие вопросы.

С уважением, Владимир.

 
MrBrooklin:

Спасибо, Максим!

Правильно ли понял суть Вашей статьи? Изложу своими словами, а Вы поправьте меня, если, что-то не так понял.

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

Всё правильно? Позже объясню, почему задаю такие вопросы.

С уважением, Владимир.

Все зависит от задачи, так сложно сказать. Скорее, лучше «связывать» их напрямую, если есть доступ к исходному коду. Иначе, если есть программа но нет исходного кода и сильно надо, то через питоновские скрипты можно что-то сделать, да, где это возможно.
 
Maxim Dmitrievsky:
Все зависит от задачи, так сложно сказать. Скорее, лучше «связывать» их напрямую, если есть доступ к исходному коду. Иначе, если есть программа но нет исходного кода и сильно надо, то через питоновские скрипты можно что-то сделать, да, где это возможно.

Вот теперь переходим к самой задаче. Это не техзадание, а очень сжатое изложение её сути.

Нужно периодически (например, один раз в час, один раз день, один раз в неделю) брать различные данные с нескольких (не более 10) сайтов и производить сложные промежуточные вычисления в сторонней программе (не MQL). Результатом этих вычислений будут три сигнала для управления терминалом МТ5: сигнал на открытие ордера buy, сигнал на открытие ордера sell либо сигнал на закрытие ордера.

Такое возможно осуществить? Мне нужно это знать для того, чтобы смог грамотно составить техническое задание для фриланса.

С уважением, Владимир.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
  • www.mql5.com
Количество индикаторных буферов, которые можно использовать в пользовательском индикаторе, не ограничено. Но каждому массиву, который назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(), должен быть указан тип данных, которые он будет хранить. Это может быть одно из значений перечисления ENUM_INDEXBUFFER_TYPE...