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),它就会告诉你最终的资金曲线和策略表现。
相关推荐
feasibility.9 小时前
量化:LLM与CV模型的极致压缩艺术
人工智能·科技·llm·边缘计算·量化·cv·压缩
DeepReinforce1 天前
二、AI量化投资:沪市主板A股所有股票20250430到20260430双均线(MA5/MA20)回测结果
人工智能·量化
2501_921649494 天前
企业定制金融数据 API:从架构设计到 Python 接入实战
大数据·开发语言·python·websocket·金融·量化
jiucaixiuyang10 天前
散户如何使用手机T0算法?
算法·量化·t0
ONE_SIX_MIX11 天前
最先进llama.cpp量化方法PK,APEX vs UD_XL,在 Qwen3.6-35B-A3B 中爆发! 2026年4月
apex·llama·量化·unsloth
2501_9216494912 天前
构建多市场统一金融数据 API 的实践指南
python·金融·个人开发·量化·api接口
玖菜量化笔记13 天前
用2万起步量化投资1年,亏了多少,学到了什么?
量化策略·量化
程序员三明治14 天前
【AI探索】程序员到底该怎么理解 LLM?
人工智能·ai·大模型·llm·量化·java后端·api调用
coft18 天前
读懂加密市场:系列总览
量化·交易·加密市场
2501_9216494918 天前
2026 量化策略回测的历史数据 API:从数据获取到策略验证
websocket·金融·restful·量化·回测·api文档