外观
股票与基金下单 API
适用于 stock 账户的 A 股、ETF/LOF,从 localquant.apis 导入。数量单位分别为股/份,金额为元。资产模型见股票与基金;期货接口见期货下单。
常规下单在 open_auction、handle_bar 或允许交易的盘中 scheduler 中调用,不在 init、before_trading、after_trading 下单。smart 调仓另有限制。
共用参数与返回
以下单标的接口的 id_or_ins 为 str | Instrument:已加载的代码或合约对象。price_or_style/price/style 的类型、默认值及优先使用方式见价格与样式。下面列出各接口准确的参数顺序,避免把可选价格位置误作其他参数。
返回:Order | None — 单笔订单或无订单。
注意:
- 数量取整为零、无有效行情或提交前校验失败时可能返回 None;已有目标无需调整也可返回 None。
- 已返回的 Order 仍可能活动、拒绝、部分成交或全部成交,须读取
status/message/filled_quantity;不能只判断返回值非空。订单字段及有效期见订单管理。
order_shares
摘要:按本次增减的股/份数下单。
python
order_shares(id_or_ins, amount, price_or_style=None, price=None, style=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
amount | int | float,必填 | 本次增减的股/份数;正数买入、负数卖出 |
注意:按合约最小申报量和步长取整;清仓碎股/碎份允许一次性卖出。当前数据源的单位模型见股票交易单位。卖出受可平量校验,不自动建立空头。
python
from localquant.apis import order_shares
# 放在 open_auction 或 handle_bar 中。
buy_order = order_shares("600000.SH", 200, price_or_style=10.0)
# 卖出需满足当日可平量:
# sell_order = order_shares("600000.SH", -100)order_lots
摘要:按带符号手数下单。
python
order_lots(id_or_ins, amount, price_or_style=None, price=None, style=None, ins=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
amount | int | float,必填 | 带符号手数,乘以 instrument.round_lot 后按数量规则下单 |
ins | Instrument | None,默认None | 内部合约参数位置,调用方不传 |
注意:其他参数和返回同 order_shares;1 手股票/基金在当前数据源中为 100 股/份。
order_value
摘要:按本次增减仓金额下单。
python
order_value(id_or_ins, cash_amount, price_or_style=None, price=None, style=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
cash_amount | int | float,必填 | 本次增减仓金额:正数买入、负数卖出,不是目标市值 |
注意:买入金额不超过可用现金,并估算费用及申报单位;限价单用委托限价估量,市价单用当前参考价估量。卖出数量不超过当前可平量。因此实际成交金额不保证等于请求金额。
order_percent
摘要:按 stock 账户当前总权益的比例增减仓。
python
order_percent(id_or_ins, percent, price_or_style=None, price=None, style=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
percent | int | float,必填 | 范围 [-1, 1],表示按 stock 账户当前总权益计算的增减仓比例,0.1 表示再买入约 10% 权益对应的金额,不是调至 10% |
注意:底层金额估量与 order_value 相同。
order_target_value
摘要:按目标市值调整持仓。
python
order_target_value(id_or_ins, cash_amount, price_or_style=None, price=None, style=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
cash_amount | int | float,必填 | 目标市值,单位元;股票基金目标应非负,0 表示卖出当前可平数量 |
price_or_style | 共用价格参数类型或二元 tuple,默认None | 除单一样式外可传二元 tuple,顺序是 (买入价格或样式, 卖出价格或样式),每项类型沿用共用价格参数 |
注意:正目标以目标市值减当前持仓市值计算增减量;数量与成交限制可能使最终市值偏离目标。只会根据本次增仓或减仓方向使用二元价格样式中的一项。
order_target_percent
摘要:按 stock 账户总权益计算的目标权重调整持仓。
python
order_target_percent(id_or_ins, percent, price_or_style=None, price=None, style=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
percent | int | float,必填 | 目标权重,范围 [0, 1];以 stock 账户总权益计算目标市值。0 表示卖出可平数量,1 表示目标满仓 |
price_or_style | 共用价格参数类型或二元 tuple,默认None | 支持与 order_target_value 相同的二元价格样式 |
注意:
- 不保证手续费、T+1、成交量等约束下能够实现。
- 上述目标接口不扣减未成交委托代表的未来持仓;有活动订单时不要重复按同一目标下单。先处理活动订单,再按实际持仓决定剩余调整量。
python
from localquant.apis import order_percent, order_target_percent
# 两种独立用法,不应为了演示而在策略里连续执行:
# order_percent("510300.SH", 0.2) # 增持约20%账户权益
# order_target_percent("510300.SH", 0.2) # 调整到约20%账户权益order_target_portfolio
摘要:批量调至目标权重;省略的已有持仓以零为目标,先卖后买。
python
order_target_portfolio(target_portfolio, price_or_styles={})| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
target_portfolio | dict[str | Instrument, float],必填 | 非负目标权重,合计不超过 1;空字典请求清空现有股票基金持仓 |
price_or_styles | dict[str, 价格样式],默认 {} | 键为代码;值为单一样式或 (买入样式, 卖出样式),类型见共用价格参数。目标中未配置价格的代码用市价单 |
返回:list[Order] — 包含实际提交的减仓、清仓与增仓订单;无提交则为 []。
注意:
- 返回顺序不构成成交保证。省略持仓的清仓单使用市价样式;若清仓也必须限价,将该代码显式写入目标且权重为 0,再在 price_or_styles 指定价格。
- 目标权重总和小于 1 表达留现金,但资金、取整、T+1及成交失败会影响实际权重。卖单提交不等于释放现金;只能使用实际成交释放的资金。
python
from localquant.apis import order_target_portfolio
# 在允许交易的回调内调用;其他已有持仓会被请求清仓。
orders = order_target_portfolio(
{"600000.SH": 0.2, "510300.SH": 0.3},
{"600000.SH": (10.0, 9.8)},
)
for order in orders:
traded_quantity = order.filled_quantityorder_target_portfolio_smart
摘要:在停牌、涨跌停、可平量与资金约束下计算并重分配目标。
python
order_target_portfolio_smart(target_portfolio, order_prices=None, valuation_prices=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
target_portfolio | Mapping[str, float] | pandas.Series,必填 | 非负目标权重;Series索引为代码。省略的现有持仓目标为0,通常以合计不超过1表达仓位预算 |
order_prices | Mapping[str, float] | pandas.Series | None,默认 None | None使用市价单;映射/Series提供原始限价,须覆盖实际要提交订单的标的,不传MarketOrder/LimitOrder对象作映射值 |
valuation_prices | Mapping[str, float] | pandas.Series | None,默认 None | 计算目标数量的估值价,显式提供时须覆盖目标和现有持仓全部代码。默认估值价:竞价用前一交易日收盘;日频 handle_bar 用当日开盘,与账户当前估值不同 |
返回:dict[str, Order | str] — Order 表示实际提交的订单,str 表示调仓算法给出的限制原因。
时机:只支持 open_auction 和日频 handle_bar,不支持分钟 handle_bar 或 scheduler。
注意:
- 实际权重不保证等于请求权重。
- 成交仍按实际订单样式及撮合配置,不是按估值价直接成交。
- 无需调整的标的可以不出现;后续订单校验失败也可能没有对应条目,不能把返回字典当成每个目标必有一行的完成清单。
python
from localquant.apis import order_target_portfolio_smart
outcomes = order_target_portfolio_smart({"510300.SH": 0.5})
for code, outcome in outcomes.items():
if isinstance(outcome, str):
reason = outcome
else:
actual_filled = outcome.filled_quantity按股数调整的通用接口
摘要:order按带符号数量增减仓,order_to按非负目标股/份数调整。
python
order(id_or_ins, quantity, price_or_style=None, price=None, style=None)
order_to(id_or_ins, quantity, price_or_style=None, price=None, style=None)id_or_ins和价格参数沿用共用参数。
| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
quantity | int,必填 | order按带符号数量增减仓,order_to按非负目标股/份数调整 |
返回:list[Order] — 两者均返回订单列表,无订单时为 []。
注意:价格使用单一样式。股票基金常规用order_shares或目标市值/权重接口更直观;同名函数在期货上是净手数语义,见期货接口。