同步操作将从 alexthekingdom/backtest_system 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
总体由四个类组成,由类之间的交互实现整体功能。
还有一些其他的辅助函数,一共分别放在12个py文件中。
文件读写类,没啥好说的。
俩方法,read_file()
和write_file()
分别实现pickle
文件的读写操作。
本来读写操作不太多,不太想把读写操作单独成一个类,但是助教的pdf
里面写了也就听他的了x
交易者类的基类。
成员变量包括一些用于调整策略的参数,包括:
max_stock_num
:最多同时持有的股票数cash
:当前手里剩下的钱stock_shares
:字典,存放当前手里各股票的份额net_worth
:当前手里所有股票+现金的总净值tax_ratio
:每次交易的手续费,单位百分比stocks_info
:股票的历史信息方法包括:
get_worth()
:总计一下当前的总净值,参数是时间因为需要算当前的收盘价buy()
:在xx天买入xx元的xx股票,买股票必须以手为单位,手上的钱不够买会报errorsell()
:在xx天卖出xx股的xx股票,买股票不需要整手但是要扣手续费,手里的股不够卖会直接卖完而不是报错strategy()
:策略,基类的策略啥也不干,在子类里写策略写了个策略类的子类示范,用机器学习方法进行选股
主要对stratey()
方法进行了重载,用前五年的股票历史信息训练xgboost
模型,输入特征选取了35个因子中较为显著的12个因子,输出标签是30天后股票的涨跌情况,做一个二分类。具体的训练过程在machine_learning.py
中实现,正确率在83%左右。
然后在策略里用模型对后五年的数据进行预测,每天都买入预测为涨的股票并卖出预测为跌的股票,同时注意处理一下max_stock_num
的限制。
可以仿照这个类写其他的策略进行扩展。
日志类,记录整个回测过程的详细请况
成员变量包括:
log
:一个字典,按天保存每次交易的情况方法有三个:
add_log()
:加一天的记录calculate()
:计算一些统计量,包括alpha
/beta
/sharpe_ratio
之类的。具体计算过程在evaluate_indicators.py
中实现。draw()
:用pyecharts
包画个折线图,存放到line.html
里。回测类,利用当前的策略进行模拟回测
成员变量包括一些设置回测需要的参数:
initial_money
:初始资金,单位(元)adjust_period
:调仓周期,单位(天)start_time
:开始日期end_time
:结束日期benchmark_info
:基准收益(上证指数)的历史信息trader
:当前使用的交易者log
:本次回测的日志trade_days
:可以交易的日期方法就一个:
run()
:运行策略模拟买卖,计算收益和基准收益,保存日志benchmark_data.csv
:存放了用于计算基准收益的上证指数和用于计算夏普比率的国债指数
corr.py
:算了一下各个因子之间的相关性,助教pdf里面写的,但是最后没用到x
crawl.py
:爬了一下各个股票的百度搜索指数作为因子,但是有的股票爬不到而且作为因子效果不太好,就也没有用到。
dayCalculation.py
:放了几个用于日期操作的函数,比较简单就没包装成类
CMTrader.py
:另一个传统的股票池择时策略
在main.py
里设置一下各个参数和使用的trader
然后直接运行就完事
打开line.html
可以查看整体结果
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。