基于问财数据驱动的股票与可转债量化交易系统:清仓、分配、买入,全自动运行

这段代码实现了一个完整的 股票与可转债的交易策略,通过“问财”接口获取交易标的,并利用QMT交易接口实现买卖操作。下面将按模块详细解释整个交易逻辑:


1. 交易主逻辑 main()

  1. 初始化交易接口
  2. 账号订阅与回调注册
  3. 设置定时任务
  4. 执行任务循环

2. 问财数据获取

函数:get_wencai_data(query)

  • 通过 pywencai 接口获取指定条件的证券数据。
  • 根据 query 的类型(股票、基金或转债)自动选择查询模式。
  • 返回一个证券代码列表供交易模块使用。

3. 交易执行 execute_wencai_strategy()

主要功能:根据问财数据自动化执行交易策略。

3.1 检查交易时间

  • 函数:is_trading_time()

3.2 获取交易标的

  • 尝试执行多个问财查询,直到返回有效数据为止。
  • 查询返回的标的列表:

3.3 卖出操作

  1. 遍历当前持仓,查找 不在新选中标的中的持仓。
  2. 对于符合条件的标的:
  3. 调用 place_orders() 执行卖出操作。
  4. 等待1秒,确保卖出委托完成。

3.4 计算买入策略

  1. 获取当前账户可用现金。
  2. 买入新标的:
  3. 追加持仓:

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()

负责处理具体的交易逻辑,包括下单和撤单。

  1. 撤销未完成订单
  2. 委托操作
  3. 设置委托价格类型
  4. 报单与反馈

5. 工具函数

  1. 获取实时价格 get_stock_price()
  2. 计算委托数量 calculate_order_volume()

6. 回调函数

MyXtQuantTraderCallback 提供交易接口回调:

  1. 断线重连提示:on_disconnected()
  2. 委托回报:on_stock_order()
  3. 错误处理:on_order_error()

7. 核心策略总结

  1. 清仓操作:
  2. 资金分配与买入操作:
  3. 动态调整持仓:

8. 运行环境与依赖

  1. 依赖库:
  2. 运行条件:

9. 代码执行流程总结

  1. 启动交易接口并订阅账户。
  2. 在指定时间运行问财查询,获取选中标的。
  3. 清仓不在选中列表的持仓,释放资金。
  4. 将资金分配给新标的或现有标的,并执行买入操作。
  5. 提供交易状态反馈,确保执行过程顺畅。

结论

这段代码逻辑清晰且结构完整,能够通过问财策略动态调整持仓,实现自动化交易。

确保运行环境正确配置,交易时间精准设定,即可稳定运行此程序。

THE END