czsc入门10: Position类

你好!很高兴为你讲解 czsc/py/objects.py 中的 cal_break_even_point 函数与 Position 类。这两个组件主要用于策略回测交易信号分析

1. cal_break_even_point 函数

这是一个用于计算盈亏平衡点的辅助统计函数。

  • 功能 :在一个交易收益序列中,计算为了达到盈亏平衡(累计收益 ≥\ge≥ 0),需要剔除多少比例的最差交易。
  • 输入seq (List[float]),代表每一笔交易的收益率序列。
  • 输出float (0.0 ~ 1.0),表示需要剔除的交易比例(或者说是覆盖了多少比例的交易后才能回本)。

代码逻辑解析

python 复制代码
def cal_break_even_point(seq: List[float]) -> float:
    # 边界检查:如果没有交易或总收益本身就是亏损的,认为盈亏平衡点为 1.0(即无法平衡或全亏)
    if len(seq) <= 0 or sum(seq) < 0:
        return 1.0

    # 1. 对收益从小到大排序(最差的亏损排在前面)
    seq = sorted(seq)
    sub_ = 0
    sub_i = 0
    # 2. 累加收益
    for i, s_ in enumerate(seq):
        sub_ += s_
        sub_i = i + 1
        # 3. 一旦累计收益转正,说明前面的亏损已经被覆盖
        if sub_ >= 0:
            break
    
    # 4. 返回比例:(达到平衡时的交易笔数) / 总交易笔数
    return sub_i / len(seq)

业务含义:如果这个值很大(接近 1.0),说明你的策略大部分时候都在填补之前的亏损坑;如果值很小,说明只需很少的盈利交易就能覆盖所有亏损。


2. Position

这是一个轻量级的持仓管理与回测引擎 。它维护了一个标的的持仓状态,并根据传入的信号流 (update 方法) 自动执行开仓、平仓、止损和超时强平。

核心属性
  • pos : 当前仓位状态。1 (多头), -1 (空头), 0 (空仓)。
  • opens / exits : 定义了策略的交易规则 。它们是 Event 对象列表,分别对应"开仓条件"和"平仓条件"。
  • stop_loss: 硬止损设置,单位 BP(万分之一)。
  • timeout: 时间止损,持仓超过多少根 K 线后强制平仓。
  • interval: 冷却时间,同向开仓的最小时间间隔(秒)。
  • operates: 记录每一次操作的流水(开多、平多、开空、平空)。
  • pairs: (计算属性) 将流水匹配成完整的"开仓-平仓"对,用于统计胜率、盈亏比。
核心方法:update(s: dict)

这是该类的灵魂方法,用于驱动状态机流转。你每传入一个 K 线的信号字典 s,它就更新一次状态。

逻辑流程图解

  1. 信号匹配 :遍历 opensexits 事件,看当前的信号 s 是否触发了某个交易事件(如 LO 开多, LE 平多等)。
  2. 开仓逻辑
    • 如果触发 LO (Long Open):
      • 若当前无仓位且满足 interval 间隔 -> 开多仓 (pos=1)
      • 若当前持有空头 -> 平空仓 (pos=0)(反手逻辑的一部分)。
    • 如果触发 SO (Short Open):
      • 若当前无仓位且满足 interval 间隔 -> 开空仓 (pos=-1)
      • 若当前持有多头 -> 平多仓 (pos=0)
  3. 出场逻辑 (优先级从高到低)
    • 信号平仓 :如果触发了 LE (Long Exit) 或 SE (Short Exit),直接平仓。
    • 止损平仓 :计算当前价格相对于开仓价的亏损是否超过 stop_loss
    • 超时平仓 :检查持仓时间(K线数量)是否超过 timeout
核心方法:evaluatepairs
  • pairs :将 operates 列表中的流水转化为成对的交易记录。
    • 例如:[{'开仓时间':..., '平仓时间':..., '盈亏比例': 150BP}, ...]
  • evaluate(trade_dir) :基于 pairs 和持仓序列计算策略的绩效指标:
    • 夏普比率 (Sharp)
    • 最大回撤 (MaxDrawdown)
    • 年化收益
    • 胜率
    • 卡玛比率 (Calmar)

总结

  • cal_break_even_point 是一个用来评估策略"填坑能力"的小工具。
  • Position 是一个事件驱动 的微型回测器。你定义好何时开(opens)、何时平(exits)、何时止损(stop_loss),然后不断喂给它最新的 K 线数据(update),它就会告诉你最终的资金曲线和策略表现。
相关推荐
二狗哈2 天前
czsc入门8:Signal信号
python·量化·czsc
二狗哈7 天前
czsc入门5: Tick RawBar(原始k线) NewBar (新K线)
算法·czsc
a flying bird15 天前
大模型量化方案
大模型·量化
月满星沉18 天前
ONNX量化
深度学习·onnx·量化
dzj202123 天前
Unity的旁门左道用法(科学计算):用shader调用GPU做k线MA5的计算——DuckDB + Compute Shader
unity·金融·gpu·shader·量化·compute shader
BOBO爱吃菠萝1 个月前
Stable Diffusion 3.5 FP8镜像自动化部署脚本发布
stable diffusion·量化·fp8
AwakeFantasy1 个月前
关于最近想做一个基于日k选股票的系统这件事
python·股票·量化
小白量化1 个月前
聚宽策略分享-1年化98国九条后中小板微盘小改
大数据·数据库·人工智能·量化·qmt
小白量化1 个月前
量化研究--上线完成强大的金融数据库3.0系统
数据库·人工智能·python·算法·金融·量化·qmt