首页 >后端开发 >Python教程 >Telegram 机器人在 mt5 上复制信号

Telegram 机器人在 mt5 上复制信号

Linda Hamilton
Linda Hamilton原创
2024-12-15 07:56:08641浏览

Telegram bot para replicar sinais no mt5

我们将一步一步详细分析和解释代码。该脚本使用 Telethon 库 连接到 Telegram 并接收来自群组的信号,这些信号用于在 MetaTrader 5 (MT5) 中下订单。运行代码涉及连接到 MT5、监听 Telegram 上的消息以及根据这些消息执行买入和卖出订单。

1. 库导入

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources
  • Telethon:与 Telegram 交互的库(发送和接收消息)。
  • MetaTrader5:允许与 MetaTrader 5 平台交互的库,用于自动化交易。
  • asyncio:处理异步操作,例如在不阻塞程序的情况下等待 Telegram 上的消息。
  • logging:记录有助于跟踪和调试代码的日志消息。
  • datetime:用于操作日期和时间。
  • 信号:用于捕获系统信号,例如中断信号(Ctrl C)。
  • os、sys、pkg_resources:用于操作文件、目录和系统资源。

2. 环境信息展示

print("Python executando de:", sys.executable)
print("Ambiente virtual:", sys.prefix)
print("Versão do Python:", sys.version)
print("VIRTUAL_ENV:", os.environ.get('VIRTUAL_ENV'))

这里,代码打印了Python运行环境的信息,例如Python版本、虚拟环境路径、Python执行位置。

3. 列出已安装的软件包

installed_packages = [d for d in pkg_resources.working_set]
for package in installed_packages:
    print(package)

代码使用 pkg_resources 库显示当前环境中安装的所有 Python 包。

4. 日志配置

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
  • 配置日志记录以记录 INFO 级别或更高级别的消息。
  • 格式定义日志消息的格式,包括日期、严重性级别和消息。

5. 电报设置

API_ID = '78787878'
API_HASH = '12e957773a9a554cb6e32997122706f6'
PHONE_NUMBER = '+5512991111111'
GROUP_USERNAME = '@Nas100freepip'
  • API_ID 和 API_HASH:使用 Telethon 所需的 Telegram API 凭据。
  • PHONE_NUMBER:机器人的电话号码。
  • GROUP_USERNAME:机器人将从中读取消息的 Telegram 组的名称。

6. MT5账户设置

CONTAS_MT5 = [
    {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00}
]

定义机器人可用于执行订单的 MT5 账户列表。每个帐户包含:

  • login:MetaTrader 5 中的账户登录号码。
  • 密码:账户密码。
  • 服务器:经纪商的服务器。
  • us30 和 nas100:要交易的资产的符号。
  • batch:订单的批量大小。

7. 重新连接MT5的功能

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources

此函数尝试重新连接特定账户的 MetaTrader 5,直至达到最大尝试次数 (max_tries)。如果在尝试次数后重新连接失败,则返回 False。

8. 发送订单至MT5的功能

print("Python executando de:", sys.executable)
print("Ambiente virtual:", sys.prefix)
print("Versão do Python:", sys.version)
print("VIRTUAL_ENV:", os.environ.get('VIRTUAL_ENV'))

此函数根据操作的类型(买入或卖出)向 MetaTrader 5 发送买入或卖出订单。功能:

  • 检查符号可用性。
  • 准备订单并提供必要的信息(价格、数量、订单类型等)。
  • 将订单发送至 MT5。

9. 处理从 Telegram 收到的消息

installed_packages = [d for d in pkg_resources.working_set]
for package in installed_packages:
    print(package)
  • 接收 Telegram 消息并对其进行处理以识别资产(例如 us30 或 nas100)和操作(买入或卖出)。
  • 对于每个活跃帐户,尝试使用 send_order 函数发送订单。如果订单失败,该帐户将从活跃帐户列表中删除。

10. 与MT5的连接检查功能

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

此功能定期检查每个活跃账户与 MetaTrader 5 的连接。如果帐户无法重新连接,则会从列表中删除。

11. 中断信号处理

API_ID = '78787878'
API_HASH = '12e957773a9a554cb6e32997122706f6'
PHONE_NUMBER = '+5512991111111'
GROUP_USERNAME = '@Nas100freepip'

捕获中断信号(SIGINT 或 SIGTERM),例如 Ctrl C 命令或进程终止,并干净地结束程序。

12. 主要功能

CONTAS_MT5 = [
    {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00}
]
  • 配置信号处理程序。
  • 初始化 MT5 账户连接。
  • 创建 Telegram 客户端,用于侦听指定组中的新消息。当消息到达时,它会被处理并发送相应的订单。
  • 将等待,直到收到中断信号来终止程序。

13. 代码执行

async def reconectar_mt5(conta, max_tentativas=3):
    for tentativa in range(max_tentativas):
        try:
            if mt5.initialize(path=MT5_PATH, login=conta['login'], server=conta['servidor'], password=conta['senha']):
                logger.info(f"Reconexão bem-sucedida para conta {conta['login']}")
                return True
            else:
                logger.warning(f"Tentativa {tentativa + 1} de reconexão falhou para conta {conta['login']}: {mt5.last_error()}")
        except Exception as e:
            logger.error(f"Erro durante a tentativa {tentativa + 1} de reconexão para conta {conta['login']}: {e}")
        await asyncio.sleep(5)
    logger.error(f"Falha ao reconectar à conta {conta['login']} após {max_tentativas} tentativas")
    return False

main() 函数使用 asyncio.run() 来执行,以管理异步代码执行。


结论:

此代码是一个自动交易机器人,它使用 Telegram 接收买卖信号,处理这些信号,并将订单发送到 MetaTrader 5 以根据收到的指令进行市场交易。该代码使用异步功能来处理多个

这是完整的代码,其中包含先前解释的详细信息:

from telethon import TelegramClient, events
import MetaTrader5 as mt5
import asyncio
import logging
from datetime import datetime
import signal
import os
import sys
import pkg_resources

功能总结:

  1. reconnect_mt5:尝试重新连接到 MetaTrader 5,最多达到最大尝试次数。
  2. send_order:根据收到的信号向 MetaTrader 5 发送买入或卖出订单。
  3. process_signal:解释从 Telegram 收到的消息并在 MetaTrader 5 中执行相应的订单。
  4. verify_connections:检查与 MetaTrader 5 的连接是否处于活动状态,并在必要时尝试重新连接。
  5. signal_handler:处理中断信号以终止程序

以上是Telegram 机器人在 mt5 上复制信号的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn