基于问财数据驱动的股票与可转债量化交易系统:清仓、分配、买入,全自动运行
这段代码实现了一个完整的 股票与可转债的交易策略,通过“问财”接口获取交易标的,并利用QMT交易接口实现买卖操作。下面将按模块详细解释整个交易逻辑:
1. 交易主逻辑 main()
- 初始化交易接口
- 账号订阅与回调注册
- 设置定时任务
- 执行任务循环
2. 问财数据获取
函数:get_wencai_data(query)
- 通过 pywencai 接口获取指定条件的证券数据。
- 根据 query 的类型(股票、基金或转债)自动选择查询模式。
- 返回一个证券代码列表供交易模块使用。
3. 交易执行 execute_wencai_strategy()
主要功能:根据问财数据自动化执行交易策略。
3.1 检查交易时间
- 函数:is_trading_time()
3.2 获取交易标的
- 尝试执行多个问财查询,直到返回有效数据为止。
- 查询返回的标的列表:
3.3 卖出操作
- 遍历当前持仓,查找 不在新选中标的中的持仓。
- 对于符合条件的标的:
- 调用 place_orders() 执行卖出操作。
- 等待1秒,确保卖出委托完成。
3.4 计算买入策略
- 获取当前账户可用现金。
- 买入新标的:
- 追加持仓:
3.5 买入操作
场景1:有新证券需要买入
- 将所有买入委托数据整理成DataFrame。
- 调用 place_orders() 执行买入操作。
- 具体执行场景举例:
场景2:没有新证券买入
- 当前持仓:100只
- 策略结果:90只(其中80只与持仓重叠)
- 卖出20只(100-80)不在策略中的股票
- 获得卖出资金后,只分配给10只新买入的股票(90-80)
- 每只新股票分配资金 = 总资金 / 10
- 根据最新价格和分配资金计算买入数量(四舍五入取整)
- 当前持仓:100只
- 策略结果:90只(全部在持仓中)
- 卖出10只(100-90)不在策略中的股票
- 获得卖出资金后,平均分配给90只保留的持仓
- 每只持仓分配资金 = 总资金 / 90
- 根据最新价格和分配资金计算买入数量(四舍五入取整)
4. 委托下单与撤单逻辑 place_orders()
负责处理具体的交易逻辑,包括下单和撤单。
- 撤销未完成订单
- 委托操作
- 设置委托价格类型
- 报单与反馈
5. 工具函数
- 获取实时价格 get_stock_price()
- 计算委托数量 calculate_order_volume()
6. 回调函数
MyXtQuantTraderCallback 提供交易接口回调:
- 断线重连提示:on_disconnected()
- 委托回报:on_stock_order()
- 错误处理:on_order_error()
7. 核心策略总结
- 清仓操作:
- 资金分配与买入操作:
- 动态调整持仓:
8. 运行环境与依赖
- 依赖库:
- 运行条件:
9. 代码执行流程总结
- 启动交易接口并订阅账户。
- 在指定时间运行问财查询,获取选中标的。
- 清仓不在选中列表的持仓,释放资金。
- 将资金分配给新标的或现有标的,并执行买入操作。
- 提供交易状态反馈,确保执行过程顺畅。
结论
这段代码逻辑清晰且结构完整,能够通过问财策略动态调整持仓,实现自动化交易。
确保运行环境正确配置,交易时间精准设定,即可稳定运行此程序。
版权声明:
作者:余汉波
链接:https://www.sanrenjz.com/2024/12/19/%e5%9f%ba%e4%ba%8e%e9%97%ae%e8%b4%a2%e6%95%b0%e6%8d%ae%e9%a9%b1%e5%8a%a8%e7%9a%84%e8%82%a1%e7%a5%a8%e4%b8%8e%e5%8f%af%e8%bd%ac%e5%80%ba%e9%87%8f%e5%8c%96%e4%ba%a4%e6%98%93%e7%b3%bb%e7%bb%9f%ef%bc%9a/
文章版权归作者所有,未经允许请勿转载。
THE END