Skip to content

设置函数 ​

策略里和界面同时设置了参数时,优先使用策略里设置的参数。

设置需要作为判断的基准 ​

set_benchmark-设置需要作为判断的基准

用于设定策略收益对比的基准。设置后,回测结果页的基准收益曲线将以此为准。仅初始化时设置有效,必须在 initialize(context) 中调用。默认是沪深 300。

函数原型 ​

python
set_benchmark(security)

参数详情 ​

参数名类型必填默认值说明示例
securitystr是沪深300指数sz / sh 前缀的指数、股票或 ETF 代码;忽略首尾空白和前缀大小写sh000001

返回值 ​

None

完整示例 ​

python
from zltquant import *
def initialize(context):
    set_benchmark('sz399300')

# 输出:None

if __name__ == '__main__':
    run_main()

注:如果没有调用 set_benchmark(),系统默认使用 sz399300。sh000300 会标准化为 sz399300;在同一次 initialize() 中多次调用时,以最后一次为准。最终值会写入本次运行的 results.db,用于后续绩效查询。

调用时机:仅允许在 initialize() 中调用;在 handle_data 等运行期调用会抛出 RuntimeError。参数类型或代码格式非法时抛出 ValueError。

设置策略参数 ​

set_option-设置策略参数

用于配置策略运行时的核心撮合与账号行为,仅初始化时设置有效,必须在 initialize(context) 中调用。

函数原型 ​

python
set_option(mode, value)

参数详情 ​

参数名类型必填说明
modestr是设置参数的名称(见下方 mode可选值表)
valueany是对应参数的取值
mode含义value默认值备注
'order_volume_ratio'设定成交量比例,根据实际行情限制每个订单的成交量。float: 0.0 ~ 1.01.0超过此比例的订单将部分成交或撤单
'match_with_order_book'设定是否启用盘口撮合模式bool: True 或 FalseFalse仅仿真环境有效,回测环境将自动忽略此项
'futures_margin_rate'如果策略里设置的账户数多于界面上添加的账户数,设定超出的账户模式。float 或 dict交易所标准除中金所股指期货外,其他品种使用合约单边保证金机制,对于一个合约的双向持仓只收较大的一边的保证金。中金所股指期货使用跨品种单边保证金,对于所有中金所股指期货标的,只收取双向持仓中更大的一边的保证金。示例:{'IF': 0.1, 'IH': 0.15}

返回值 ​

None

完整示例 ​

python
from zltquant import *
def initialize(context):
    set_option('order_volume_ratio', 1)

# 输出:None

if __name__ == '__main__':
    run_main()

设置佣金印花税等交易费率 ​

set_order_cost-设置佣金印花税等交易费率

用于自定义回测/仿真环境中的佣金、印花税、平今仓手续费等交易成本。仅初始化时设置有效,必须在 initialize(context) 中调用。

函数原型 ​

python
set_order_cost(cost, type, ref=None)

参数详情 ​

参数名类型必填说明
costOrderCost是OrderCost对象,用于配置各类税费与佣金(见下方字段说明)
typestr是品种类型:股票 stock / 基金 fund / 债券 bond / 期货 futures
refstr / None否暂不支持

cost-OrderCost 字段说明

字段名类型说明
close_taxfloat卖出时印花税(仅股票类标的收取,其他品种不收),印花税规则会根据历史规则变动
open_commissionfloat买入时佣金,按成交额比例计费时设置该值
open_fixed_commissionfloat买入时佣金,按每手固定计费时设置该值(仅期货有效,且与 open_commission 不能同时设置)
close_commissionfloat卖出时佣金,按成交额比例计费时设置该值
close_fixed_commissionfloat卖出时佣金,按每手固定计费时设置该值(仅期货有效,且与 close_commission 不能同时设置)
close_today_commissionfloat平今仓佣金,按成交额比例计费时设置该值(仅期货有效)
close_fixed_today_commissionfloat平今仓佣金,按每手固定计费时设置该值(仅期货有效,且与 close_today_commission 不能同时设置)
min_commissionfloat最低佣金(不包含印花税)

返回值 ​

None

完整示例 ​

python
from zltquant import *
def initialize(context):
    # 股票类每笔交易时的手续费:买入佣金万分之三;卖出佣金万分之三 + 千分之一印花税;最低佣金 5 元
    set_order_cost(
        OrderCost(
            close_tax=0.001,
            open_commission=0.0003,
            close_commission=0.0003,
            close_today_commission=0,
            min_commission=5
        ),
        type='stock'
    )

# 输出:None

if __name__ == '__main__':
    run_main()

设置滑点 ​

set_slippage-设置滑点

用于设置撮合成交时的滑点模型,用来模拟冲击成本。 仅初始化时设置有效,必须在 initialize(context) 中调用。

函数原型 ​

python
set_slippage(object, type=None, ref=None)

参数详情 ​

参数字段名类型必填说明
objectFixedSlippage / FixedPercent是滑点模型对象,支持固定值或百分比。
typestr否当前支持 None(全局)或股票 'stock'。基金、债券和期货的独立滑点尚未接入交易引擎,传入时明确抛出 NotImplementedError。
refstr否当前不支持标的级滑点;传入非空值时明确抛出 NotImplementedError。
滑点模型分类
  1. 固定值滑点:FixedSlippage(x)
    • 逻辑:成交价偏移 $x/2$。
    • 结构:实际返回 {'type': 0, 'value': x}。
    • 示例:FixedSlippage(0.02) 表示总价差 0.02 元。若当前价 10.0元,买入价为 10.01,卖出价为 9.99。
  2. 百分比滑点:FixedPercent(p)
    • 逻辑:成交价偏移基准价的 $p/2$。
    • 结构:实际返回 {'type': 1, 'value': p}。
    • 示例:FixedPercent(0.002) 表示总比例 0.2%。若当前价 10.0元,买入价为 10.01,卖出价为 9.99。

公开对象中的 type=0/1 分别表示固定值/百分比;框架在 SDK 边界将其转换为交易引擎的内部类型,并使用引擎实际消费的 slippageType 字段。固定值总价差在下传前折半为单边偏移,百分比由交易引擎保持历史折半语义。

返回值 ​

  • None

完整示例 ​

python
from zltquant import *
def initialize(context):
    # 设置全局固定值滑点
    set_slippage(FixedSlippage(0.02))
    # 输出: None

    # 为股票设定滑点为百分比滑点(覆盖上面的设置)
    set_slippage(FixedPercent(0.00246), type='stock')
    # 输出: None

if __name__ == '__main__':
    run_main()

设置或者更新此策略要操作的股票池 ​

set_universe-设置或更新策略的股票池(universe)。 可通过 context.universe 获取设置后的值。该股票池常用于:

  • 统一管理策略关注标的集合
  • 作为部分接口的默认 security 范围。- [支持] 行情函数缺省调用: 调用 history() 或 get_price() 时,若不传标的参数(security_list 或 security),系统将自动请求当前 universe 中的全量标的数据。
  • [支持] 回调数据过滤: 决定了 handle_data(context, data) 中 data 字典的范围。data 仅包含 universe 内标的的行情快照,具备自动过滤功能。
  • [支持] 动态实时更新: 支持在 handle_data 等运行阶段随时调用。更新后,context.universe 立即改变,且后续触发的 data 范围及行情接口缺省值将同步指向新股票池。

函数原型 ​

python
set_universe(security_list)

参数详情 ​

字段名字段类型说明
security_liststr / list[str]股票代码或股票列表。示例:'sz000001' 或 ['sz000001','sh600000']

返回值 ​

  • None

说明

项说明
context.universe 类型context.universe 属性返回值为 只读元组(Tuple),例如:('sz000001','sh600000')
是否可运行中更新支持在运行阶段调用,更新后 context.universe 会立即变化,且会在后续交易日持续保持,直到再次调用 set_universe

完整示例 ​

python
from zltquant import *
def initialize(context):
    set_universe(['sz000001', 'sh600000'])
    log.info(context.universe)
    # 输出: ('sz000001', 'sh600000')
def handle_data(context, data):
    # 运行中动态更新股票池
    set_universe(['sz000001'])
    log.info(context.universe)
    # 输出: ('sz000001',)

if __name__ == '__main__':
    run_main()