41 lines
2.6 KiB
Markdown
41 lines
2.6 KiB
Markdown
# ZT 日内做 T 策略
|
||
|
||
启用时在账户 YAML 中设置:
|
||
|
||
```yaml
|
||
strategy: zt
|
||
signal_allow: ["dcm"]
|
||
zt_sell_ratio: 0.5
|
||
zt_buy_fall_pct: 1.0
|
||
zt_max_price: 200
|
||
```
|
||
|
||
- 仅 `dcm` 信号可建立底仓;建仓使用反弹确认,跳过价格高于 `zt_max_price` 的股票。
|
||
- 对 dcm 底仓,盈利网格出现回撤时卖出 `zt_sell_ratio` 对应的可用整手;不卖出超过记录底仓的数量。
|
||
- 每笔卖出成交直接累计做 T 数量;活动委托结束后,价格较卖出均价回落 `zt_buy_fall_pct`,并经反弹确认,买回实际卖出数量。
|
||
- 每只股票每日只做一轮;14:50 后不再开新卖单,已卖未买的仓位强制按市价买回,避免隔夜净减仓。
|
||
- 仅支持标准 A 股的先卖后买,不把当日新买入股票作为可卖库存。
|
||
|
||
## SQLite 状态存储
|
||
|
||
`libs/orderbook.py` 使用标准库 `sqlite3`,数据库路径为
|
||
`{qmt_data_dir}/zt_{account_id}_state.db`,每个账户/策略由单个实例串行更新。
|
||
启动时仅创建当前表结构和索引,不执行迁移或旧 JSON 导入。
|
||
|
||
两表使用 SDK 同名字段;另有自增主键 `id`,成交表增加从 `remark` 提取的 `order_local_id`:
|
||
|
||
| 表 | 数据模型 | 索引 |
|
||
| --- | --- | --- |
|
||
| `positions` | `PositionItem`:`stock_code`、`stock_name`、`direction`、`volume`、`open_price`、`open_cost`、`float_profit`、`market_value`、`stock_holder`、`frozen_volume`、`can_use_volume`、`on_road_volume`、`yesterday_volume`、`last_price`、`profit_rate`、`future_trade_type`、`expire_date` | `stock_code` 唯一索引 |
|
||
| `deals` | `DealItem`:`stock_code`、`order_sys_id`、`ref`、`order_ref`、`direction`、`offset_flag`、`price`、`volume`、`trade_amount`、`trade_date`、`trade_time`、`remark`、`close_profit`,以及 `order_local_id` | `order_sys_id` 唯一索引;`order_local_id`;`stock_code`;`trade_date` |
|
||
|
||
`load()` 只更新 `positions`、`deals`、`deals_sys_ids` 缓存,无返回值。
|
||
`sync_positions(list[PositionItem])` 保存完整持仓快照,同一证券更新时保留自增 ID。
|
||
`sync_deals(list[DealItem])` 按系统订单号去重后批量写入;同批重复记录仅写一次。
|
||
`order_local_id` 取 `DealItem.local_order_id`(`remark` 首段),为空时拒绝写入。
|
||
成交日期规范为 `YYYY-MM-DD`,金额缺失时用成交价格乘数量补足。
|
||
|
||
ZT 使用 `volume/open_price` 保存底仓数量与成本,做 T 轮次从成交历史恢复,
|
||
不再使用持仓表的旧状态、底仓订单或补仓字段。买卖方向由 `offset_flag` 计算,
|
||
本地订单号从 `remark` 提取。持仓与新增成交在同一事务提交,失败时回滚并恢复内存。
|