{"repo":"Vespa314/chan.py","free":true,"listed":false,"github":"https://github.com/Vespa314/chan.py","clone":"git clone https://github.com/Vespa314/chan.py.git","description":"开放式的缠论python实现框架，支持形态学/动力学买卖点分析计算，多级别K线联立，区间套策略，可视化绘图，多种数据接入，策略开发，交易系统对接；","language":"Python","stars":2011,"topics":["automl","chanlun","machinelearning","plot","python","quant","stock","stragety"],"license":"MIT","category":"quant_trading_framework","readme_excerpt":"<p align=\"center\">\n<img src=\"./Image/chan.py_image_1.svg\" width=\"300\"/>\n</p>\n\n```\n             ██████╗██╗  ██╗ █████╗ ███╗   ██╗   ██████╗ ██╗   ██╗\n            ██╔════╝██║  ██║██╔══██╗████╗  ██║   ██╔══██╗╚██╗ ██╔╝\n            ██║     ███████║███████║██╔██╗ ██║   ██████╔╝ ╚████╔╝\n            ██║     ██╔══██║██╔══██║██║╚██╗██║   ██╔═══╝   ╚██╔╝\n            ╚██████╗██║  ██║██║  ██║██║ ╚████║██╗██║        ██║\n             ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝╚═╝        ╚═╝\n```\n\n<p><a href=\"https://github.com/Vespa314/chan.py/stargazers\"><img alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/Vespa314/chan.py\" /></a></p>\n\n- 讨论组：<a href=\"https://t.me/zen_python\">Telegram</a>\n- [快速上手指南](./quick_guide.md)\n\n\n**特别说明①**：当前公开部分代码暂时只包含基本的静态计算能力，暂未包含策略类，特征，模型，automl框架，交易引擎对接等；\n\n完整代码22000行左右，公开版约5300行；本README对应的是完整版(可能在某些地方使用上和公开版本代码不一致)，尽量参考[快速上手指南](./quick_guide.md)；\n\n如有使用疑惑，欢迎讨论/邮件联系。\n\n\n**特别说明②**：依赖最低版本为python3.11；由于本项目是高度计算密集型，鉴于python3.11发布且运算速度大幅提升，实测相比于python 3.8.5计算时间缩短约16%，故后续开发均基于python3.11；\n\n\n---\n# 缠论框架使用文档\n- [缠论框架使用文档](#缠论框架使用文档)\n  - [功能介绍](#功能介绍)\n    - [1. 缠论基本元素计算](#1-缠论基本元素计算)\n    - [2. 策略买卖点开发](#2-策略买卖点开发)\n    - [3. 策略对接机器学习框架](#3-策略对接机器学习框架)\n    - [4. 线上交易](#4-线上交易)\n  - [目录结构 \\& 文件说明](#目录结构--文件说明)\n  - [安装方法](#安装方法)\n    - [配置文件介绍](#配置文件介绍)\n    - [自行开发必要工具类](#自行开发必要工具类)\n  - [缠论计算使用方法](#缠论计算使用方法)\n    - [特殊名词/变量名解释](#特殊名词变量名解释)\n    - [使用 demo](#使用-demo)\n    - [CChan 类介绍](#cchan-类介绍)\n    - [CChanConfig 配置](#cchanconfig-配置)\n      - [精确设置配置](#精确设置配置)\n      - [CChanConfig 配置 Demo](#cchanconfig-配置-demo)\n    - [画图配置](#画图配置)\n      - [plot\\_config](#plot_config)\n      - [plot\\_para](#plot_para)\n    - [中枢算法](#中枢算法)\n      - [段内中枢](#段内中枢)\n      - [跨段中枢](#跨段中枢)\n  - [模型](#模型)\n  - [特征](#特征)\n    - [默认特征情况](#默认特征情况)\n  - [交易系统](#交易系统)\n    - [交易后端数据库](#交易后端数据库)\n    - [信号计算](#信号计算)\n    - [交易引擎](#交易引擎)\n    - [典型流程](#典型流程)\n  - [自定义开发](#自定义开发)\n    - [数据接入](#数据接入)\n    - [实时数据接入](#实时数据接入)\n    - [笔模型](#笔模型)\n    - [线段模型](#线段模型)\n    - [bsp 买卖点](#bsp-买卖点)\n    - [cbsp 买卖点策略](#cbsp-买卖点策略)\n      - [区间套策略示例](#区间套策略示例)\n    - [模型类](#模型类)\n      - [模型开发](#模型开发)\n        - [CModelGenerator](#cmodelgenerator)\n        - [CDataSet](#cdataset)\n        - [外部接口](#外部接口)\n      - [模型接入](#模型接入)\n      - [Automl](#automl)\n  - [其他](#其他)\n    - [COS](#cos)\n    - [Notion](#notion)\n    - [试题功能](#试题功能)\n  - [其他不值一提的优化](#其他不值一提的优化)\n  - [碎碎念](#碎碎念)\n    - [12月15日补充](#12月15日补充)\n      - [实验仓位](#实验仓位)\n      - [港股](#港股)\n      - [美股](#美股)\n  - [Star history](#star-history)\n  - [咖啡？NO!](#咖啡no)\n\n## 功能介绍\n本框架从使用深度上来讲，分四种不同的级别：\n\n### 1. 缠论基本元素计算\n- 计算缠论基本元素，包括分形，笔，线段，中枢，买卖点\n    - 部分元素支持继承基类，根据自己的逻辑开发，如笔，线段，买卖点\n    - 基础元素均提供多种可配置项 及 自定义开发能力\n    - 支持父级别计算，如线段中枢，线段的分段，线段买卖点等\n- 支持多级别联立计算\n    - 支持区间套计算买卖点\n- 支持配置MACD， 均线，布林线，Demark等计算指标\n    - 亦支持配置多个不同的指标参与计算，如换手率，交易量等\n- 支持读取不同数据源数据\n    - 对接 futu，akshare，baostock数据\n    - 读取本地数据\n    - 提供自行开发数据读取解析能力\n    - 支持高性能本地离线数据更新 & 存储能力\n- 支持全局绘制/逐步回放 画图&保存\n    - 默认基于matplotlib\n    - 支持提取画图元素信息，可以对接任意画图引擎，如bokeh等\n- 支持方便部署成 API 服务\n\n### 2. 策略买卖点开发\n- 支持计算形态学买卖点\n- 支持自定义策略，计算动力学买卖点\n- 支持配置背驰算法\n\n### 3. 策略对接机器学习框架\n- 支持通过机器学习模型对买卖点进行打分\n    - 默认对买卖点提供 500+个特征\n    - 提供机器学习开发框架，实现数据接入，模型训练预测，模型读写等接口即可上线\n        - 默认提供XGB，LightGBM，MLP深度学习网络三种模型\n    - 提供回测，评估框架\n- 提供AutoML超参搜索引擎\n\n### 4. 线上交易\n- 支持线上线下模型/特征一致性校验\n- 支持对接 Futu 交易引擎\n    - 可对接模拟盘 & 实盘\n    - 提供开仓，平仓，实时跟踪股价能力\n- 支持接入实时股价数据接口\n    - 默认提供 sina，pytdx，futu，akshare接口\n- 支持mysql，sqlite两种后端数据库，并对缠论数据库提供专门 API\n\n## 目录结构 & 文件说明\n```\n.\n├── 📁 Bi # 笔\n│   ├── 📄 BiConfig.py: 配置类\n│   ├── 📄 BiList.py: 笔列表类\n│   └── 📄 Bi.py: 笔类\n├── 📁 Seg: 线段类\n│   ├── 📄 Eigen.py: 特征序列类\n│   ├── 📄 EigenFX.py: 特征序列分形类\n│   ├── 📄 SegConfig.py: 线段配置类\n│   ├── 📄 SegListComm.py: 线段计算框架通用父类\n│   ├── 📄 SegListChan.py: 线段计算：根据原文实现\n│   ├── 📄 SegListDef.py: 线段计算：根据定义实现\n│   ├── 📄 SegListDYH.py: 线段计算：根据都业华1+1突破实现\n│   └── 📄 Seg.py: 线段类\n├── 📁 ZS: 中枢类\n│   ├── 📄 ZSConfig.py: 中枢配置\n│   ├── 📄 ZSList.py: 中枢列表类\n│   └── 📄 ZS.py: 中枢类\n├── 📁 KLine: K线类\n│   ├── 📄 KLine_List.py: K线列表类\n│   ├── 📄 KLine.py: 合并K线类\n│   ├── 📄 KLine_Unit.py: 单根K线类\n│   └── 📄 TradeInfo.py: K线指标类（换手率，成交量，成交额等）\n├── 📁 BuySellPoint: 形态学买卖点类（即bsp）\n│   ├── 📄 BSPointConfig.py: 配置\n│   ├── 📄 BSPointList.py: 买卖点列表类\n│   └── 📄 BS_Point.py: 买卖点类\n├── 📁 Combiner: K线，特征序列合并器\n│   ├── 📄 Combine_Item.py: 合并元素通用父类\n│   └── 📄 KLine_Combiner.py: K线合并器\n├── 📁 Common: 通用函数\n│   ├── 📄 cache.py: 缓存装饰器，大幅提高计算性能\n│   ├── 📄 CEnum.py: 所有枚举类，K线类型/方向/笔类型/中枢类型等\n│   ├── 📄 ChanException.py: 异常类\n│   ├── 📄 CTime.py: 缠论时间类（可处理不同级别联立）\n│   ├── 📄 func_util.py: 通用函数\n│   ├── 📄 send_msg_cmd.py: 消息推送\n│   ├── 📄 tools.py: 工具类\n│   ├── 📄 CommonThred.py: 线程类\n│   └── 📄 TradeUtil.py: 交易通用函数\n├── 📁 Config: 配置\n│   ├── 📄 config.sh shell脚本读取配置\n│   ├── 📄 demo_config.yaml: demo配置\n│   ├── 📄 EnvConfig.py: python读取配置类\n├── 📁 CustomBuySellPoint: 自定义动力学买卖点类（即cbsp）\n│   ├── 📄 Strategy.py: 通用抽象策略父类\n│   ├── 📄 CustomStrategy.py: demo策略1\n│   ├── 📄 SegBspStrategy.py: demo策略2\n│   ├── 📄 ExamStrategy.py: 生成买卖点判断试题的策略\n│   ├── 📄 CustomBSP.py: 自定义买卖点\n│   └── 📄 Signal.py: 信号类\n├── 📁 DataAPI: 数据接口\n│   ├── 📄 CommonStockAPI.py: 通用数据接口抽象父类\n│   ├── 📄 AkShareAPI.py: akshare数据接口\n│   ├── 📄 BaoStockAPI.py: baostock数据接口\n│   ├── 📄 ETFStockAPI.py: ETF数据解耦接口\n│   ├── 📄 FutuAPI.py: futu数据接口\n│   ├── 📄 OfflineDataAPI.py: 离线数据接口\n│   ├── 📄 MarketValueFilter.py: 股票市值过滤类\n│   └── 📁 SnapshotAPI: 实时股价数据接口\n│       ├── 📄 StockSnapshotAPI.py: 统一调用接口\n│       ├── 📄 CommSnapshot.py: snapshot通用父类\n│       ├── 📄 AkShareSnapshot.py: akshare接口，支持a股，etf，港股，美股\n│       ├── 📄 FutuSnapshot.py: 富途接口，支持a股，港股，美股\n│       ├── 📄 PytdxSnapshot.py: pytdx，支持A股，ETF\n│       └── 📄 SinaSnapshot.py: 新浪接口，支持a股，etf，港股，美股\n├── 📁 Math: 计算类\n│   ├── 📄 BOLL.py: 布林线计算类\n│   ├── 📄 MACD.py: MACD计算类\n│   ├── 📄 Demark.py: Demark指标计算类\n│   ├── 📄 OutlinerDetection.py: 离群点计算类\n│   ├── 📄 TrendModel.py: 趋势类（支持均线，最大值，最小值）\n│   └── 📄 TrendLine.py: 趋势线\n├── 📁 ModelStrategy: 模型策略\n│   ├── 📄 BacktestChanConfig.py: 回测配置\n│   ├── 📄 backtest.py: 回测计算框架\n│   ├── 📄 FeatureReconciliation.py: 特征离线在线一致性校验\n│   ├── 📄 ModelGenerator.py: 训练模型通用父类\n│   ├── 📁 models: 提供模型\n│   │   ├── 📁 deepModel: 深度学习模型\n│   │   │   ├── 📄 MLPModelGenerator.py: 深度学习模型\n│   │   │   └── 📄 train_all_model.sh 拉起全流程训练预测评估脚本\n│   │   ├── 📁 lightGBM\n│   │   │   ├── 📄 LGBMModelGenerator.py: LGBM模型\n│   │   │   └── 📄 train_all_model.sh 拉起全流程训练预测评估脚本\n│   │   └── 📁 Xgboost\n│   │       ├── 📄 train_all_model.sh 拉起全流程训练预测评估脚本\n│   │       ├── 📄 XGBTrainModelGenerator.py: XGB模型\n│   │       └── 📄 xgb_util.py: XGB便捷调用工具\n│   └── 📁 parameterEvaluate: 策略参数评估\n│       ├── 📄 eval_strategy.py: 评估策略收益类\n│       ├── 📄 multi_cycle_test_data.sh: 多周期策略评估数据生成脚本\n│       ├── 📄 multi_cycle_test.py: 多周期策略评估\n│       ├── 📄 para_automl.py: Automl计算模型超参\n│       ├── 📄 automl_verify.py: 验证Automl结果小脚本\n│       ├── 📄 parse_automl_result.py: 解析Automl超参生成交易配置文件\n│       └── 📁 AutoML FrameWork: Automl学习框架，本项目不专门提供\n├── 📁 ChanModel: 模型\n│   ├── 📄 CommModel.py: 通用模型抽象父类\n│   ├── 📄 FeatureDesc.py: 特征注册\n│   ├── 📄 Features.py: 特征计算\n│   └── 📄 XGBModel.py: XGB模型 demo\n├── 📁 OfflineData: 离线数据更新\n│   ├── 📄 download_all_offline_data.sh 调度下载A股，港股，美股所有数据脚本\n│   ├── 📄 ak_update.py: akshare更新港股美股A股离线数据\n│   ├── 📄 bao_download.py: baostock下载全量A股数据\n│   ├── 📄 bao_update.py: baostock增量更新数据\n│   ├── 📄 etf_download.py: 下载A股ETF数据脚本\n│   ├── 📄 futu_download.py: 更新futu港股数据\n│   ├── 📄 offline_data_util.py: 离线数据更新通用工具类\n│   └── 📁 stockInfo: 股票指标数据\n│       ├── 📄 CalTradeInfo.py: 计算股票指标数据分布，分位数\n│       ├── 📄 query_marketvalue.py: 计算股票市值分位数\n│       └── 📄 run_market_value_query.sh 调度脚本\n├── 📁 Plot: 画图类\n│   ├── 📄 AnimatePlotDriver.py: 动画画图类\n│   ├── 📄 PlotDriver.py: matplotlib画图引擎\n│   ├── 📄 PlotMeta.py: 图元数据\n│   └── 📁 CosApi: COS文件上传类\n│       ├── 📄 minio_api.py: minio上传接口\n│       ├── 📄 tencent_cos_api.py: 腾讯云cos上传接口\n│       └── 📄 cos_config.py: 读取项目配置里面的cos配置参数\n├── 📁 Trade: 交易引擎\n│   ├── 📄 db_util.py: 数据库操作类\n│   ├── 📄 FutuTradeEngine.py: futu交易引擎类\n│   ├── 📄 MysqlDB.py: Mysql数据库类\n│   ├── 📄 SqliteDB.py: SqliteDB数据库类\n│   ├── 📄 OpenQuotaGen.py: 开仓交易手数策略类（用于控制仓位）\n│   ├── 📄 TradeEngine.py: 交易引擎核心类\n│   └── 📁 Script: 核心交易脚本\n│       ├── 📄 update_data_signal.sh: 离线数据更新，信号计算调度脚本\n│       ├── 📄 CheckOpenScore.py: 后验检查开仓是否准确\n│       ├── 📄 ClosePreErrorOpen.py: 修复错误开仓\n│       ├── 📄 MakeOpenTrade.py: 开仓\n│       ├── 📄 OpenConfig_demo.yaml: 开仓参数配置\n│       ├── 📄 OpenConfig.py: 开仓参数配置类\n│       ├── 📄 RealTimeTracker.py: 实时跟踪是否遇到止损，止盈点\n│       ├── 📄 RetradeCoverOrder.py: 修复未成功交易平仓单\n│       ├── 📄 SignalMonitor.py: 信号计算\n│       ├── 📄 StaticsChanConfig.py: 缠论计算配置\n│       └── 📄 UpdatePeakPrice.py: 峰值股价更新（用于做动态止损）\n├── 📁 Debug： debug工具/策略demo\n│   ├── 📄 strategy_demo.py  基于trigger_step的回测实现\n│   ├── 📄 strategy_demo2.py  基于trigger_load的回测实现\n│   ├── 📄 strategy_demo3.py  基于trigger_load实现小级别触发大级别重算\n│   ├── 📄 strategy_demo4.py  基于trigger_load实现多级别喂数据时避免K线时间对齐\n│   ├── 📄 strategy_demo5.py  演示框架如何与基础的机器学习框架结合\n│   ├── 📄 strategy_demo6.py  演示实盘时如何预测对接demo5产出的模型\n│   ├── 📁 cprofile_analysis: 性能分析\n│   │   └── 📄 cprofile_analysis.sh 性能分析脚本\n│   └── 📁 Notebook\n│       └── 📄 xxx.ipynb  各种notebook\n├── 📁 App: 其他依赖本项目的应用\n│   ├── 📄 ashare_bsp_scanner_gui.py: A股缠论买点扫描器 GUI 应用（热心网友提供）\n├── 📄 main.py: demo main函数\n├── 📄 Chan.py: 缠论主类\n├── 📄 ChanConfig.py: 缠论配置\n├── 📄 ExamGenerator.py: 测试题生成API\n├── 📄 LICENSE\n└── 📄 README.md: 本文件\n```\n\n## 缠论计算使用方法\n### 特殊名词/变量名解释\n- klu：K Line Unit 的简称，表示单根K线\n- klc：K Line Combine 的简称，表示合并后的K线（不再有 open，close 价格属性）\n- bsp：Buy Sell Point 买卖点的简称，本项目中特指形态学中的买卖点，是根据走势和定义可以计算出来过去各个买卖点的位置，即一定正确的那一些；\n- cbsp：Custom Buy Sell Point 自定义买卖点的简称，由用户自己编写策略（通过实现 CChanConfig 中的 cbsp_strategy 参数）产生的交易点，该策略类在每根新K线出现时判断当下是否是新的买卖点（即仅有到当下为止的K线数据），一般而言，相较于 bsp 会延后，而且不一定正确；\n\n比如下图表述的就是 1，2，3 类 bsp：\n\n<img src=\"./Image/chan.py_image_2.png\" />\n而下图则是由某简易策略计算出来的 cbsp，本框架中一般用虚线表示，如果前面有个 `√`，表示最后回过头来看，这个 cbsp 是找对了；\n\n<img src=\"./Image/chan.py_image_3.png\" />\n\n- segseg：字段命名为线段的线段，可以理解成把线段当成笔，算出其相应的线段结构；实际上可以当成父级别的线段；\n- segbsp：即 segseg 对应的买卖点（形态学上的）；\n- segzs：即 segseg 对应的中枢\n\n<img src=\"./Image/chan.py_image_4.png\" />\n\n### 使用 demo\n```python\nfrom Chan import CChan\nfrom ChanConfig import CChanConfig\nfrom ChanModel.XGBModel import CXGBModel\nfrom Common.CEnum import AUTYPE, KL_TYPE\nfrom Config.EnvConfig import Env\nfrom CustomBuySellPoint.CustomStrategy import CC","default_branch":"main","files":109,"tree":[".gitignore","App/ashare_bsp_scanner_gui.py","Bi/Bi.py","Bi/BiConfig.py","Bi/BiList.py","BuySellPoint/BSPointConfig.py","BuySellPoint/BSPointList.py","BuySellPoint/BS_Point.py","BuySellPoint/__init__.py","Chan.py","ChanConfig.py","ChanModel/Features.py","Combiner/Combine_Item.py","Combiner/KLine_Combiner.py","Combiner/__init__.py","Common/CEnum.py","Common/CTime.py","Common/ChanException.py","Common/__init__.py","Common/cache.py","Common/func_util.py","DataAPI/AkshareAPI.py","DataAPI/BaoStockAPI.py","DataAPI/CommonStockAPI.py","DataAPI/__init__.py","DataAPI/ccxt.py","DataAPI/csvAPI.py","Debug/strategy_demo.py","Debug/strategy_demo2.py","Debug/strategy_demo3.py","Debug/strategy_demo4.py","Debug/strategy_demo5.py","Debug/strategy_demo6.py","Image/answer_pic.png","Image/chan.py_image_1.svg","Image/chan.py_image_10.png","Image/chan.py_image_11.png","Image/chan.py_image_12.png","Image/chan.py_image_13.png","Image/chan.py_image_14.png","Image/chan.py_image_15.png","Image/chan.py_image_16.png","Image/chan.py_image_17.png","Image/chan.py_image_18.png","Image/chan.py_image_2.png","Image/chan.py_image_3.png","Image/chan.py_image_4.png","Image/chan.py_image_5.png","Image/chan.py_image_6.gif","Image/chan.py_image_7.png","Image/chan.py_image_8.png","Image/chan.py_image_9.png","Image/chan_coding_time.png","Image/chan_commit_cnt.png","Image/chan_gotify_info.png","Image/chan_issue_cnt.png","Image/chan_qujiantao.png","Image/chan_trendline.png","Image/coffee.jpeg","Image/demark.png","Image/feature_cnt.png","Image/frame.png","Image/futu_sim_snapshot.png","Image/hk_sim_result.jpeg","Image/marker.png","Image/notion_table.png","Image/open_send_msg.png","Image/plot_cbsp.png","Image/question_pic.png","Image/repository.png","Image/summary_b_us_test.png","Image/us_sim_result.jpeg","Image/zs_algo.png","KLine/KLine.py","KLine/KLine_List.py","KLine/KLine_Unit.py","KLine/TradeInfo.py","KLine/__init__.py","LICENSE","Math/BOLL.py","Math/Demark.py","Math/KDJ.py","Math/MACD.py","Math/RSI.py","Math/TrendLine.py","Math/TrendModel.py","Math/__init__.py","Plot/AnimatePlotDriver.py","Plot/PlotDriver.py","Plot/PlotMeta.py","Plot/__init__.py","README.md","Script/requirements.txt","Seg/Eigen.py","Seg/EigenFX.py","Seg/Seg.py","Seg/SegConfig.py","Seg/SegListChan.py","Seg/SegListComm.py","Seg/SegListDYH.py","Seg/SegListDef.py","Seg/__init__.py","ZS/ZS.py","ZS/ZSConfig.py","ZS/ZSList.py","ZS/__init__.py","__init__.py","main.py","quick_guide.md"],"storefront":"/r/Vespa314","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Vespa314/chan.py/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}