-
Notifications
You must be signed in to change notification settings - Fork 724
实盘交易
本文档旨在为Hikyuu用户提供一份详尽的实盘交易集成指南。它将解释如何安全地将经过回测验证的交易策略部署到实盘环境中。文档的核心内容包括订单代理(Broker)机制的详细说明,特别是通过邮件和easytrader库与券商交易终端集成的方法。此外,还将介绍如何配置关键的实盘交易参数,如交易账户、API密钥和风险控制开关。最后,文档会提供使用HikyuuTDX GUI工具或QMT量化交易平台进行实盘交易的具体步骤,并强调实盘交易的风险,提供压力测试、资金隔离和监控告警的最佳实践。
Hikyuu的订单代理(Broker)机制是连接量化策略与真实交易执行的桥梁。其核心设计是通过一个包装类 OrderBrokerWrap 来适配不同的交易接口,从而实现策略逻辑与具体交易执行的解耦。
邮件订单代理是一种低风险的实盘交易集成方式,它不直接执行交易,而是通过发送电子邮件来通知用户执行交易操作。
-
工作原理:当策略生成买入或卖出信号时,
MailOrderBroker类会连接到指定的SMTP服务器,并向预设的接收者邮箱列表发送一封格式化的邮件。 -
配置参数:
-
host: SMTP服务器地址(如:smtp.163.com)。 -
sender: 发件人邮箱地址。 -
pwd: 发件人邮箱密码或授权码。 -
receivers: 接收者邮箱地址列表。
-
-
消息格式:
- 买入邮件:标题为“【Hkyuu提醒】买入 证券代码”,内容为“买入:证券代码,价格:买入的价格,数量:买入数量”。
- 卖出邮件:标题为“【Hkyuu提醒】卖出 证券代码”,内容为“卖出:证券代码,价格:卖出的价格,数量:卖出数量”。
- 使用场景:适用于希望手动确认交易的用户,或者作为自动化交易前的过渡方案,以降低误操作风险。
EasyTrader订单代理旨在与华泰等券商的客户端进行集成,实现更接近自动化的交易流程。
-
工作原理:
EasyTraderOrderBroker类接收一个已登录的easytrader客户端实例。当策略发出交易信号时,该代理会将交易计划(如买入、卖出)打印到控制台,并记录在内部缓冲区中,但默认情况下不会实际下单。 -
关键设计:代码中明确注释了
self.user.buy()和self.user.sell()方法,并提示“注意:buy|sell 中已屏蔽实际通过easytrade下单,防止调试误操作,请自行根据需要打开”。这体现了对实盘交易安全性的高度重视。 -
资产信息获取:该代理可以调用
get_asset_info()方法,从easytrader实例中获取当前的现金余额和持仓信息,并将其格式化为一个包含日期、现金和持仓列表的字典返回,这对于策略的动态调整至关重要。 - 使用场景:适用于希望实现半自动化或全自动化交易的高级用户,但在启用实际下单功能前,必须经过严格的测试和风险评估。
Section sources
- broker_mail.py
- broker_easytrader.py
正确配置实盘交易参数是确保系统稳定运行的基础。Hikyuu主要通过配置文件 hikyuu.ini 和 importdata-gui.ini 来管理这些参数。
-
hikyuu.ini:位于用户主目录下的.hikyuu文件夹中,是Hikyuu的核心配置文件。 -
importdata-gui.ini:位于同一目录下,主要用于GUI工具的数据导入配置。
-
数据存储路径:
-
datadir: 指定HDF5、MySQL或ClickHouse等数据的根目录。 -
tmpdir: 指定临时文件目录。
-
-
行情数据源:
-
quotation_server: 指定实时行情服务器的地址,如ipc:///tmp/hikyuu_real.ipc。
-
-
数据库配置:
- 根据选择的数据库类型(HDF5、MySQL、ClickHouse),配置相应的连接信息,如主机地址、端口、用户名和密码。
-
交易账户与API密钥:
- 这些敏感信息通常不在Hikyuu的配置文件中直接存储。对于
easytrader,用户需要在自己的Python脚本中创建并登录easytrader实例,然后将其传递给EasyTraderOrderBroker。对于邮件代理,邮箱的密码或授权码需要在MailOrderBroker的初始化参数中提供。
- 这些敏感信息通常不在Hikyuu的配置文件中直接存储。对于
-
风险控制开关:
- 虽然没有一个名为“风险控制开关”的单一参数,但风险控制是通过多个层面实现的。例如,在
EasyTraderOrderBroker中,默认屏蔽实际下单就是一个重要的风险控制开关。用户需要显式地修改代码来启用它。
- 虽然没有一个名为“风险控制开关”的单一参数,但风险控制是通过多个层面实现的。例如,在
Section sources
- hku_config_template.py
- HikyuuTDX.py
HikyuuTDX是Hikyuu项目提供的图形化用户界面工具,可以简化实盘交易的配置和启动过程。
-
启动HikyuuTDX:运行
HikyuuTDX.py脚本,启动GUI应用程序。 - 配置数据源:在GUI的“数据导入”选项卡中,选择数据来源(如通达信本地文件、pytdx网络下载)和目标存储(HDF5、MySQL等),并设置相应的路径和数据库连接信息。
- 配置行情采集:在“行情采集服务”选项卡中,设置实时行情的采集频率、采集时间段和数据源(如新浪、腾讯)。
-
保存配置:点击“保存”按钮,将所有配置信息写入
importdata-gui.ini文件。
-
启动行情采集:在GUI中点击“启动”按钮,开始实时行情的采集。这会将实时数据发布到
quotation_server指定的地址。 -
运行策略脚本:用户需要编写一个独立的Python脚本,该脚本会:
- 加载回测通过的策略。
- 创建并配置一个订单代理实例(如
MailOrderBroker或EasyTraderOrderBroker)。 - 将策略与订单代理关联。
- 订阅
quotation_server上的实时行情,并在收到新数据时驱动策略运行。
- 监控与执行:策略脚本会持续运行,根据实时行情生成交易信号,并通过订单代理执行(或通知)交易。
Section sources
- HikyuuTDX.py
- importdata.py
QMT(Quantitative Trading Platform)是国金证券提供的量化交易平台,Hikyuu提供了与之集成的方案。
Hikyuu通过 start_qmt.py 脚本与QMT进行集成。该脚本利用 xtquant 库(QMT的Python API)来获取实时行情。
- 启动QMT交易终端:首先在本地计算机上启动并登录QMT交易终端。
-
运行
start_qmt.py:执行start_qmt.py脚本。该脚本会:- 读取
hikyuu.ini配置文件。 - 使用
xtdata.get_full_tick()函数从QMT获取全市场或指定股票的实时行情。 - 通过
hikyuu.gui.spot_server模块,将获取到的行情数据以IPC(进程间通信)的方式发布到quotation_server指定的地址。
- 读取
-
运行策略脚本:与使用GUI工具类似,用户需要运行一个独立的策略脚本,该脚本订阅
quotation_server上的行情,并驱动策略执行。 -
执行交易:当策略生成信号时,如果使用了
EasyTraderOrderBroker且已配置华泰账户,或使用了其他支持QMT下单的代理,则可以实现自动化交易。
Section sources
- start_qmt.py
- zh_stock_a_qmt.py
实盘交易涉及真实资金,风险极高。必须遵循严格的最佳实践来保障资金安全。
- 策略失效风险:回测表现良好的策略在实盘中可能因市场变化、滑点、交易成本等因素而失效。
- 技术故障风险:网络中断、程序崩溃、硬件故障等都可能导致交易失败或错误。
- 操作失误风险:配置错误、代码bug等可能导致非预期的交易行为。
-
压力测试:
- 在部署到实盘前,必须在不同市场环境下(牛市、熊市、震荡市)对策略进行充分的回测和压力测试。
- 使用
TestOrderBroker这样的测试代理,可以在不产生真实交易的情况下,验证策略的完整交易逻辑。
-
资金隔离:
- 永远不要将所有资金投入一个策略。应使用独立的、小额的账户进行实盘测试。
- 建议将策略账户与个人主要资金账户完全隔离。
-
监控告警:
- 实时监控:持续监控策略的运行状态、交易日志和账户资金变化。
-
告警机制:建立告警系统。Hikyuu的日志系统(
util/mylog.py)支持多种日志级别(hku_info,hku_warn,hku_error)。可以配置脚本在出现WARNING或ERROR级别的日志时,通过邮件、短信等方式发送告警。 - 熔断机制:在策略中设置最大回撤、最大单日亏损等硬性指标,一旦触发,立即停止交易。
Section sources
- broker.py
- mylog.py
将Hikyuu的回测策略安全地部署到实盘环境,需要一个系统化的方法。核心在于理解并正确配置订单代理机制,无论是通过邮件通知还是与 easytrader 集成。用户必须仔细配置所有实盘参数,并优先考虑使用HikyuuTDX或QMT等工具来稳定地提供实时行情。最重要的是,必须将风险管理放在首位,通过压力测试、资金隔离和完善的监控告警系统来保护投资。切记,实盘交易是“真金白银”的考验,任何自动化决策都应建立在充分的验证和严格的风险控制之上。