# Python-FinancialTask **Repository Path**: scp149cloud/python-financial-task ## Basic Information - **Project Name**: Python-FinancialTask - **Description**: 金融Python大作业 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-11 - **Last Updated**: 2021-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 量化交易及回测系统 #### 软件架构 本小组开发的系统由三个部分构成,分别是 1.股票交易及回测系统 2.股票交易策略实现 3.股票交易数据可视化 #### 各类介绍 1. 交易系统Tradesystem类 Tradesystem类中定义了__init__、cal_state、reset、step四个方法。 __init__:将预处理好的数据导入系统,定义一些参数(例如:调仓周期、起始资金、当前手头资金、回测开始结束时间、当前时间、当前手头仓库情况、 每只股票的持有上限、日志) cal_state:计算当前状态,包括当前资金,仓库,时间对应的索引值,24只股票当天feature,持有上限 reset:初始化系统环境,设置调仓周期为1天,起始资金为50000,回测时间为250天,每支股票的持有数量上限是5000,即市场上一共只有5000单位股票可交易。 step:与策略进行交互从而实现买卖操作。 输入:由策略给出策略的判断结果action,action是一个含24个元素的数组,表示策略选择买入或卖出24只股票的数量。输出:下一天状态,action这一动作带来的当天收益reward,以及回测是否结束。 如果某只股票当天的收盘价存在缺失,则默认当天不能交易该股票不进行买卖操作。如果市场上流通的股票比想要买进的股票数量少,那么就买进市场上全部的股票。 买卖之后更新持仓股票数量,可用资金,计算当日交易的交易金额,并将交易日期调整至下一个需要调仓的日期,将交易记录写进日志。 用done来标记回测是否完成。 2. 日志记录Log类中定义了__init__、write_log、reset_log三个方法 __init__:初始化log,是一个字典:{日期date:详细信息},详细信息也是一个字典{交易操作action,持仓positon,货币资金curr_fund,当日因子factors,总资产total_capital,收益率earning_rate,基准收益率base_rate}。基准收益率base_rate是上证指数的收益率,收益率和基准收益率都是相对于期初数据的比率。 write_log: reset_log: 3. 策略类 机器学习 4. 可视化类与结果分析类DataVisualization 定义了8个方法: plot_strategy_results_line、plot_daily_return、plot_stock_historical_weight、draw_table前面4个方法分别对应于最终形成的3张图和一张表。 plot_strategy_results_line,主要画了3条线,策略收益曲线、上证指数收益和超额收益曲线。 plot_daily_return,用于绘制每日收益变化曲线。 plot_stock_historical_weight,用于绘制各个股票所占份额的变化图 draw_table,是生成一个表格,用于展示相关的关键评价指标 第5个方法page_draggable_layout和第6个方法make_html用于设置一页多图和分标签页展示。 第7个方法show_html主要是用于程序控制自动打开生成的html文件,用于展示。首先判断代码运行的平台(是windows还是macos),然后执行对应的代码,程序自动运行打开浏览器显示绘制的结果曲线 第8个方法plot_figures是对回测数据进行处理以及主要指标计算的。计算策略收益、beta等各种指标的,这是这个类的主入口。 为了使可视化具有良好的交互性,采用了pyecharts模块进行数据可视化和结果分析。采用分标签页的形式展示,我们绘图具备的优势特点: 1)所有曲线可交互,鼠标悬停曲线位置可显示详细信息 2)曲线增加了缩放功能,可查看回测区间一段时间内的结果 3)曲线展示范围内实时更新最大最小收益率以及平均收益率等 4)所有曲线具备原始数据查看功能 5)所有曲线具备折线图和柱状图切换功能 6)所有曲线页面中的元素可随意拖放,避免曲线遮挡 7)计算了回测区间内多只股票份额变化情况,各股票占比情况可堆叠显示,直观展示股票买入卖出变化,悬停鼠标至不同位置可显示对应的占比情况 8)计算并绘制表格展示了多项关键参数指标 9)Html格式的所有图片可一键下载至本地,可分析保存不同区间的结果 10)代码设计具有良好的可扩展性,可随时增加、删减展示的曲线结果 11)代码设计中全面考虑了不同平台的兼容性,在展示时,首先判断代码执行平台,针对不同的平台做针对性设计,保障了代码的健壮性 12)数据可视化类设计合力,接口明确,代码复用性强,针对不同展示内容进行了针对性优化,展示效果好! 5.主程序调用以上几个类,可以切换不同的策略,除了机器学习之外也考虑过将双均线等其他策略加入系统。 先实例化一个Tradesystem类,然后调用reset方法设置一下回测时间,利用while循环判断是否处于回测期,如果处于回测期,则通过当前状态由策略生成交易命令,并执行。最后可视化展示结果。 #### 系统完成度 ##基础内容: 1.可以读入本地的股票历史数据 2.可以自定义初始资金、调仓周期,市场可购买股票总量等等 3.可以自定义简单策略 4.可以在策略中使用历史数据 5.可以返回每天的收益率,并输出到本地 ##扩展内容: 1.记录了基准收益,基准收益为购买上证指数(000001)并一致持有的收益率。 2.完善了回测的功能,可以设定回测的时间段,并针对股票必须买整股的情况进行处理。 3.利用金融方法,为策略提供更多可供选择的因子。计算了alpha、beta、Jensen指数、特雷诺比率等技术指标。 4.在策略前引入各因子之间的相关性分析,并将显著的因子加入到策略模型中。 5.在策略中引入机器学习策略 6.加入了对结果的分析,计算了最大回撤,夏普比率等等。 7.加入对结果的更细致的可视化,绘制了收益率曲线,标记了重要节点(收益最高点和收益最低点)