我们将一步一步详细分析和解释代码。该脚本使用 Telethon 库 连接到 Telegram 并接收来自群组的信号,这些信号用于在 MetaTrader 5 (MT5) 中下订单。运行代码涉及连接到 MT5、监听 Telegram 上的消息以及根据这些消息执行买入和卖出订单。
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
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执行位置。
installed_packages = [d for d in pkg_resources.working_set] for package in installed_packages: print(package)
代码使用 pkg_resources 库显示当前环境中安装的所有 Python 包。
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__)
API_ID = '78787878' API_HASH = '12e957773a9a554cb6e32997122706f6' PHONE_NUMBER = '+5512991111111' GROUP_USERNAME = '@Nas100freepip'
CONTAS_MT5 = [ {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00} ]
定义机器人可用于执行订单的 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。
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 发送买入或卖出订单。功能:
installed_packages = [d for d in pkg_resources.working_set] for package in installed_packages: print(package)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__)
此功能定期检查每个活跃账户与 MetaTrader 5 的连接。如果帐户无法重新连接,则会从列表中删除。
API_ID = '78787878' API_HASH = '12e957773a9a554cb6e32997122706f6' PHONE_NUMBER = '+5512991111111' GROUP_USERNAME = '@Nas100freepip'
捕获中断信号(SIGINT 或 SIGTERM),例如 Ctrl C 命令或进程终止,并干净地结束程序。
CONTAS_MT5 = [ {"login": 1690062, "senha": '5jsXlBg3~T', "servidor": 'ACGMarkets-Live', "us30": "US30.raw", "nas100": "NAS100.raw", "lote": 4.00} ]
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
以上是Telegram 机器人在 mt5 上复制信号的详细内容。更多信息请关注PHP中文网其他相关文章!