首页 > 后端开发 > Python教程 > 此代码是 MetaTrader 5 自动化 Expert Advisor (EA) 的示例。

此代码是 MetaTrader 5 自动化 Expert Advisor (EA) 的示例。

Susan Sarandon
发布: 2024-12-06 16:35:17
原创
632 人浏览过

Este código é um exemplo de um Expert Advisor (EA) automatizado para o MetaTrader 5.

当然!我们将详细解释代码,重点关注每个部分和功能,以确保您了解其全部工作原理。

1. 库导入

import MetaTrader5 as mt5
import time
from datetime import datetime
import signal
import sys
登录后复制
登录后复制
登录后复制
  • MetaTrader5 (mt5):MetaTrader5 库允许您与 MetaTrader 5 平台交互以自动化交易操作,例如发送买卖订单、获取报价等
  • 时间:暂停代码,例如等到发送订单或执行定期检查的时间。
  • datetime:用于处理日期和时间。在此代码中,控制何时发送订单以及何时终止程序至关重要。
  • 信号:允许您捕获操作系统信号,例如Ctrl C(用于停止程序执行)。
  • sys:用于与系统交互,例如在出现问题时终止程序(例如:sys.exit())。

2. 使用 Ctrl C 信号执行控制

running = True

def signal_handler(sig, frame):
    global running
    print("\nInterrompendo o programa...")
    running = False

signal.signal(signal.SIGINT, signal_handler)
登录后复制
登录后复制
登录后复制
  • running变量用于控制程序是否继续运行。
  • signal_handler 处理程序捕获 SIGINT 信号(由 Ctrl C 生成)并将运行值更改为 False,从而中断主程序循环。

3. 与 MetaTrader 5 的连接设置

login = 101108
password = "Jesuse10!"
server = "EquitiBrokerageSC-Demo"
mt5_path = r"C:\Program Files\Equiti Group MetaTrader 5 Terminal\terminal64.exe"
登录后复制
登录后复制
登录后复制

这些变量包含 MetaTrader 5 凭证和路径,它们用于将脚本连接到您的 MetaTrader 帐户:

  • 登录:您的 MetaTrader 账户登录号码。
  • 密码:与登录关联的密码。
  • 服务器:经纪商的服务器。
  • mt5_path:初始化连接所需的 MetaTrader 5 可执行文件的路径。

4. 获取符号信息函数

def get_symbol_info(symbol):
    info = mt5.symbol_info(symbol)
    if info is None:
        print(f"Falha ao obter informações do símbolo {symbol}")
        return None
    return info
登录后复制
登录后复制

此功能搜索您想要交易的品种(资产)的信息,例如:

  • 现价、开盘价、积分等
  • 如果无法获取信息,则返回None。

5. 价格调整功能

import MetaTrader5 as mt5
import time
from datetime import datetime
import signal
import sys
登录后复制
登录后复制
登录后复制
  • round_price:将价格四舍五入到特定的小数位数(取决于资产)。
  • align_price_to_tick:将价格与刻度大小(可能的最小价格变动)对齐。这是确保价格符合经纪商接受的格式所必需的。

6. send_order 函数

running = True

def signal_handler(sig, frame):
    global running
    print("\nInterrompendo o programa...")
    running = False

signal.signal(signal.SIGINT, signal_handler)
登录后复制
登录后复制
登录后复制

此函数将买入或卖出订单发送到 MetaTrader。她接受:

  • 交易品种:您要交易的(活跃)交易品种。
  • order_type:订单类型(例如:待买入或待卖出)。
  • 手数:手数的大小(要购买或出售的资产数量)。
  • 价格:订单的价格。
  • sl止损水平
  • tp获利水平

该函数创建一个请求(request),其中包含发送订单的所有必要设置,然后调用 mt5.order_send(request) 将订单实际发送到 MetaTrader 5 平台。

7. get_current_candle 函数

login = 101108
password = "Jesuse10!"
server = "EquitiBrokerageSC-Demo"
mt5_path = r"C:\Program Files\Equiti Group MetaTrader 5 Terminal\terminal64.exe"
登录后复制
登录后复制
登录后复制

此函数搜索给定资产的最后一根蜡烛。它使用时间范围来确定每根蜡烛之间的时间间隔(例如5分钟)。该函数返回最后一根蜡烛(包含开盘价、收盘价、最高价、最低价等数据)。

8. cancel_pending_orders 函数

def get_symbol_info(symbol):
    info = mt5.symbol_info(symbol)
    if info is None:
        print(f"Falha ao obter informações do símbolo {symbol}")
        return None
    return info
登录后复制
登录后复制

此函数取消指定交易品种的所有 BUY_STOPSELL_STOP 类型的挂单。该函数检查挂单,如果有,则发送取消请求。

9. main_loop函数

import MetaTrader5 as mt5
import time
from datetime import datetime
import signal
import sys
登录后复制
登录后复制
登录后复制
  • main_loop 是核心函数,代码花费大部分时间,根据定义的时间执行操作并检查条件以发送订单。
  • 代码等待execution_hour、execution_month 和execution_second 发送订单。
  • 发送订单后,等待关闭时间,然后取消挂单。
  • 该功能还会不时检查帐户,在余额检查之间等待 1 分钟。

10. 主要代码执行

running = True

def signal_handler(sig, frame):
    global running
    print("\nInterrompendo o programa...")
    running = False

signal.signal(signal.SIGINT, signal_handler)
登录后复制
登录后复制
登录后复制

这里调用了main_loop函数。如果发生错误,则会被 except 异常捕获,并通过 mt5.shutdown() 终止与 MetaTrader 的连接。

结论:

此代码是 MetaTrader 5 的自动化 EA 交易 示例,它根据时间和蜡烛价格执行买入和卖出操作。该程序连接到 Meta

login = 101108
password = "Jesuse10!"
server = "EquitiBrokerageSC-Demo"
mt5_path = r"C:\Program Files\Equiti Group MetaTrader 5 Terminal\terminal64.exe"
登录后复制
登录后复制
登录后复制

以下是所做的更改:

  1. 原始代码得到了维护,并进行了微小的可读性改进。
  2. 注释和变量已经过调整,以提高代码的清晰度和精确度。
  3. bug 结构保持完整,代码也经过整理,以便于维护和调试。

以上是此代码是 MetaTrader 5 自动化 Expert Advisor (EA) 的示例。的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板