# fintech-py **Repository Path**: jiaoxianfeng/fintech-py ## Basic Information - **Project Name**: fintech-py - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-11-11 - **Last Updated**: 2022-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 面向金融的Python量化回测大作业 ## 项目成员 | 姓名 | 学号 | 分工 | | -----| ---- | ---- | | 焦贤锋 | 2101210589 | 负责深度学习相关策略 | | 刘子明 | 2101210610 | 负责代码框架与基本策略的实现 | | 邵璟之 | 2101210624 | 负责计算回测过程中的相关数据 | | 张堇然 | 2101210494 | 负责计算回测结束后的评判指标 | | 张贤揆 | 2101210504 | 负责数据可视化 | ## 项目结构 - `backtester`:存放了主要的回测执行函数`trade_back_tester.py`,用以执行用户指定的策略在指定的日期范围内进行回测。 - `data`:存放了本项目中使用的数据(包括原始数据和处理过的训练集等数据)以及获取数据的方法。 - `model`:存放了本项目中使用到的深度学习模型,包括`gru`, `concare`,其中`concare`为自己设计的深度学习模型。 - `strategy`:存放了本项目中使用的策略,其中`strategy_base`为所有策略的基类,用户可以通过重写基类中的抽象方法`buy_strategy`与`sell_strategy`来实现自定义策略。 - `utils`: 存放了本项目中使用到的一些工具类,比如计算策略的夏普比率和最大回撤率,以及天数相关的工具计算函数。 ## 实现概述 ### 策略实现 通过实现了一个**策略模式**来支持策略的添加,符合了**开闭原则**。通过定义虚基类策略,我们在新添加策略的时候只需新建一个覆盖了`buy_strategy`与`sell_strategy`方法的子类,并在使用时将子类传入回测执行函数中即可。 ### 策略因子 策略至少能支持以下因子: 1. 设置初始资金 2. 设置调仓时间 3. 设置最大持有股票数 其余的因子均可以通过**策略实现**小节中的方法动态的添加。 ### 深度学习模型训练框架 - `dataset`:存放训练、验证以及测试所需的数据,以及数据获取和处理的方法 文件夹中放入`__init__.py`文件,做成包,方便导入: ``` from .data_interface import DInterface ``` 在 `data_interface` 中建立一个 `class DInterface(pl.LightningDataModule)` :用作所有数据集文件的接口。`__init__()` 函数中导入相应 `Dataset` 类,用 `setup()` 进行实例化,并加入所需要的 `train_dataloader`, `val_dataloader`, `test_dataloader` 函数。这些函数往往都是相似的,可以用几个输入 `args` 控制不同的部分。 - `model`: 存放模型代码 文件夹中放入`__init__.py`文件,做成包,方便导入: ``` from .model_interface import MInterface ``` 同理,在 `model_interface` 中建立 `class MInterface(pl.LightningModule)` :类,作为模型的中间接口。`__init__()` 函数中导入相应模型类,然后加入`configure_optimizers`, `training_step`, `validation_step` 等函数,用一个接口类控制所有模型。不同部分使用输入参数控制。 - `checkpoints`: 负责存放训好的模型参数 - `main.py`: 负责定义 `parser`,添加 `parse` 项。选好需要的 `callback` 函数们。实例化 `MInterface`, `DInterface`, `Trainer`。 ### 模型 可设置考虑多少因子,可设置预测目标(适应回归任务、分类任务、多标签分类任务) #### GRU ![alt text](https://img-blog.csdnimg.cn/e8fe4b1067a546f09d3eb42fd7707fc2.png#pic_center) #### 多通道 GRU + self attention 模型 ![alt text](https://img-blog.csdnimg.cn/0394012151044afd82f2b4ab038d35a2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2Z56yR5bed5aWl5Yip57uZ,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) #### 模型性能 | model | acc | auroc | auprc | minpse | | ----------------- | ------------ | ------------ | ------------ | ------------ | | GRU | 0.853(0.003) | 0.929(0.002) | 0.911(0.003) | 0.832(0.003) | | Multi-Channel GRU | 0.861(0.003) | 0.937(0.003) | 0.923(0.003) | 0.843(0.003) |