MCPcopy
hub / github.com/Vespa314/chan.py

github.com/Vespa314/chan.py @main sqlite

repository ↗ · DeepWiki ↗
612 symbols 2,121 edges 64 files 44 documented · 7%
README

             ██████╗██╗  ██╗ █████╗ ███╗   ██╗   ██████╗ ██╗   ██╗
            ██╔════╝██║  ██║██╔══██╗████╗  ██║   ██╔══██╗╚██╗ ██╔╝
            ██║     ███████║███████║██╔██╗ ██║   ██████╔╝ ╚████╔╝
            ██║     ██╔══██║██╔══██║██║╚██╗██║   ██╔═══╝   ╚██╔╝
            ╚██████╗██║  ██║██║  ██║██║ ╚████║██╗██║        ██║
             ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝╚═╝        ╚═╝

GitHub stars

特别说明①:当前公开部分代码暂时只包含基本的静态计算能力,暂未包含策略类,特征,模型,automl框架,交易引擎对接等;

完整代码22000行左右,公开版约5300行;本README对应的是完整版(可能在某些地方使用上和公开版本代码不一致),尽量参考快速上手指南

如有使用疑惑,欢迎讨论/邮件联系。

特别说明②:依赖最低版本为python3.11;由于本项目是高度计算密集型,鉴于python3.11发布且运算速度大幅提升,实测相比于python 3.8.5计算时间缩短约16%,故后续开发均基于python3.11;


缠论框架使用文档

功能介绍

本框架从使用深度上来讲,分四种不同的级别:

1. 缠论基本元素计算

  • 计算缠论基本元素,包括分形,笔,线段,中枢,买卖点
    • 部分元素支持继承基类,根据自己的逻辑开发,如笔,线段,买卖点
    • 基础元素均提供多种可配置项 及 自定义开发能力
    • 支持父级别计算,如线段中枢,线段的分段,线段买卖点等
  • 支持多级别联立计算
    • 支持区间套计算买卖点
  • 支持配置MACD, 均线,布林线,Demark等计算指标
    • 亦支持配置多个不同的指标参与计算,如换手率,交易量等
  • 支持读取不同数据源数据
    • 对接 futu,akshare,baostock数据
    • 读取本地数据
    • 提供自行开发数据读取解析能力
    • 支持高性能本地离线数据更新 & 存储能力
  • 支持全局绘制/逐步回放 画图&保存
    • 默认基于matplotlib
    • 支持提取画图元素信息,可以对接任意画图引擎,如bokeh等
  • 支持方便部署成 API 服务

2. 策略买卖点开发

  • 支持计算形态学买卖点
  • 支持自定义策略,计算动力学买卖点
  • 支持配置背驰算法

3. 策略对接机器学习框架

  • 支持通过机器学习模型对买卖点进行打分
    • 默认对买卖点提供 500+个特征
    • 提供机器学习开发框架,实现数据接入,模型训练预测,模型读写等接口即可上线
      • 默认提供XGB,LightGBM,MLP深度学习网络三种模型
    • 提供回测,评估框架
  • 提供AutoML超参搜索引擎

4. 线上交易

  • 支持线上线下模型/特征一致性校验
  • 支持对接 Futu 交易引擎
    • 可对接模拟盘 & 实盘
    • 提供开仓,平仓,实时跟踪股价能力
  • 支持接入实时股价数据接口
    • 默认提供 sina,pytdx,futu,akshare接口
  • 支持mysql,sqlite两种后端数据库,并对缠论数据库提供专门 API

目录结构 & 文件说明

.
├── 📁 Bi # 笔
│   ├── 📄 BiConfig.py: 配置类
│   ├── 📄 BiList.py: 笔列表类
│   └── 📄 Bi.py: 笔类
├── 📁 Seg: 线段类
│   ├── 📄 Eigen.py: 特征序列类
│   ├── 📄 EigenFX.py: 特征序列分形类
│   ├── 📄 SegConfig.py: 线段配置类
│   ├── 📄 SegListComm.py: 线段计算框架通用父类
│   ├── 📄 SegListChan.py: 线段计算:根据原文实现
│   ├── 📄 SegListDef.py: 线段计算:根据定义实现
│   ├── 📄 SegListDYH.py: 线段计算:根据都业华1+1突破实现
│   └── 📄 Seg.py: 线段类
├── 📁 ZS: 中枢类
│   ├── 📄 ZSConfig.py: 中枢配置
│   ├── 📄 ZSList.py: 中枢列表类
│   └── 📄 ZS.py: 中枢类
├── 📁 KLine: K线类
│   ├── 📄 KLine_List.py: K线列表类
│   ├── 📄 KLine.py: 合并K线类
│   ├── 📄 KLine_Unit.py: 单根K线类
│   └── 📄 TradeInfo.py: K线指标类(换手率,成交量,成交额等)
├── 📁 BuySellPoint: 形态学买卖点类(即bsp)
│   ├── 📄 BSPointConfig.py: 配置
│   ├── 📄 BSPointList.py: 买卖点列表类
│   └── 📄 BS_Point.py: 买卖点类
├── 📁 Combiner: K线,特征序列合并器
│   ├── 📄 Combine_Item.py: 合并元素通用父类
│   └── 📄 KLine_Combiner.py: K线合并器
├── 📁 Common: 通用函数
│   ├── 📄 cache.py: 缓存装饰器,大幅提高计算性能
│   ├── 📄 CEnum.py: 所有枚举类,K线类型/方向/笔类型/中枢类型等
│   ├── 📄 ChanException.py: 异常类
│   ├── 📄 CTime.py: 缠论时间类(可处理不同级别联立)
│   ├── 📄 func_util.py: 通用函数
│   ├── 📄 send_msg_cmd.py: 消息推送
│   ├── 📄 tools.py: 工具类
│   ├── 📄 CommonThred.py: 线程类
│   └── 📄 TradeUtil.py: 交易通用函数
├── 📁 Config: 配置
│   ├── 📄 config.sh shell脚本读取配置
│   ├── 📄 demo_config.yaml: demo配置
│   ├── 📄 EnvConfig.py: python读取配置类
├── 📁 CustomBuySellPoint: 自定义动力学买卖点类(即cbsp)
│   ├── 📄 Strategy.py: 通用抽象策略父类
│   ├── 📄 CustomStrategy.py: demo策略1
│   ├── 📄 SegBspStrategy.py: demo策略2
│   ├── 📄 ExamStrategy.py: 生成买卖点判断试题的策略
│   ├── 📄 CustomBSP.py: 自定义买卖点
│   └── 📄 Signal.py: 信号类
├── 📁 DataAPI: 数据接口
│   ├── 📄 CommonStockAPI.py: 通用数据接口抽象父类
│   ├── 📄 AkShareAPI.py: akshare数据接口
│   ├── 📄 BaoStockAPI.py: baostock数据接口
│   ├── 📄 ETFStockAPI.py: ETF数据解耦接口
│   ├── 📄 FutuAPI.py: futu数据接口
│   ├── 📄 OfflineDataAPI.py: 离线数据接口
│   ├── 📄 MarketValueFilter.py: 股票市值过滤类
│   └── 📁 SnapshotAPI: 实时股价数据接口
│       ├── 📄 StockSnapshotAPI.py: 统一调用接口
│       ├── 📄 CommSnapshot.py: snapshot通用父类
│       ├── 📄 AkShareSnapshot.py: akshare接口,支持a股,etf,港股,美股
│       ├── 📄 FutuSnapshot.py: 富途接口,支持a股,港股,美股
│       ├── 📄 PytdxSnapshot.py: pytdx,支持A股,ETF
│       └── 📄 SinaSnapshot.py: 新浪接口,支持a股,etf,港股,美股
├── 📁 Math: 计算类
│   ├── 📄 BOLL.py: 布林线计算类
│   ├── 📄 MACD.py: MACD计算类
│   ├── 📄 Demark.py: Demark指标计算类
│   ├── 📄 OutlinerDetection.py: 离群点计算类
│   ├── 📄 TrendModel.py: 趋势类(支持均线,最大值,最小值)
│   └── 📄 TrendLine.py: 趋势线
├── 📁 ModelStrategy: 模型策略
│   ├── 📄 BacktestChanConfig.py: 回测配置
│   ├── 📄 backtest.py: 回测计算框架
│   ├── 📄 FeatureReconciliation.py: 特征离线在线一致性校验
│   ├── 📄 ModelGenerator.py: 训练模型通用父类
│   ├── 📁 models: 提供模型
│   │   ├── 📁 deepModel: 深度学习模型
│   │   │   ├── 📄 MLPModelGenerator.py: 深度学习模型
│   │   │   └── 📄 train_all_model.sh 拉起全流程训练预测评估脚本
│   │   ├── 📁 lightGBM
│   │   │   ├── 📄 LGBMModelGenerator.py: LGBM模型
│   │   │   └── 📄 train_all_model.sh 拉起全流程训练预测评估脚本
│   │   └── 📁 Xgboost
│   │       ├── 📄 train_all_model.sh 拉起全流程训练预测评估脚本
│   │       ├── 📄 XGBTrainModelGenerator.py: XGB模型
│   │       └── 📄 xgb_util.py: XGB便捷调用工具
│   └── 📁 parameterEvaluate: 策略参数评估
│       ├── 📄 eval_strategy.py: 评估策略收益类
│       ├── 📄 multi_cycle_test_data.sh: 多周期策略评估数据生成脚本
│       ├── 📄 multi_cycle_test.py: 多周期策略评估
│       ├── 📄 para_automl.py: Automl计算模型超参
│       ├── 📄 automl_verify.py: 验证Automl结果小脚本
│       ├── 📄 parse_automl_result.py: 解析Automl超参生成交易配置文件
│       └── 📁 AutoML FrameWork: Automl学习框架,本项目不专门提供
├── 📁 ChanModel: 模型
│   ├── 📄 CommModel.py: 通用模型抽象父类
│   ├── 📄 FeatureDesc.py: 特征注册
│   ├── 📄 Features.py: 特征计算
│   └── 📄 XGBModel.py: XGB模型 demo
├── 📁 OfflineData: 离线数据更新
│   ├── 📄 download_all_offline_data.sh 调度下载A股,港股,美股所有数据脚本
│   ├── 📄 ak_update.py: akshare更新港股美股A股离线数据
│   ├── 📄 bao_download.py: baostock下载全量A股数据
│   ├── 📄 bao_update.py: baostock增量更新数据
│   ├── 📄 etf_download.py: 下载A股ETF数据脚本
│   ├── 📄 futu_download.py: 更新futu港股数据
│   ├── 📄 offline_data_util.py: 离线数据更新通用工具类
│   └── 📁 stockInfo: 股票指标数据
│       ├── 📄 CalTradeInfo.py: 计算股票指标数据分布,分位数
│       ├── 📄 query_marketvalue.py: 计算股票市值分位数
│       └── 📄 run_market_value_query.sh 调度脚本
├── 📁 Plot: 画图类
│   ├── 📄 AnimatePlotDriver.py: 动画画图类
│   ├── 📄 PlotDriver.py: matplotlib画图引擎
│   ├── 📄 PlotMeta.py: 图元数据
│   └── 📁 CosApi: COS文件上传类
│       ├── 📄 minio_api.py: minio上传接口
│       ├── 📄 tencent_cos_api.py: 腾讯云cos上传接口
│       └── 📄 cos_config.py: 读取项目配置里面的cos配置参数
├── 📁 Trade: 交易引擎
│   ├── 📄 db_util.py: 数据库操作类
│   ├── 📄 FutuTradeEngine.py: futu交易引擎类
│   ├── 📄 MysqlDB.py: Mysql数据库类
│   ├── 📄 SqliteDB.py: SqliteDB数据库类
│   ├── 📄 OpenQuotaGen.py: 开仓交易手数策略类(用于控制仓位)
│   ├── 📄 TradeEngine.py: 交易引擎核心类
│   └── 📁 Script: 核心交易脚本
│       ├── 📄 update_data_signal.sh: 离线数据更新,信号计算调度脚本
│       ├── 📄 CheckOpenScore.py: 后验检查开仓是否准确
│       ├── 📄 ClosePreErrorOpen.py: 修复错误开仓
│       ├── 📄 MakeOpenTrade.py: 开仓
│       ├── 📄 OpenConfig_demo.yaml: 开仓参数配置
│       ├── 📄 OpenConfig.py: 开仓参数配置类
│       ├── 📄 RealTimeTracker.py: 实时跟踪是否遇到止损,止盈点
│       ├── 📄 RetradeCoverOrder.py: 修复未成功交易平仓单
│       ├── 📄 SignalMonitor.py: 信号计算
│       ├── 📄 StaticsChanConfig.py: 缠论计算配置
│       └── 📄 UpdatePeakPrice.py: 峰值股价更新(用于做动态止损)
├── 📁 Debug: debug工具/策略demo
│   ├── 📄 strategy_demo.py  基于trigger_step的回测实现
│   ├── 📄 strategy_demo2.py  基于trigger_load的回测实现
│   ├── 📄 strategy_demo3.py  基于trigger_load实现小级别触发大级别重算
│   ├── 📄 strategy_demo4.py  基于trigger_load实现多级别喂数据时避免K线时间对齐
│   ├── 📄 strategy_demo5.py  演示框架如何与基础的机器学习框架结合
│   ├── 📄 strategy_demo6.py  演示实盘时如何预测对接demo5产出的模型
│   ├── 📁 cprofile_analysis: 性能分析
│   │   └── 📄 cprofile_analysis.sh 性能分析脚本
│   └── 📁 Notebook
│       └── 📄 xxx.ipynb  各种notebook
├── 📁 App: 其他依赖本项目的应用
│   ├── 📄 ashare_bsp_scanner_gui.py: A股缠论买点扫描器 GUI 应用(热心网友提供)
├── 📄 main.py: demo main函数
├── 📄 Chan.py: 缠论主类
├── 📄 ChanConfig.py: 缠论配置
├── 📄 ExamGenerator.py: 测试题生成API
├── 📄 LICENSE
└── 📄 README.md: 本文件

缠论计算使用方法

特殊名词/变量名解释

  • klu:K Line Unit 的简称,表示单根K线
  • klc:K Line Combine 的简称,表示合并后的K线(不再有 open,close 价格属性)
  • bsp:Buy Sell Point 买卖点的简称,本项目中特指形态学中的买卖点,是根据走势和定义可以计算出来过去各个买卖点的位置,即一定正确的那一些;
  • cbsp:Custom Buy Sell Point 自定义买卖点的简称,由用户自己编写策略(通过实现 CChanConfig 中的 cbsp_strategy 参数)产生的交易点,该策略类在每根新K线出现时判断当下是否是新的买卖点(即仅有到当下为止的K线数据),一般而言,相较于 bsp 会延后,而且不一定正确;

比如下图表述的就是 1,2,3 类 bsp:

而下图则是由某简易策略计算出来的 cbsp,本框架中一般用虚线表示,如果前面有个 ,表示最后回过头来看,这个 cbsp 是找对了;

  • segseg:字段命名为线段的线段,可以理解成把线段当成笔,算出其相应的线段结构;实际上可以当成父级别的线段;
  • segbsp:即 segseg 对应的买卖点(形态学上的);
  • segzs:即 segseg 对应的中枢

使用 demo

from Chan import CChan
from ChanConfig import CChanConfig
from ChanModel.XGBModel import CXGBModel
from Common.CEnum import AUTYPE, KL_TYPE
from Config.EnvConfig import Env
from CustomBuySellPoint.CustomStrategy import CCustomStrategy
from Plot.AnimatePlotDriver import CAnimateDriver
from Plot.PlotDriver import CPlotDriver

config = CChanConfig({})  # 缠论计算配置,见后文

chan = CChan(
    code="HK.00700",
    begin_time="2012-01-01",
    end_time=None,
    data_src=DATA_SRC.FUTU,  # 数据来源,
    lv_list=[KL_TYPE.K_DAY],  # 多级别可以从大到小传入
    config=config,
    autype=AUTYPE.QFQ,
    extra_kl=None,
)

plot_config = {
    "plot_kline": True,
    "plot_kline_combine": True,
    "plot_bi": True,
    "plot_seg": True,
    "plot_eigen": False,
    "plot_zs": True,
    "plot_macd": False,
    "plot_mean": False,
    "plot_channel": False,
    "plot_bsp": True,
    "plot_cbsp": True,
    "plot_extrainfo": False,
}  # 绘图元素开关,详见后文

plot_para = {
    "seg": {
        "plot_trendline": True,  # 绘制趋势线
    },
    "bi": {
        "show_num": True,  # 笔是否显示序号
        "disp_end": True,  # 是否显示首尾价格
    },
    "figure": {
      "width": 24,
    },
    "cbsp": {
        "plot_cover": True,  # 绘制平仓操作
    },
}  # 空格绘图元素详细配置,详见后文

if not config.trigger_step:  # 绘制静态图
    plot_driver = CPlotDriver(
        chan,
        plot_config=plot_config,
        plot_para=plot_para,
    )
else:  # 绘制动画
    CAnimateDriver(
        chan,
        plot_config=plot_config,
        plot_para=plot_para,
    )

需要计算缠论相关数据,仅需 CChan 调用那一行; 如果需要画图: - 单幅图使用 CPlotDriver - 如果需要看回放动画,则使用 CAnimateDriver

CChan 类介绍

核心缠论信息计算类 CChan 接受参数包括: - code:股票代码,具体格式取决于数据源格式 - begin_time:开始时间,默认为 None(至于 None 怎么理解,也取决于数据源格式) - end_time:结束时间,默认为 None(至于 None 怎么理解,也取决于数据源格式) - data_src:数据源,框架提供: - DATA_SRC.FUTU:富途 - DATA_SRC.BAO_STOCK:BaoStock(默认) - DATA_SRC.CCXT:ccxt - DATA_SRC.CSV: csv(具体可以看内部实现) - "custom:文件名:类名":自定义解析器 - 框架默认提供一个 demo 为:"custom: OfflineDataAPI.CStockFileReader" - 自己开发参考下文『自定义开发-数据接入』 - lv_list:K 线级别,必须从大到小,默认为 [KL_TYPE.K_DAY, KL_TYPE.K_60M],可选: - KL_TYPE.K_YEAR(-_-|| 没啥卵用,毕竟全部年线可能就只有一笔。。) - KL_TYPE.K_QUARTER(-_-|| 季度线,同样没啥卵用) - KL_TYPE.K_MON - KL_TYPE.K_WEEK - KL_TYPE.K_DAY - KL_TYPE.K_60M - KL_TYPE.K_30M - KL_TYPE.K_15M - KL_TYPE.K_10M - KL_TYPE.K_5M - KL_TYPE.K_3M - KL_TYPE.K_1M - KL_TYPE.K_30S - KL_TYPE.K_20S - KL_TYPE.K_15S - KL_TYPE.K_10S - KL_TYPE.K_5S - KL_TYPE.K_3S - KL_TYPE.K_1S - autype:复权类型,传递给获取数据接口,默认为 AUTYPE.QFQ,即前复权,可选 - AUTYPE.QFQ - AUTYPE.HFQ - AUTYPE.NONE - config:CChanConfig 类,缠论元素计算参数配置,参见下文 CChanConfig - extra_kl:额外K线,常用于补充 data_src 的数据,比如离线 data_src 只有到昨天为止的数据,今天开仓需要加上今天实时获得的部分K线数据;默认为 None; - 如果是个列表:每个元素必须为描述 klu 的 CKLine_Unit 类;此时如果 lv_list 参数有多个级别,则会报错 - 如果是个字典,key 是 lv_list 参数里面的每个级别,value 是数组,每个元素是 CKLine_Unit

如果需要部署成服务对外提供接口,调用 CChan.toJson() 可返回所有相关信息。

运行后,可通过 CChan[KL_TYPE] 的 bi_list,seg_list,bs_point_lst,cbsp_strategy 等属性获得笔,线段,bsp,cbsp 信息;

如果只有一个级别,可以省去 KL_TYPE,直接使用 CChan[0].bi_list 这种调用方法

CChanConfig 配置

该参数主要用于配置计算逻辑,通过字典初始化 CChanConfig 即可,支持配置参数如下: - 缠论计算相关: - 中枢 - zs_combine:是否进行中枢合并,默认为 True - zs_combine_mode: 中枢合并模式,取值 - zs:两中枢区间有重叠才合并(默认) - peak:两中枢有K线重叠就合并 - one_bi_zs:是否需要计算只有一笔的中枢(分析趋势时会用到),默认为 False - zs_algo: 中枢算法normal/over_seg/auto(段内中枢/跨段中枢/自动,具体参见中枢算法章节),默认为normal - 笔 - bi_algo: 笔算法,默认为 normal - normal: 按缠论笔定义来算 - fx: 顶底分形即成笔 - bi_strict:是否只用严格笔(bi_algo=normal时有效),默认为 Ture中枢算法 - gap_as_kl:缺口是否处理成一根K线,默认为 True - bi_end_is_peak: 笔的尾部是否是整笔中最低/最高, 默认为 True - bi_fx_check:检查笔顶底分形是否成立的方法 - strict(默认):底分型的最低点必须比顶分型3元素最低点的最小值还低,顶分型反之。 - totally: 底分型3元素的最高点必须必顶分型三元素的最低点还低 - loss:底分型的最低点比顶分型中间元素低点还低,顶分型反之。 - half:对于上升笔,底分型的最低点比顶分型前两元素最低点还低,顶分型的最高点比底分型后两元素高点还高。下降笔反之。 - bi_allow_sub_peak:是否允许次高点成笔,默认为True - 线段 - seg_algo:线段计算方法 - chan:利用特征序列来计算(默认) - 1+1:都业华版本 1+1 终结算法 - break:线段破坏定义来计算线段 -

Core symbols most depended-on inside this repo

get
called by 94
ChanConfig.py
_low
called by 34
Seg/Seg.py
_high
called by 34
Seg/Seg.py
is_down
called by 23
Bi/Bi.py
_high
called by 22
Bi/Bi.py
_low
called by 22
Bi/Bi.py
is_up
called by 21
Bi/Bi.py
is_down
called by 20
Seg/Seg.py

Shape

Method 475
Class 85
Function 52

Languages

Python100%

Modules by API surface

Bi/Bi.py46 symbols
Plot/PlotDriver.py45 symbols
ZS/ZS.py36 symbols
App/ashare_bsp_scanner_gui.py33 symbols
Seg/Seg.py29 symbols
BuySellPoint/BSPointList.py29 symbols
Combiner/KLine_Combiner.py26 symbols
Chan.py25 symbols
Math/Demark.py23 symbols
Plot/PlotMeta.py22 symbols
Bi/BiList.py22 symbols
KLine/KLine_Unit.py18 symbols

Dependencies from manifests, versioned

baostock0.8.8 · 1×
ipython8.5.0 · 1×
matplotlib3.5.3 · 1×
numpy1.23.3 · 1×
pandas1.4.2 · 1×
requests2.22.0 · 1×

For agents

$ claude mcp add chan.py \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact