学习量化系统开发
量化系统分为:
- 回测模块 包括 择时系统 、选股系统
- 实盘模块
择时系统:
- 买入因子
- 卖出因子
- 滑点买入、卖出价格确定及策略实现
- 多只股票使用相同的因子进行择时
- 仓位管理策略
- 多只股票使用不同因子进行择时
- 提升运行效率
系统选股:
- 选股因子的实现
- 多个选股因子并行执行
- 提升效率
于是想学习github上的开源项目:
abupy量化交易系统学习,想了解代码的功能结构。
作者在开发时,将文件的功能都标注明确,该文只是将其内容提取。
这个习惯比较好,有利于其他人快速了解一个项目,值得学习。
abupy文件结构功能
========AlphaBu: =======
—ABuAlpha.py :
—ABuPickBase.py : 择时与选股抽象基类
—ABuPickStockExecute.py : 包装选股worker进行,完善前后工作
—ABuPickStockMaster.py : 选股并行多任务调度模块
—ABuPickStockWorker.py : 选股具体工作者,整合金融时间序列,选股因子,资金类进行
选股操作,在择时金融时间序列之前一段时间上迭代初始交易对象
进行选股因子的拟合操作
—ABuPickTimeExecute.py : 多支交易对象进行择时操作封装模块,内部通过AbuPickTimeWorker进行
择时,包装完善前后工作,包括多进程下的进度显示,错误处理捕获,结果
处理等事务
—ABuPickTimeMaster.py : 择时并行多任务调度模块
—ABuPickTimeWorker.py : 择时具体工作者,整合金融时间序列,买入因子,卖出因子,资金类进行
择时操作,以时间驱动择时事件的发生
========BetaBu: =======
—ABuAtrPosition.py : 示例仓位管理:atr仓位管理模块
—ABuBeta.py :
—ABuKellyPosition.py : 示例仓位管理:kelly仓位管理模块
—ABuPositionBase.py : 风险控制仓位管理基础
—ABuPtPosition.py : 示例仓位管理:示例价格位置仓位模块
========CheckBu: =======
—ABuChecker.py : 检查类,检查函数对象、函数参数、函数返回值
—ABuChecks.py : 检查范围的函数
—ABuFuncUtil.py : 函数对象的工具类
—ABuProcessor.py : 预处理函数参数或返回值
========CoreBu: =======
—ABu.py : 封装执行择时,选股回测。
推荐在使用abu.run_loop_back()函数进行全市场回测前使用abu.run_kl_update()函数首先将数据进行更新,
在run_kl_update()中它会首选强制使用网络数据进行更新,在更新完毕后,更改数据获取方式为本地缓存,
使用abu.run_kl_update()的好处是将数据更新与策略回测分离,在运行效率及问题排查上都会带来正面的提升
—ABuBase.py : 类基础通用模块
—ABuDeprecated.py : Deprecated警告模块
—ABuEnv.py : 全局环境配置模块
—ABuEnvProcess.py : 多任务子进程拷贝跟随主进程设置模块
—ABuFixes.py : 对各个依赖库不同版本,不同系统的规范进行统一以及问题修正模块
—ABuParallel.py : 并行封装模块,主要针对不同平台统一接口规范:
windows 上使用joblib进行长时间的多任务,如超过10小时以上时,在任何最后有系统pop任务
的错误,所以windows上使用ProcessPoolExecutor进行多任务,套上Parallel和delayed保持接口的
通用性及规范统一
—ABuPdHelper.py : 封装pandas中版本兼容问题,保持接口规范情况下,避免警告
—ABuStore.py : 针对交易回测结果存储,读取模块
========CrawlBu: =======
—ABuXqApi.py :
—ABuXqConsts.py : s:static
—ABuXqCrawl.py : :return: dict
一级菜单:类别,如。美股,港股,沪深,基金,债券等
二级菜单:如,行业分类,美股一览等
三级菜单:可能会有(,比如行业就需细分)
—ABuXqCrawlImp.py : 使用BeautifulSoup解析html
—ABuXqFile.py : 临时存取 stock info
========DLBu: =======
—ABuDL.py :
—ABuDLImgStd.py : 深度学习工具模块,为caffe等工具库标准化图片格式
—ABuDLTVSplit.py : 深度学习工具模块,为caffe工具库做数据集准备,
切割训练集
========ExtBu: ======= 外部依赖工具
========FactorBuyBu: =======
—ABuBuyFactorWrap.py : 买入因子类装饰器模块
—ABuFactorBuyBase.py : 买入择时策略因子基础模块
—ABuFactorBuyBreak.py : 买入择时示例因子:突破买入择时因子
—ABuFactorBuyDemo.py : 示例买入择时因子
—ABuFactorBuyDM.py : 买入择时示例因子:动态自适应双均线策略
—ABuFactorBuyTrend.py : 买入择时示例因子:长线趋势跟踪与短线均值回复的配合
—ABuFactorBuyWD.py : 买入择时示例因子:日胜率均值买入择时因子
========FactorSellBu: =======
—ABuFactorAtrNStop.py : 卖出择时示例因子:n倍atr(止盈止损)择时卖出策略
—ABuFactorCloseAtrNStop.py : 卖出择时示例因子: 较小利润值 < 买入后最大收益价格 - 今日价格 < 较大利润值 -> 止盈卖出
只做为单边止盈因子使用,作为利润保护因子使用
—ABuFactorPreAtrNStop.py : 卖出择时示例因子:单日最大跌幅n倍atr止损
做为单边止损因子使用,作为风险控制保护因子
—ABuFactorSellBase.py : 卖出择时策略因子基础模块
—ABuFactorSellBreak.py : 卖出择时示例因子:突破卖出择时因子
—ABuFactorSellDM.py : 卖出择时示例因子,双均线策略
—ABuFactorSellNDay.py : 卖出择时示例因子:n日卖出策略,不管什么结果,买入后只持有N天
—ABuFS.py :
========IndicatorBu: =======
—ABuND.py :
—ABuNDAtr.py : ATR
ATR又称 Average true range平均真实波动范围,简称ATR指标,是由J.Welles Wilder 发明的,ATR指标主要是用来衡量市场波动的强烈度,
即为了显示市场变化率的指标。
—ABuNDMa.py : 移动平均线,Moving Average,简称MA,原本的意思是移动平均,由于我们将其制作成线形,所以一般称之为移动平均线,简称均线。
—ABuNDMacd.py : MACD
—ABuNDRsi.py : 相对强弱指数(RSI)是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市场买沽盘的意向和实力,
从而作出未来市场的走势
========MarketBu: =======
—ABuDataBase.py : 数据源基础模块
—ABuDataCache.py : 对数据采集进行存储,读取,以及数据更新merge策略等实现模块
—ABuDataCheck.py : 本地缓存监测模块
—ABuDataFeed.py : 内置数据源示例实现模块:
所有数据接口仅供学习使用,以及最基本使用测试,如需进一步使用,请购买数据
—ABuDataParser.py : 数据源解析模块以及示例内置数据源的解析类实现
—ABuDataSource.py : 数据源模块
—ABuHkUnit.py : 港股每一手交易数量模块
—ABuIndustries.py : 行业分类模块,仅支持美股,a股,港股
—ABuMarket.py : 市场相关切割,选股,等操作模块
—ABuMarketDrawing.py : 市场,数据可视化绘制模块
—ABuNetWork.py : 网络统一接口模块
—ABuSymbol.py : symbol模块
—ABuSymbolFutures.py : 期货symbol数据模块
—ABuSymbolPd.py : 数据对外接口模块,其它模块需要数据都只应该使用ABuSymbolPd, 不应涉及其它内部模块的使用
—ABuSymbolStock.py : 股票类型的symbol模块,a股,美股,港股
========MetricsBu: =======
—ABuCrossVal.py : 策略验证模块
—ABuGridHelper.py : 组合参数辅助模块
—ABuGridSearch.py : 借鉴sklearn GridSearch,针对买入因子,卖出因子,选股因子最合进行最优寻找分析
—ABuMetrics.py :
—ABuMetricsBase.py : 度量模块基础
—ABuMetricsFutures.py : 期货度量模块
—ABuMetricsScore.py : 回测结果评分模块
—ABuMetricsTC.py : 比特币度量模块
========MLBu: =======
—ABuML.py : 中间层,从上层拿到x,y,df
拥有create estimator
—ABuMLApi.py :
—ABuMLBinsCs.py : 直观可视化制作qcut的bins点
—ABuMLCreater.py : 封装常用学习器的初始化流程的模块
—ABuMLExecute.py : 封装常用的分析方式及流程模块
—ABuMLGrid.py : 封装grid search相关操作模块
—ABuMLPd.py : 封装AbuML为业务逻辑层进行规范模块
========PickStockBu: =======
—ABuPickRegressAngMinMax.py : 选股示例因子:价格拟合角度选股因子
—ABuPickSimilarNTop.py : 选股示例因子:相似度选股因子,主要示例fit_first_choice
—ABuPickStock.py :
—ABuPickStockBase.py : 选股因子抽象基类
—ABuPickStockDemo.py : 选股示例因子:价格选股因子
—ABuPickStockPriceMinMax.py : 选股示例因子:价格选股因子
========RomDataBu: ======= 数据文件
========SimilarBu: =======
—ABuCorrcoef.py : 相关系数具体计算功能实现模块
—ABuSimilar.py : 相关系数相似应用模块
—ABuSimilarCache.py :
—ABuSimilarDrawing.py : 相关系数,相似度可视化模块
========SlippageBu: =======
—ABuSlippage.py :
—ABuSlippageBuyBase.py : 日内滑点买入价格决策基础模块:暂时迁移简单实现方式,符合回测需求,如迁移实盘模块
需添加日内择时策略,通过日内分钟k线,实现日内分钟k线择时,更微观的
实现日内择时滑点功能,不考虑大资金的冲击成本及系统外的大幅滑点
—ABuSlippageBuyMean.py : 日内滑点买入示例实现:均价买入最简单的回测买入方式,优点简单,且回测高效,在回测交易数量足够多的前提下也能接近实盘
—ABuSlippageSellBase.py : 日内滑点卖出价格决策基础模块:暂时迁移简单实现方式,符合回测需求,如迁移实盘模块
需添加日内择时策略,通过日内分钟k线,实现日内分钟k线择时,更微观的
实现日内择时滑点功能,不考虑大资金的冲击成本及系统外的大幅滑点
—ABuSlippageSellMean.py : 日内滑点卖出示例实现:均价卖出
最简单的回测卖出方式,优点简单,且回测高效,在回测交易
数量足够多的前提下也能接近实盘
========TLineBu: =======
—ABuTL.py :
—ABuTLAtr.py : 计算线atr模块
—ABuTLExecute.py : 技术线内部执行模块
—ABuTLGolden.py : 黄金分割及比例分割示例模块
—ABuTLine.py : 技术线对象,对外执行,输出模块
—ABuTLJump.py : 跳空缺口模块
—ABuTLSimilar.py : 相关系数上层技术线应用模块
—ABuTLVwap.py : VWAP: Volume Weighted Average Price 成交量加权平均价
非标准传统意义vwap计算,即非使用高频的分钟k线和量进行计算,只是套用概念计算
日线级别的vwap
—ABuTLWave.py : 量化波动程度模块
========TradeBu: =======
—ABuBenchmark.py : 基准模块,基准的作用在于交易时间范围确定,交易时间序列对齐,
抛弃异常时间序列,交易市场范围限制,以及对比与策略的度量结果等作用
—ABuCapital.py : 资金模块,不区分美元,人民币等类型,做美股交易默认当作美元,a股默认当作人民币
—ABuCommission.py : 手续费模块
—ABuKLManager.py : 金融时间序列管理模块
—ABuMLFeature.py : 内置特征定义,以及用户特征扩展,定义模块
—ABuOrder.py : 交易订单模块
—ABuTradeDrawer.py : 交易可视化模块
—ABuTradeExecute.py : 交易执行模块
—ABuTradeProxy.py : 交易执行代理模块
========UmpBu: =======
—ABuUmp.py :
—ABuUmpBase.py : ump基础模块
—ABuUmpEdgeBase.py : 边裁基础实现模块
—ABuUmpEdgeDeg.py : 示例ump边裁特征走势拟合角度模块
—ABuUmpEdgeFull.py : 示例ump边裁特征多混模块
—ABuUmpEdgeMul.py : 示例ump边裁特征单混模块
—ABuUmpEdgePrice.py : 示例ump边裁特征价格模块
—ABuUmpEdgeWave.py : 示例ump边裁价格波动特征模块
—ABuUmpMainBase.py : 主裁基础实现模块
—ABuUmpMainDeg.py : 示例ump主裁特征走势拟合角度模块
—ABuUmpMainFull.py : 示例ump多混特征模块
—ABuUmpMainJump.py : 示例ump主裁特征跳空模块
—ABuUmpMainMul.py : 示例ump单混特征模块
—ABuUmpMainPrice.py : 示例ump价格特征模块
—ABuUmpMainWave.py : 示例ump价格波动特征模块
—ABuUmpManager.py : 买入卖出因子与ump进行组织管理通信模块
========UtilBu: =======
—ABuDateUtil.py : 时间日期工具模块
—ABuDelegateUtil.py : 委托工具模块
—ABuDTUtil.py : 通用装饰器, 上下文管理器工具模块
—ABuFileUtil.py : 文件处理读取写入
—ABuKLUtil.py : abupy中使用的金融时间序列分析模块,
—ABuLazyUtil.py : lazy工具模块
—ABuMacUtil.py : mac os 平台工具模块
—ABuMd5.py : md5, crc32等加密,变换匹配模块
—ABuOsUtil.py : 操作系统工具函数整合模块
—ABuPlatform.py : 平台信息工具模块
—ABuProgress.py : 辅助进度显示模块,多进程,单进程
—ABuRegUtil.py : 拟合工具模块
—ABuScalerUtil.py : 标准规范化数据工具模块
—ABuStatsUtil.py : 统计相关工具模块
—ABuStrUtil.py : 字符工具模块
—ABuWinUtil.py : windows pop弹窗,主要用在长时间且耗时的任务中,提示重要问题信息
========WidgetBu: =======
—ABuWGBase.py : 股票基本信息图形可视化
—ABuWGBFBase.py : 买入因子参数以及选择图形可视化
—ABuWGBRun.py : 上层回测图形可视化
—ABuWGBRunBase.py : 股票基本信息图形可视化
—ABuWGBSymbol.py : 股票池选股ui界面
—ABuWGBuyFactor.py : 买入因子参数以及选择图形可视化
—ABuWGCrossVal.py : 策略相关性交叉验证图形可视化
—ABuWGDATool.py : 量化振幅分析工具图形可视化
—ABuWGGridSearch.py : 策略最优参数grid search图形可视化
—ABuWGPickStock.py : 选股因子参数以及选择图形可视化
—ABuWGPosBase.py : 仓位资金管理参数以及选择图形可视化
—ABuWGPosition.py : 资金仓位管理策略图形可视化
—ABuWGPSBase.py : 选股因子参数以及选择图形可视化
—ABuWGQuantTool.py : 量化技术分析工具图形可视化
—ABuWGSellFactor.py : 卖出因子参数以及选择图形可视化
—ABuWGSFBase.py : 卖出因子参数以及选择图形可视化
—ABuWGSMTool.py : 量化相关分析工具图形可视化
—ABuWGStockInfo.py : 股票基本信息图形可视化
—ABuWGTLTool.py : 量化技术分析工具图形可视化
—ABuWGToolBase.py : 量化技术分析工具图形可视化基础模块
—ABuWGUmp.py : ump回测裁判训练以及交易预测拦截图形可视化
—ABuWGUpdate.py : 数据下载图形可视化
—ABuWGVerifyTool.py : 策略验证工具图形可视化
提取文件功能代码
import os
import re
base_path = './'
def file_or_dir(path):
if '.idea' in path or '__' in path or 'RomDataBu' in path or 'ExtBu' in path:
return
if os.path.isfile(path):
try:
with open(path, 'r', encoding='utf-8') as f:
text = f.read()
try:
content = re.findall('"""(.*?)"""', text,re.S)[0].strip()
except:
content = ''
file_path = path.replace('/', '.').replace('\\', '.')
file_name = '.'.join(file_path.split('.')[-2:])
dir_path = file_path.replace(file_name, '')
file_path = file_path.replace(dir_path, '---')
print(file_path, ': ', content)
return
except:
print(path, '---------有误')
return
else:
path_list = os.listdir(path)
print()
print(f"========{path.replace('./','')}: =======")
print()
for path_l in path_list:
all_path = os.path.join(path, path_l)
file_or_dir(all_path)
file_or_dir(base_path)