diff --git "a/docs/tutorial/\346\240\270\345\277\203\345\212\237\350\203\275\346\250\241\345\235\227\346\225\264\347\220\206.md" "b/docs/tutorial/\346\240\270\345\277\203\345\212\237\350\203\275\346\250\241\345\235\227\346\225\264\347\220\206.md" new file mode 100644 index 000000000..bce7978ef --- /dev/null +++ "b/docs/tutorial/\346\240\270\345\277\203\345\212\237\350\203\275\346\250\241\345\235\227\346\225\264\347\220\206.md" @@ -0,0 +1,1086 @@ +# CZSC 核心功能模块整理 + +> 本文档深度梳理 CZSC(缠中说禅技术分析工具)库的全部模块与功能函数,帮助用户快速了解整个项目的工具价值,按模块分类索引所有核心功能。 + +--- + +## 📋 目录 + +1. [项目概述](#1-项目概述) +2. [核心分析模块 czsc/core.py & czsc/py/](#2-核心分析模块) +3. [交易框架模块 czsc/traders/](#3-交易框架模块) +4. [信号函数模块 czsc/signals/](#4-信号函数模块) +5. [工具函数模块 czsc/utils/](#5-工具函数模块) +6. [研究传感器模块 czsc/sensors/](#6-研究传感器模块) +7. [可视化组件模块 czsc/svc/](#7-可视化组件模块-streamlit) +8. [数据连接器模块 czsc/connectors/](#8-数据连接器模块) +9. [特征工程模块 czsc/features/](#9-特征工程模块) +10. [探索性分析模块 czsc/eda.py](#10-探索性分析模块) +11. [策略框架模块 czsc/strategies.py](#11-策略框架模块) +12. [飞书集成模块 czsc/fsa/](#12-飞书集成模块) +13. [模拟数据模块 czsc/mock.py](#13-模拟数据模块) +14. [快速入门示例](#14-快速入门示例) +15. [按功能查找索引](#15-按功能查找索引) + +--- + +## 1. 项目概述 + +CZSC 是基于**缠中说禅理论**的综合性量化交易 Python 库,提供从原始 K 线到完整交易策略的全套工具链。 + +### 核心特色 + +| 特色 | 说明 | +|------|------| +| 🏗️ 缠论自动识别 | 分型、笔、线段、中枢全自动计算 | +| 🔄 多级别联立分析 | 支持日线、30分钟、5分钟等多周期同时分析 | +| 📡 信号-事件-交易体系 | 系统化的量化交易方法论 | +| ⚡ Rust/Python 混合架构 | 关键路径 Rust 加速,Python 灵活扩展 | +| 📊 多数据源接入 | Tushare、聚宽、天勤、CCXT(加密货币) | +| 🎛️ Streamlit 可视化 | 丰富的交互式分析组件 | +| 🧪 完善测试框架 | 统一的模拟数据生成和测试规范 | + +### 整体架构 + +``` +原始K线数据 + │ + ▼ +czsc/core.py (核心分析引擎) + │ 分型识别 → 笔识别 → 中枢识别 + ▼ +czsc/signals/ (信号计算层 ~200+ 信号函数) + │ 技术指标 | K线形态 | 缠论信号 | 量价信号 + ▼ +czsc/traders/ (交易框架层) + │ 信号聚合 → 事件匹配 → 持仓管理 + ▼ +czsc/svc/ (可视化层) + │ 回测报告 | 因子分析 | 相关性分析 + ▼ +交易决策 / 策略研究 +``` + +--- + +## 2. 核心分析模块 + +> **模块路径**: `czsc/core.py`(Rust 优先)、`czsc/py/`(Python 实现) + +### 2.1 核心类与数据结构 + +#### `czsc/py/objects.py` — 数据对象定义 + +| 类名 | 功能 | 关键字段 | +|------|------|---------| +| `RawBar` | 原始 K 线数据结构 | `symbol`, `dt`, `freq`, `open/high/low/close`, `vol`, `amount`, `cache` | +| `NewBar` | 去除包含关系后的 K 线 | 同 RawBar + `elements`(原始K线列表) | +| `FX` | 分型(顶底结构) | `symbol`, `dt`, `mark`(顶/底), `high`, `low`, `fx`, `elements` | +| `BI` | 笔(完整的升降运动) | `symbol`, `sdt`, `edt`, `direction`, `high`, `low`, `power`, `elements` | +| `ZS` | 中枢(价格震荡区间) | `symbol`, `sdt`, `edt`, `zstype`, `direction`, `high`, `low`, `power` | +| `Signal` | 交易信号 | `symbol`, `signal_type`, `signal_level`, `value1`, `value2`, `value3` | +| `Event` | 交易事件 | `signals_all`(AND), `signals_any`(OR), `signals_not`(NOT) | +| `Position` | 持仓管理 | `symbol`, `direction`, `qty`, `price`, `bid` | + +#### `czsc/py/enum.py` — 枚举定义 + +| 枚举 | 可选值 | 说明 | +|------|--------|------| +| `Freq` | `Tick`, `F1~F120`, `D`, `W`, `M`, `S` | K 线频率/周期 | +| `Mark` | `G`(顶), `D`(底) | 分型方向 | +| `Direction` | `Up`, `Down`, `Others` | 趋势方向 | +| `Operate` | `开多`, `平多`, `开空`, `平空`, `开多加仓`, `平多减仓`, … | 交易操作 | + +### 2.2 CZSC 核心分析类 + +#### `CZSC` — 缠论分析引擎 + +```python +from czsc.core import CZSC, format_standard_kline, Freq +from czsc.mock import generate_symbol_kines + +df = generate_symbol_kines('000001', '30分钟', '20240101', '20240105') +bars = format_standard_kline(df, freq=Freq.F30) +c = CZSC(bars) + +# 分析结果访问 +c.bars_raw # 原始K线列表 List[RawBar] +c.bars_new # 去包含后的K线列表 List[NewBar] +c.fxs # 分型列表 List[FX] +c.bi_list # 笔列表 List[BI] +c.zs_list # 中枢列表 List[ZS] +c.freq # 当前K线频率 + +# 增量更新(实盘/回测中使用) +c.update(new_bar) +``` + +#### 核心算法函数(`czsc/py/analyze.py`) + +| 函数 | 功能 | +|------|------| +| `remove_include(k1, k2, k3)` | 处理 K 线包含关系,输出合并后的 NewBar | +| `check_fx(k1, k2, k3)` | 判断三根 K 线是否构成分型 | +| `check_fxs(bars)` | 对一组 K 线序列识别所有分型 | +| `check_bi(fxs)` | 根据分型序列判断笔的有效性 | + +### 2.3 K线生成器 + +#### `BarGenerator` — 多级别 K 线合成 + +```python +from czsc.core import BarGenerator, Freq + +# 创建K线生成器(从30分钟合成日线、周线) +bg = BarGenerator(base_freq='30分钟', freqs=['日线', '周线']) + +# 逐条喂入基础K线 +for bar in raw_bars: + bg.update(bar) + +# 访问各级别K线 +bg.bars['30分钟'] # 30分钟K线 +bg.bars['日线'] # 合成的日线K线 +``` + +### 2.4 工具函数 + +| 函数 | 位置 | 功能 | +|------|------|------| +| `format_standard_kline(df, freq)` | `czsc.core` | DataFrame → `List[RawBar]` 数据格式转换 | +| `freq_end_time(dt, freq)` | `czsc.core` | 计算指定频率K线的结束时间 | + +--- + +## 3. 交易框架模块 + +> **模块路径**: `czsc/traders/` + +### 3.1 核心交易类 + +#### `CzscSignals` — 多级别信号聚合 + +多级别 K 线信号实时计算与聚合的核心类。 + +```python +from czsc.traders.base import CzscSignals + +# 创建信号聚合器 +cs = CzscSignals( + bg=bar_generator, # BarGenerator对象 + signals_config=[...], # 信号函数配置列表 +) + +# 更新并获取当前所有信号 +cs.update(new_bar) +signals = cs.s # 信号字典 {signal_key: signal_value} + +# 各级别CZSC对象 +kas = cs.kas # {freq: CZSC对象} +``` + +#### `CzscTrader` — 完整量化交易系统 + +在 `CzscSignals` 基础上增加持仓管理和交易执行逻辑。 + +```python +from czsc.traders.base import CzscTrader + +trader = CzscTrader( + bg=bar_generator, + signals_config=[...], + positions=[...], # 持仓策略配置列表 +) + +trader.update(new_bar) +trader.positions # 当前持仓列表 +trader.holds # 持仓历史记录 +trader.pairs # 完整交易对记录 +``` + +### 3.2 辅助功能 + +| 模块/函数 | 功能 | +|----------|------| +| `generate_czsc_signals(bars, signals_config, ...)` | 批量生成历史信号(回测用) | +| `check_signals_acc(bars, signals_config)` | 验证信号函数的准确性 | +| `get_unique_signals(positions)` | 从持仓策略中提取所有唯一信号 | +| `sig_parse.SignalsParser` | 信号配置解析器,自动推断所需频率 | +| `sig_parse.get_signals_config(...)` | 从持仓配置自动生成信号函数列表 | +| `sig_parse.get_signals_freqs(...)` | 提取信号所需的所有 K 线频率 | + +### 3.3 回测与绩效 + +#### `performance.py` — 绩效分析 + +| 函数 | 功能 | +|------|------| +| `PairsPerformance(pairs)` | 交易对绩效分析类(胜率、盈亏比等) | +| `combine_holds_and_pairs(holds, pairs)` | 合并持仓和交易对数据 | +| `combine_dates_and_pairs(dates, pairs)` | 合并日期序列和交易对数据 | + +#### `weight_backtest.py` — 权重回测 + +| 函数 | 功能 | +|------|------| +| `get_ensemble_weight(dfw, method)` | 多策略权重集成(等权、IC加权等) | +| `stoploss_by_direction(dfw, ...)` | 方向性止损策略 | + +#### `dummy.py` — 模拟回测 + +```python +from czsc.traders.dummy import DummyBacktest + +bt = DummyBacktest(symbol='000001', positions=[...]) +bt.run(bars) +bt.stats # 回测统计结果 +``` + +--- + +## 4. 信号函数模块 + +> **模块路径**: `czsc/signals/` +> +> 信号函数是 CZSC 最核心的功能之一,共约 **200+ 信号函数**,按类别组织。 +> +> **命名规范**:`{类别}_{描述}_{版本号}` 例如 `tas_macd_base_V221028` + +### 4.1 技术指标信号(tas.py) + +> 依赖 ta-lib 库,文件名 `tas` = TA-Lib Signals + +**缓存更新函数**(在信号函数内部调用,提供增量计算): + +| 函数 | 计算指标 | +|------|---------| +| `update_ma_cache(c, ma_type, timeperiod)` | 移动平均线(SMA/EMA/WMA 等) | +| `update_macd_cache(c, fastperiod, slowperiod, signalperiod)` | MACD | +| `update_boll_cache(c, timeperiod, nbdevup, nbdevdn)` | 布林带 | +| `update_kdj_cache(c, fastk_period, ...)` | KDJ 指标 | +| `update_rsi_cache(c, timeperiod)` | RSI 指标 | +| `update_cci_cache(c, timeperiod)` | CCI 指标 | +| `update_atr_cache(c, timeperiod)` | ATR 指标 | + +**常用信号函数**: + +| 信号函数 | 信号内容 | +|---------|---------| +| `tas_ma_base_V221101` | 当前价格相对均线位置(上方/下方) | +| `tas_double_ma_V221203` | 双均线交叉(金叉/死叉状态) | +| `tas_ma_system_V230513` | 均线系统多空排列 | +| `tas_macd_base_V221028` | MACD 当前状态(红柱/绿柱/零轴上下) | +| `tas_macd_power_V221108` | MACD 能量对比(背离/顺势) | +| `tas_macd_bc_V221201` | MACD 背离信号 | +| `tas_macd_bs1_V230312` | MACD 一买一卖信号 | +| `tas_boll_power_V221112` | 价格在布林带中的相对位置 | +| `tas_boll_bc_V221118` | 布林带收缩/扩张 | +| `tas_kdj_base_V221101` | KDJ 超买超卖状态 | +| `tas_rsi_base_V230227` | RSI 超买超卖及趋势 | +| `tas_cci_base_V230402` | CCI 超买超卖 | +| `tas_atr_break_V230424` | ATR 突破信号 | +| `tas_vol_base_V230214` | 成交量 MA 比较 | + +### 4.2 K线形态信号(bar.py) + +> 基于原始 K 线形态的信号,不依赖 ta-lib + +| 信号函数 | 信号内容 | +|---------|---------| +| `bar_single_V230506` | 单K趋势因子分层 | +| `bar_triple_V230506` | 三K加速形态(三连涨/跌) | +| `bar_accelerate_V221110` | K线加速形态 | +| `bar_fake_break_V230204` | 假突破形态 | +| `bar_break_V240428` | 有效突破信号 | +| `bar_reversal_V230227` | K线反转形态 | +| `bar_zdt_V230331` | 涨跌停板检测 | +| `bar_dual_thrust_V230403` | Dual Thrust 策略信号 | +| `bar_r_breaker_V230326` | R-Breaker 策略信号 | +| `bar_tnr_V230629` | TNR(趋势强度)计算 | +| `bar_vol_grow_V221112` | 成交量放大形态 | +| `bar_big_solid_V221112` | 大实体K线 | +| `bar_comb_feng_V230226` | K线组合封口形态 | + +### 4.3 缠论上下文信号(cxt.py) + +> 基于缠论笔、线段、中枢的高级信号 + +| 信号函数 | 信号内容 | +|---------|---------| +| `cxt_bi_end_V230222` | 笔结束信号(当前笔是否接近结束) | +| `cxt_bi_end_V230224` | 笔结束信号(另一版本) | +| `cxt_fx_power_V221107` | 分型力度(顶底分型的强弱) | +| `cxt_first_buy_V221126` | 一买信号(一类买点) | +| `cxt_first_sell_V221126` | 一卖信号(一类卖点) | +| `cxt_bi_status_V230101` | 当前笔的状态(方向、强弱) | +| `cxt_range_oscillation_V230620` | 区间震荡状态 | +| `cxt_overlap_V240526` | 笔的重叠分析 | +| `cxt_decision_V240526` | 综合决策信号 | +| `cxt_third_bs_V230228` | 三买三卖信号 | +| `cxt_bs1_V230319` | 笔级别买卖点一 | +| `cxt_bs2_V230320` | 笔级别买卖点二 | + +### 4.4 缠论辅助信号(byi.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `byi_symmetry_zs_V221107` | 对称中枢信号 | +| `byi_bi_end_V230106` | 笔结束判断(变体一) | +| `byi_bi_end_V230107` | 笔结束判断(变体二) | +| `byi_second_bs_V230324` | 二买二卖辅助信号 | + +### 4.5 量价信号(vol.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `vol_single_ma_V230214` | 单均线量能判断 | +| `vol_double_ma_V230214` | 双均线量能判断 | +| `vol_ti_suo_V221216` | 量能缩量(缩价量特征) | +| `vol_gao_di_V221218` | 量能高低(放量/缩量) | + +### 4.6 指标辅助信号(coo.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `coo_td_V221110` | TD 序列(Tom DeMark 指标) | +| `coo_cci_V230323` | CCI 超买超卖 | +| `coo_kdj_V230322` | KDJ 金叉死叉 | +| `coo_sar_V230325` | SAR 抛物线转向 | + +### 4.7 持仓管理信号(pos.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `pos_fx_stop_V230414` | 分型止损信号 | +| `pos_ma_V230414` | 均线持仓信号 | +| `pos_holds_V230414` | 持仓状态信号 | +| `pos_fix_exit_V230624` | 固定时间/条件退出 | +| `pos_profit_loss_V230624` | 盈亏比动态止损/止盈 | +| `pos_bar_stop_V230624` | K线形态止损 | + +### 4.8 日本蜡烛图形态信号(jcc.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `jcc_san_xing_xian_V221023` | 三星线形态 | +| `jcc_ten_mo_V221028` | 锤头/吊颈线 | +| `jcc_two_crow_V221108` | 两只乌鸦 | +| `jcc_three_crow_V221108` | 三只乌鸦 | +| `jcc_gap_yin_yang_V221121` | 跳空阴阳线 | +| `jcc_morning_star_V221028` | 早晨之星 | +| `jcc_evening_star_V221028` | 黄昏之星 | +| `jcc_harami_V221028` | 孕线形态(母子线) | +| `jcc_engulf_V221028` | 吞没形态 | + +### 4.9 角度/动量信号(ang.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `adtm_up_dw_line_V230603` | ADTM 动量指标 | +| `skdj_up_dw_line_V230611` | SKDJ 慢速KDJ | +| `obv_up_dw_line_V230719` | OBV 能量潮 | +| `bias_up_dw_line_V230706` | BIAS 乖离率 | +| `asi_up_dw_line_V230708` | ASI 累积摆动指标 | +| `clv_up_dw_line_V230712` | CLV 收盘价定位 | +| `cmo_up_dw_line_V230713` | CMO Chande动量振荡器 | +| `amv_up_dw_line_V230720` | AMV 自适应均量 | + +### 4.10 自定义信号(zdy.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `zdy_stop_loss_V230406` | 自定义止损逻辑 | +| `zdy_vibrate_V230406` | 震荡市场特征 | +| `zdy_macd_bc_V230422` | MACD 背离变体 | +| `pressure_support_V240222` | 压力支撑位识别 | + +### 4.11 扩展长信号(xls.py) + +| 信号函数 | 信号内容 | +|---------|---------| +| `xl_bar_position_V240328` | 价格在历史区间中的位置 | +| `xl_bar_trend_V240329` | 长周期趋势判断 | +| `xl_bar_basis_V240411` | 价差基差信号 | + +--- + +## 5. 工具函数模块 + +> **模块路径**: `czsc/utils/` + +### 5.1 技术分析工具(ta.py) + +常用技术指标的纯 Python 实现(无需 ta-lib): + +| 函数 | 功能 | +|------|------| +| `SMA(close, timeperiod)` | 简单移动平均 | +| `EMA(close, timeperiod)` | 指数移动平均 | +| `MACD(close, fastperiod, slowperiod, signalperiod)` | MACD 指标 | +| `BOLL(close, timeperiod, nbdevup, nbdevdn)` | 布林带 | +| `KDJ(high, low, close, fastk, slowk, slowd)` | KDJ 指标 | +| `RSI(close, timeperiod)` | RSI 相对强弱指标 | +| `ATR(high, low, close, timeperiod)` | ATR 真实波动范围 | +| `SAR(high, low, acceleration, maximum)` | 抛物线 SAR | + +### 5.2 信号工具函数(sig.py) + +| 函数 | 功能 | +|------|------| +| `cross_zero_axis(values)` | 判断序列穿越零轴的方向 | +| `cal_cross_num(values1, values2)` | 计算两序列交叉次数 | +| `down_cross_count(values1, values2)` | 统计向下穿越次数 | +| `get_sub_elements(bars, di, n)` | 从K线列表末尾取 n 个元素 | +| `fast_slow_cross(fast, slow)` | 快慢线交叉状态 | +| `count_last_same(values)` | 统计末尾连续相同值的数量 | +| `create_single_signal(k1, k2, k3, v1, ...)` | 创建标准信号字典 | +| `single_linear(values)` | 单变量线性拟合(返回斜率、R²等) | + +### 5.3 交易工具函数(trade.py) + +| 函数 | 功能 | +|------|------| +| `update_nxb(bars, n)` | 计算未来 n 根 K 线收益 | +| `update_bbars(bars, n)` | 计算过去 n 根 K 线特征 | +| `update_tbars(bars, window)` | 时间窗口内特征计算 | +| `risk_free_returns(sdt, edt, freq)` | 获取无风险收益率 | +| `resample_to_daily(dfw, ...)` | 权重/收益重采样为日频 | + +### 5.4 数据管理(utils/data/) + +| 类/函数 | 位置 | 功能 | +|--------|------|------| +| `DataClient` | `data/client.py` | 统一数据获取接口 | +| `DiskCache` | `data/cache.py` | 磁盘缓存,LRU 策略 | +| `home_path` | `data/cache.py` | 缓存目录路径 | +| `get_dir_size(path)` | `data/cache.py` | 获取目录大小 | +| `validate_bars(bars)` | `data/validators.py` | K线数据有效性验证 | +| `format_standard_kline(df, freq)` | `data/converters.py` | DataFrame → RawBar 转换 | + +### 5.5 文件 I/O(io.py) + +| 函数 | 功能 | +|------|------| +| `dill_dump(obj, path)` | 将 Python 对象序列化保存(支持 lambda 等) | +| `dill_load(path)` | 从文件反序列化加载对象 | +| `read_json(path)` | 读取 JSON 文件 | +| `save_json(obj, path)` | 保存对象为 JSON 文件 | + +### 5.6 分析工具(utils/analysis/) + +| 函数 | 位置 | 功能 | +|------|------|------| +| `cal_break_even_point(pairs)` | `analysis/stats.py` | 计算盈亏平衡点 | +| `show_correlation(df, ...)` | `analysis/corr.py` | 相关性矩阵计算与可视化 | +| `event_return_analysis(df, event_col, ret_col)` | `analysis/events.py` | 事件收益率分析 | + +### 5.7 可视化工具(utils/plotting/) + +| 模块 | 主要函数 | 功能 | +|------|---------|------| +| `plotting/kline.py` | `kline_chart(bars)` | 绘制 K 线图(含分型笔中枢标注) | +| `plotting/backtest.py` | `plot_backtest_stats(dret)` | 回测统计综合图 | +| `plotting/backtest.py` | `plot_cumulative_returns(dret)` | 累计收益曲线 | +| `plotting/backtest.py` | `plot_drawdown_analysis(dret)` | 回撤分析图 | +| `plotting/backtest.py` | `plot_monthly_heatmap(dret)` | 月度收益热力图 | +| `plotting/weight.py` | `plot_weight_distribution(dfw)` | 权重分布图 | + +### 5.8 其他工具 + +| 模块/函数 | 功能 | +|----------|------| +| `backtest_report.py` | 生成完整回测报告(HTML/PDF) | +| `html_report_builder.py` | HTML 报告构建器 | +| `features.py` | 特征工程辅助函数 | +| `cross.py` | 截面分析工具(IC、IR 等) | +| `bi_info.py` | 计算笔的详细信息 | +| `kline_quality.py` | K 线数据质量检查 | +| `weights_convert.py` | 信号权重格式转换 | +| `mark_czsc_status.py` | 标记缠论状态到 DataFrame | +| `log.py` | 日志工具封装 | +| `oss.py` | 阿里云 OSS 存储集成 | +| `echarts_plot.py` | ECharts 图表生成 | + +--- + +## 6. 研究传感器模块 + +> **模块路径**: `czsc/sensors/` + +### 6.1 CTA 研究框架(cta.py) + +#### `CTAResearch` — 商品交易顾问研究工具 + +提供统一的策略回测、参数优化接口,支持多品种并行处理。 + +```python +from czsc.sensors.cta import CTAResearch + +research = CTAResearch( + symbols=['000001', '000002'], + sdt='20230101', + edt='20240101', +) + +# 单品种回放 +result = research.replay(symbol='000001', positions=[...]) + +# 多品种并行优化 +results = research.batch_replay(positions=[...], n_jobs=4) +``` + +| 方法 | 功能 | +|------|------| +| `replay(symbol, positions)` | 单品种策略回放 | +| `batch_replay(positions, n_jobs)` | 多品种并行回放 | +| `grid_search(positions, params)` | 参数网格搜索 | +| `save_results(path)` | 保存回测结果 | + +### 6.2 工具函数(utils.py) + +| 函数 | 功能 | +|------|------| +| `max_draw_down(returns)` | 计算最大回撤及回撤区间 | +| `turn_over_rate(holds, freq)` | 计算组合换手率 | +| `holds_concepts_effect(holds, concepts)` | 分析持仓概念板块效果 | + +--- + +## 7. 可视化组件模块(Streamlit) + +> **模块路径**: `czsc/svc/` +> +> 提供基于 Streamlit 的交互式可视化组件,在数据分析 Web 应用中使用。 + +### 7.1 收益率可视化(returns.py) + +| 函数 | 功能 | +|------|------| +| `show_daily_return(dret, ...)` | 日收益率柱状图 | +| `show_cumulative_returns(dret, ...)` | 累计收益曲线(支持基准对比) | +| `show_monthly_return(dret, ...)` | 月度收益热力图 | +| `show_drawdowns(dret, ...)` | 回撤期间分析图 | +| `show_rolling_daily_performance(dret, window)` | 滚动绩效指标曲线 | + +### 7.2 因子分析(factor.py) + +| 函数 | 功能 | +|------|------| +| `show_feature_returns(df, feat_col, ret_col)` | 特征-收益关系分析 | +| `show_factor_layering(df, factor_col, ret_col, n)` | 因子分层回测(N 层) | +| `show_factor_value(df, factor_col)` | 因子值分布统计 | +| `show_event_return(df, event_col, ret_col)` | 事件驱动收益分析 | +| `show_event_features(df, event_col, feat_cols)` | 事件特征分布分析 | + +### 7.3 相关性分析(correlation.py) + +| 函数 | 功能 | +|------|------| +| `show_correlation(df, ...)` | 相关性矩阵热力图 | +| `show_sectional_ic(df, factor_col, ret_col)` | 截面信息系数(IC) | +| `show_ts_rolling_corr(s1, s2, window)` | 时序滚动相关性 | +| `show_ts_self_corr(series, max_lag)` | 序列自相关分析 | +| `show_cointegration(s1, s2)` | 协整关系检验 | +| `show_corr_graph(df)` | 相关性网络图 | +| `show_symbols_corr(dfw, symbols)` | 多品种相关性矩阵 | + +### 7.4 回测可视化(backtest.py) + +| 函数 | 功能 | +|------|------| +| `show_weight_distribution(dfw)` | 持仓权重分布 | +| `show_weight_backtest(dfw, ...)` | 权重策略回测结果 | +| `show_holds_backtest(holds, ...)` | 持仓记录回测结果 | +| `show_stoploss_by_direction(dfw)` | 分方向止损分析 | +| `show_backtest_by_thresholds(dfw)` | 阈值敏感性分析 | +| `show_backtest_by_year(dfw)` | 分年度回测统计 | +| `show_long_short_backtest(dfw)` | 多空分离回测 | +| `show_comprehensive_weight_backtest(dfw)` | 综合权重回测报告 | + +### 7.5 权重可视化(weights.py) + +| 函数 | 功能 | +|------|------| +| `show_weight_ts(dfw)` | 权重时间序列 | +| `show_weight_dist(dfw)` | 权重分布直方图 | +| `show_weight_cdf(dfw)` | 权重累积分布 | +| `show_weight_abs(dfw)` | 绝对权重分析 | + +### 7.6 统计分析(statistics.py) + +| 函数 | 功能 | +|------|------| +| `show_splited_daily(dret, freq)` | 按频率拆分的日收益统计 | +| `show_yearly_stats(dret)` | 分年度绩效统计表 | +| `show_pairwise_stats(pairs)` | 交易对统计分析 | +| `show_holds_stats(holds)` | 持仓统计分析 | +| `show_turnover_rate(dfw)` | 换手率分析 | + +### 7.7 策略分析(strategy.py) + +| 函数 | 功能 | +|------|------| +| `show_strategy_positions(trader)` | 策略持仓可视化 | +| `show_position_detail(position)` | 单持仓策略详情 | +| `show_czsc_chart(czsc_obj)` | CZSC 分析图表 | + +### 7.8 价格敏感分析(price_analysis.py) + +| 函数 | 功能 | +|------|------| +| `show_price_sensitivity(df, ...)` | 价格敏感性分析 | +| `show_slippage_analysis(df, ...)` | 滑点影响分析 | + +### 7.9 表单组件(forms.py) + +| 函数 | 功能 | +|------|------| +| `date_range_selector(...)` | 日期范围选择器 | +| `symbol_selector(symbols)` | 品种选择器 | +| `freq_selector(freqs)` | 频率选择器 | +| `position_config_form(...)` | 持仓策略配置表单 | + +--- + +## 8. 数据连接器模块 + +> **模块路径**: `czsc/connectors/` + +### 8.1 Tushare 连接器(ts_connector.py) + +```python +import czsc.connectors.ts_connector as ts + +ts.pro_api.set_token("your_token") +df = ts.get_kline_period(symbol='000001.SZ', freq='30分钟', sdt='20240101', edt='20240131') +``` + +| 函数 | 功能 | +|------|------| +| `get_kline_period(symbol, freq, sdt, edt)` | 获取历史 K 线数据 | +| `get_symbols_daily(symbols, sdt, edt)` | 批量获取日线数据 | +| `get_index_weights(index_code, date)` | 获取指数权重 | +| `get_bar_generator(symbol, freq, sdt, edt, freqs)` | 获取初始化好的 BarGenerator | + +### 8.2 天勤连接器(tq_connector.py) + +```python +from czsc.connectors.tq_connector import get_kline_period + +# 获取期货K线数据 +df = get_kline_period(symbol='SHFE.rb2501', freq='30分钟', sdt='20240101', edt='20240131') +``` + +| 函数 | 功能 | +|------|------| +| `get_kline_period(symbol, freq, sdt, edt)` | 获取期货/股指K线数据 | +| `symbols_performance(symbols, ...)` | 多品种绩效分析 | + +### 8.3 CCXT 连接器(ccxt_connector.py) + +> 用于加密货币市场数据接入 + +```python +from czsc.connectors.ccxt_connector import get_kline_period + +# 获取 BTC 数据 +df = get_kline_period(symbol='BTC/USDT', freq='1h', sdt='20240101', edt='20240131') +``` + +### 8.4 研究数据接口(research.py) + +| 函数 | 功能 | +|------|------| +| `get_raw_bars(symbol, freq, sdt, edt, ...)` | 获取 `List[RawBar]` 格式数据 | +| `get_symbols(market)` | 获取市场全部品种列表 | +| `get_kline(symbol, freq, sdt, edt)` | 获取 DataFrame 格式 K 线 | + +--- + +## 9. 特征工程模块 + +> **模块路径**: `czsc/features/` + +### 9.1 工具函数(utils.py) + +| 函数 | 功能 | +|------|------| +| `normalize_feature(series)` | 特征标准化(Z-Score/分位数) | +| `rank_feature(df, factor_col)` | 截面因子排序 | +| `neutralize_feature(df, factor_col, industry_col)` | 因子中性化(行业/市值) | + +### 9.2 量价因子(vpf.py) + +| 函数 | 功能 | +|------|------| +| `calculate_vpf(bars)` | 计算量价综合因子 | +| `vwap(bars)` | 成交量加权平均价格 | + +### 9.3 收益特征(ret.py) + +| 函数 | 功能 | +|------|------| +| `get_future_returns(df, periods)` | 计算未来 N 周期收益 | +| `get_momentum_features(df, lookback)` | 动量特征计算 | + +--- + +## 10. 探索性分析模块 + +> **模块路径**: `czsc/eda.py` + +```python +from czsc import eda +``` + +| 函数 | 功能 | +|------|------| +| `vwap(df)` | 成交量加权平均价(VWAP) | +| `twap(df)` | 时间加权平均价(TWAP) | +| `remove_beta_effects(df, factor_col, beta_col)` | 去除 Beta 效应(因子正交化) | +| `cross_sectional_strategy(df, factor_col, ...)` | 截面策略分析(分层回测) | +| `judge_factor_direction(df, factor_col, ret_col)` | 判断因子有效方向 | +| `monotonicity(series)` | 检验序列的单调性 | +| `turnover_rate(df, date_col, symbol_col)` | 计算策略换手率 | +| `make_price_features(df)` | 从价格序列生成常用特征 | +| `daily_performance(returns)` | 计算日频绩效指标集合 | + +--- + +## 11. 策略框架模块 + +> **模块路径**: `czsc/strategies.py` + +### `CzscStrategyBase` — 策略抽象基类 + +```python +from czsc.strategies import CzscStrategyBase + +class MyStrategy(CzscStrategyBase): + @property + def symbol_params(self): + return {'000001.SZ': {'lot': 100}} + + @property + def freqs(self): + return ['30分钟', '日线'] + + @property + def signals_config(self): + return [...] + + @property + def positions(self): + return [...] +``` + +### `CzscJsonStrategy` — JSON 配置化策略 + +```python +from czsc.strategies import CzscJsonStrategy + +# 从 JSON 配置加载策略 +strategy = CzscJsonStrategy.from_json('strategy.json') +strategy.to_json('strategy_copy.json') +``` + +| 方法 | 功能 | +|------|------| +| `from_json(path)` | 从 JSON 文件加载策略 | +| `to_json(path)` | 将策略序列化为 JSON | +| `validate()` | 验证策略配置合法性 | + +--- + +## 12. 飞书集成模块 + +> **模块路径**: `czsc/fsa/` +> +> 用于将策略信号和研究结果推送到飞书(Lark)平台。 + +| 类/函数 | 位置 | 功能 | +|--------|------|------| +| `FeishuApiBase` | `fsa/base.py` | 飞书 API 基础封装 | +| `BiTable` | `fsa/bi_table.py` | 飞书多维表格操作(读写数据) | +| `send_message(webhook, content)` | `fsa/im.py` | 发送飞书 IM 消息 | +| `SpreadSheets` | `fsa/spreed_sheets.py` | 飞书电子表格操作 | +| `push_strategy_latest(...)` | `fsa/push_strategy_latest.py` | 推送策略最新信号卡片 | + +--- + +## 13. 模拟数据模块 + +> **模块路径**: `czsc/mock.py` + +用于测试和开发,生成可重现的模拟 K 线数据。 + +```python +from czsc.mock import generate_symbol_kines + +# 生成模拟K线数据 +df = generate_symbol_kines( + symbol='000001', + freq='30分钟', + sdt='20240101', + edt='20240201', + seed=42 # 随机种子,确保可重现 +) +``` + +| 函数 | 功能 | +|------|------| +| `generate_symbol_kines(symbol, freq, sdt, edt, seed)` | 生成单品种模拟K线 DataFrame | +| `generate_klines(n, freq, seed)` | 生成指定数量的模拟 K 线 | + +--- + +## 14. 快速入门示例 + +### 示例 1:缠论分析基础 + +```python +from czsc.core import CZSC, format_standard_kline, Freq +from czsc.mock import generate_symbol_kines + +# 1. 生成测试数据 +df = generate_symbol_kines('000001', '30分钟', '20240101', '20240201') + +# 2. 转换格式 +bars = format_standard_kline(df, freq=Freq.F30) + +# 3. 创建CZSC分析对象 +c = CZSC(bars) + +# 4. 查看分析结果 +print(f"K线数量: {len(c.bars_raw)}") +print(f"分型数量: {len(c.fxs)}") +print(f"笔数量: {len(c.bi_list)}") +print(f"中枢数量: {len(c.zs_list)}") +``` + +### 示例 2:多级别信号计算 + +```python +from czsc.core import BarGenerator, Freq, format_standard_kline +from czsc.traders.base import CzscSignals, generate_czsc_signals +from czsc.signals.tas import tas_macd_base_V221028, tas_ma_base_V221101 +from czsc.mock import generate_symbol_kines + +# 1. 准备数据 +df = generate_symbol_kines('000001', '5分钟', '20240101', '20240201') +bars = format_standard_kline(df, freq=Freq.F5) + +# 2. 信号配置 +signals_config = [ + {'name': tas_macd_base_V221028, 'freq': '5分钟', 'di': 1}, + {'name': tas_ma_base_V221101, 'freq': '5分钟', 'di': 1, 'timeperiod': 20}, + {'name': tas_macd_base_V221028, 'freq': '30分钟', 'di': 1}, +] + +# 3. 批量生成历史信号 +results = generate_czsc_signals(bars, signals_config, freqs=['30分钟']) +print(results.head()) +``` + +### 示例 3:完整策略回测 + +```python +from czsc.core import format_standard_kline, Freq +from czsc.traders.base import CzscTrader +from czsc.py.objects import Position, Event, Signal, Operate +from czsc.mock import generate_symbol_kines + +# 1. 数据准备 +df = generate_symbol_kines('000001', '30分钟', '20230101', '20240101') +bars = format_standard_kline(df, freq=Freq.F30) + +# 2. 定义持仓策略 +long_position = Position( + name='MACD多头策略', + symbol='000001', + opens=[ + Event( + name='开多', + operate=Operate.LO, + signals_all=[ + Signal('30分钟_D1_MACD多空_多头_任意_任意_0'), + ] + ) + ], + exits=[ + Event( + name='平多', + operate=Operate.LE, + signals_all=[ + Signal('30分钟_D1_MACD多空_空头_任意_任意_0'), + ] + ) + ], + interval=3600, # 开仓间隔(秒) + timeout=20, # 超时K线数 + stop_loss=0.05, # 止损比例 5% +) + +# 3. 运行回测 +trader = CzscTrader(bg=..., signals_config=[...], positions=[long_position]) +for bar in bars: + trader.update(bar) + +print(f"总交易次数: {len(trader.pairs)}") +``` + +### 示例 4:权重回测与可视化(Streamlit) + +```python +import streamlit as st +from czsc.svc.backtest import show_weight_backtest +from czsc.svc.returns import show_cumulative_returns + +# 在 Streamlit 应用中展示回测结果 +# dfw: DataFrame with columns [dt, symbol, weight, price] +show_weight_backtest(dfw, fee_rate=0.001) + +# 展示收益曲线 +show_cumulative_returns(dret) # dret: DataFrame with datetime index +``` + +--- + +## 15. 按功能查找索引 + +### 数据处理 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 生成模拟K线数据 | `generate_symbol_kines()` | `czsc.mock` | +| DataFrame 转 RawBar | `format_standard_kline()` | `czsc.core` | +| 多级别K线合成 | `BarGenerator` | `czsc.core` | +| 获取历史K线(Tushare) | `ts_connector.get_kline_period()` | `czsc.connectors` | +| 获取期货K线(天勤) | `tq_connector.get_kline_period()` | `czsc.connectors` | +| 获取加密货币K线 | `ccxt_connector.get_kline_period()` | `czsc.connectors` | +| K线数据质量检查 | `kline_quality` 模块 | `czsc.utils` | + +### 缠论分析 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 分型识别 | `check_fx()`, `check_fxs()` | `czsc.py.analyze` | +| 笔识别 | `check_bi()` | `czsc.py.analyze` | +| K线包含处理 | `remove_include()` | `czsc.py.analyze` | +| 完整缠论分析 | `CZSC` 类 | `czsc.core` | +| 笔详细信息 | `bi_info` 模块 | `czsc.utils` | + +### 技术指标计算 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 均线(不依赖ta-lib) | `SMA()`, `EMA()` | `czsc.utils.ta` | +| MACD(不依赖ta-lib) | `MACD()` | `czsc.utils.ta` | +| MACD 信号(带缓存) | `update_macd_cache()` + `tas_macd_base_V221028()` | `czsc.signals.tas` | +| 均线信号 | `update_ma_cache()` + `tas_ma_base_V221101()` | `czsc.signals.tas` | +| K线形态 | `jcc_*` 系列函数 | `czsc.signals.jcc` | +| 量价信号 | `vol_*` 系列函数 | `czsc.signals.vol` | + +### 策略回测 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 批量生成历史信号 | `generate_czsc_signals()` | `czsc.traders.base` | +| 实时信号计算 | `CzscSignals` 类 | `czsc.traders.base` | +| 完整回测框架 | `CzscTrader` 类 | `czsc.traders.base` | +| 简单模拟回测 | `DummyBacktest` 类 | `czsc.traders.dummy` | +| 交易对绩效 | `PairsPerformance` 类 | `czsc.traders.performance` | +| 权重策略回测 | `get_ensemble_weight()` | `czsc.traders.weight_backtest` | +| 参数优化 | `OpensOptimize`, `ExitsOptimize` | `czsc.traders.optimize` | +| CTA 研究框架 | `CTAResearch` 类 | `czsc.sensors.cta` | + +### 因子/特征分析 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 因子分层回测 | `show_factor_layering()` | `czsc.svc.factor` | +| IC 分析 | `show_sectional_ic()` | `czsc.svc.correlation` | +| 因子正交化 | `remove_beta_effects()` | `czsc.eda` | +| 特征标准化 | `normalize_feature()` | `czsc.features.utils` | +| 截面策略 | `cross_sectional_strategy()` | `czsc.eda` | + +### 可视化 + +| 需求 | 工具 | 位置 | +|------|------|------| +| K线图(含缠论标注) | `kline_chart()` | `czsc.utils.plotting.kline` | +| 累计收益曲线 | `show_cumulative_returns()` | `czsc.svc.returns` | +| 回撤分析 | `show_drawdowns()` | `czsc.svc.returns` | +| 月度收益热力图 | `show_monthly_return()` | `czsc.svc.returns` | +| 相关性矩阵 | `show_correlation()` | `czsc.svc.correlation` | +| 权重分布 | `show_weight_distribution()` | `czsc.svc.backtest` | +| 综合回测报告 | `show_weight_backtest()` | `czsc.svc.backtest` | +| 分年度统计 | `show_yearly_stats()` | `czsc.svc.statistics` | + +### 数据存储/缓存 + +| 需求 | 工具 | 位置 | +|------|------|------| +| 磁盘缓存 | `DiskCache` | `czsc.utils.data.cache` | +| 对象序列化 | `dill_dump()`, `dill_load()` | `czsc.utils.io` | +| JSON 读写 | `read_json()`, `save_json()` | `czsc.utils.io` | +| 清理缓存 | `empty_cache_path()` | `czsc` | +| 查看缓存大小 | `get_dir_size(home_path)` | `czsc.utils.data.cache` | + +--- + +## 附录:重要约定和规范 + +### 信号函数命名规范 + +``` +{类别}_{描述}_{版本号} +例:tas_macd_base_V221028 + │ │ │ + │ │ └─ 版本号(年月日) + │ └─────── 描述(macd_base) + └──────────── 类别(tas = TA-Lib Signals) +``` + +### 信号值格式 + +``` +信号键:"{freq}_{di标识}_{描述}_{版本}" +信号值:"{value1}_{value2}_{value3}_{count}" +例:('30分钟_D1MACD多空_V221028', '多头_任意_任意_0') +``` + +### 频率枚举说明 + +| 值 | 说明 | +|----|------| +| `Freq.F1` | 1分钟 | +| `Freq.F5` | 5分钟 | +| `Freq.F15` | 15分钟 | +| `Freq.F30` | 30分钟 | +| `Freq.F60` | 60分钟(1小时) | +| `Freq.D` | 日线 | +| `Freq.W` | 周线 | +| `Freq.M` | 月线 | + +### 环境变量配置 + +```python +import os + +# 强制使用 Python 实现(跳过 Rust 版本) +os.environ['CZSC_USE_PYTHON'] = '1' + +# 查看当前配置 +from czsc import envs +print(envs.get_min_bi_len()) # 最小笔长度 +print(envs.get_max_bi_num()) # 最大笔数量 +``` + +--- + +> 📚 **更多学习资源** +> - [项目文档(飞书)](https://s0cqcxuy3p.feishu.cn/wiki/wikcn3gB1MKl3ClpLnboHM1QgKf) +> - [API 文档](https://czsc.readthedocs.io/en/latest/modules.html) +> - [B站视频教程](https://space.bilibili.com/243682308/channel/series) +> - [信号函数编写规范](https://s0cqcxuy3p.feishu.cn/wiki/wikcnCFLLTNGbr2THqo7KtWfBkd)