文章 "MetaTrader 5 与 Python 的集成:接收和发送数据" - 页 7

 
yogibass:

@Maxim Dmitrievsky

我只想说,感谢您提供这个工具。我一直希望能用 Python 来编写我的指标,自从您开始这个主题后,我就能访问实时期货数据,并用它来开发和运行我的指标。我用 Python 绘制和分析实时数据,并通过 MT5 平台进行交易,效果非常好。请继续努力,我衷心希望 Python 能够得到 MT 社区的全面支持。

谢谢,并致以最崇高的敬意!

您好,请问为什么代码无法编译,我得到的值是 none。

rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates
 
Dannyhill.0:
您好,请问为什么代码无法编译,我得到的值是 "无"。

有几个原因...

  • 列表编译时缺少括号
  • 使用了 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/zh/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?

弗拉基米尔

它是一个软件接口,程序(进程)可以通过它交换数据。例如,当您访问一个网站时,您访问的是网站服务器的开放套接字。在一台电脑上也可以做同样的事情。粗略地说,套接字是操作系统的一种内置功能。

 
Maxim Dmitrievsky:

这是一个软件接口,程序(进程)可以通过它进行通信。例如,当你访问一个网站时,你访问的是网站服务器的开放套接字。在一台电脑上也可以做同样的事情。粗略地说,套接字是操作系统的一种内置功能。

谢谢,马克西姆!

我是否正确理解了您文章的精髓?我用自己的话来说,如果我理解有误,请您指正。

  1. 假设我的计算机上有一些第三方程序,它们使用的编程语言与 MQL 编程语言完全不同,但我的工作非常需要这些程序。
  2. 用 Python 编程语言编写的程序代码允许我将这些第三方程序的交互连接起来,例如,连接到同一个 MT5 终端。
  3. 另一台电脑上的第三方程序可以远程控制我电脑上同一 MT5 终端的工作。

这样做对吗?我稍后会解释我为什么会问这些问题。

弗拉基米尔

 
MrBrooklin:

谢谢你,马克西姆!

我是否正确理解了您文章的精髓?我会用我自己的话来表述,如果我理解有误,您可以纠正我。

  1. 假设我的电脑上有一些第三方程序,它们使用的编程语言与 MQL 编程语言完全不同,但我的工作非常需要这些程序。
  2. 用 Python 编程语言编写的程序代码允许我将这些第三方程序的交互连接起来,例如,与同一个 MT5 终端连接起来。
  3. 第三方程序可以远程控制同一 MT5 终端的工作。

这样做对吗?我稍后会解释我为什么会问这些问题。

弗拉基米尔

这取决于任务,很难说。如果能获得源代码,最好直接 "链接 "它们。否则,如果有程序但没有源代码,而您又非常需要它,那么您可以通过 Python 脚本来完成一些事情,是的,在可能的情况下。
 
Maxim Dmitrievsky:
这取决于任务,很难说。如果能获得源代码,最好直接 "链接 "它们。否则,如果有程序但没有源代码,而你又非常需要它,你可以通过 Python 脚本来完成一些事情,是的,在可能的情况下。

现在我们来谈谈任务本身。这不是一个技术任务,而是对其本质的一个非常简短的陈述。

您需要定期(例如一小时一次、一天一次、一周一次)从多个(不超过 10 个)网站获取各种数据,并在第三方程序(非 MQL)中执行复杂的中间计算。这些计算的结果将是 MT5 终端控制的三个信号:打开买入订单的信号、打开卖出订单的信号或关闭订单的信号。

这可能吗?我需要知道这一点,才能胜任自由职业者的技术工作。

弗拉基米尔

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