概念笔记
聚宽下单 API 与订单对象
四种下单 API 按「按数量还是按金额、增量为买入还是调到目标」区分;清仓统一写 ordertarget(x, 0)。下单返回 Order 对象、成交返回 Trade 对象,可查状态。
一句话
聚宽下单四件套:order(按股数买/卖)、order_value(按金额买)、order_target(把仓位调到目标股数)、order_target_value(把持仓价值调到目标金额)。动态多股票买入用 order_value 平分现金,均衡持有用 order_target_value 摊总资产,清仓/止损一律 order_target(x, 0)。
当前理解
四种下单的语义(第 1/3 篇)
| API | 语义 | 典型用途 |
|---|---|---|
| order(security, amount) | 按股数买卖 | 要精确股数时 |
| order_value(security, 金额) | 按金额买入(金额转股数) | 用现金份额买,如平分现金 |
| order_target(security, 目标股数) | 把持仓调到目标股数 | 清仓写 0;卖出 |
| order_target_value(security, 目标金额) | 把持仓价值调到目标金额 | 均衡分配、按目标市值持有 |
资金与仓位的数据来源
context.portfolio.cash:当前可用现金。context.portfolio.total_value:总资产 = 现金 + 持仓市值。context.portfolio.positions[股票]:持仓对象;closeable_amount可卖数量、avg_cost成本、price现价。
多股票资金分配的两个阶段(第 4/6 篇的教训)
- 错法:循环里每只都用全部现金
order_value(sec, cash)→ 第一只买完就没钱了。 - 第 1 版对法:
per_cash = cash / len(股票),每只order_value(sec, per_cash)(只对现金均分)。 - 第 2 版更对(市值轮动 2.0):
per = total_value / stocksnum,每只order_target_value(sec, per)——把「每只持仓价值 = 总资产均分」设为目标,长期入选的股票不会越积越多。原因:order_value 每次是「加一笔」,order_target_value 是「拉回目标线」。
订单管理与对象
- 管理:
cancel_order(撤单)、get_open_orders(未完成订单)、get_orders(当天全部)、get_trades(当天成交)。 - Order 对象属性:add_time、is_buy(买卖方向)、amount(下单量,恒正)、filled(已成交量)、security、order_id、price(平均成交价)、status(未成交/部分成交/已撤销/交易所拒绝/全部成交)。
- Trade 对象属性:time、amount、price、trade_id。
来源
- 十行代码带你量化交易入门 — order_value 全仓买、order_target(…,0) 清仓、四类下单预告
- 使用 JoinQuant 编写一个策略 — 四 API 定义、订单管理、Order/Trade 对象
- 多股票策略 — 平分现金(错误→正确)
- 简单市值轮动策略 — 换仓:不在名单 order_target 0 + order_value 均分
- 市值轮动策略 2.0 — order_target_value 均衡分配(total_value 作分母)
- raw 路径:
原始出处(已归档)03-…04-…05-…06-…
常见混淆
- order_value vs order_target_value:前者「按金额加买一笔」(增量),后者「把该股仓位调到目标金额」(存量目标)。市值轮动 2.0 的持仓失衡问题只有后者能修。
- order_target(x, 0) 是清仓:不是「卖 0 股」,而是把仓位调到 0 = 全部卖出。
- amount 恒正:Order 对象里买卖方向由 is_buy 表达,amount 不取负。
- positions 是复数:老教程多处写成 position(单数)属笔误,正写是
context.portfolio.positions。
开放问题
- [需要验证] 是否支持限价单/市价单等更多订单类型(教程只覆盖四种基础下单)。
- [需要验证] 停牌/涨停股下单的实际成交行为(教程提到要过滤这类股票,但没讲下单失败会怎样)。
来源
更新 2026-09-06