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),它就会告诉你最终的资金曲线和策略表现。
相关推荐
两个蝴蝶飞13 小时前
Java 量化系列(三十三):全自动维护股票与板块 概念 地域关联关系,效率拉满
股票量化·量化·java量化·java指标可视化
gzxx2007sddx5 天前
windows vnpy运行过程及问题记录
python·量化·vnpy
skywalk816317 天前
介绍一下 Backtrader量化框架(C# 回测快)
开发语言·c#·量化
skywalk816317 天前
介绍一下QuantConnect Lean(python 15k star)
开发语言·python·量化
二狗哈22 天前
czsc入门8:Signal信号
python·量化·czsc
二狗哈1 个月前
czsc入门5: Tick RawBar(原始k线) NewBar (新K线)
算法·czsc
a flying bird1 个月前
大模型量化方案
大模型·量化
月满星沉1 个月前
ONNX量化
深度学习·onnx·量化
dzj20211 个月前
Unity的旁门左道用法(科学计算):用shader调用GPU做k线MA5的计算——DuckDB + Compute Shader
unity·金融·gpu·shader·量化·compute shader