
# 教程简介：

本教程实例针对聚宽上一个流行的ETF轮动策略，将策略本地化，并且用backtrader来实现本地回测，无需依托第三方平台。只需安装好相应的Python包便可在本地一键运行，方便进行研究和指导实际交易。

- 该策略聚宽链接：https://www.joinquant.com/view/community/detail/1b1aea4e33780bb81e2883e1ca0e0e69 

- 该策略为动量策略，针对四种ETF（上证180ETF: 510180.SH； 创业板ETF: 159915.SZ； 纳指ETF: 513100.SH； 黄金ETF: 518880.SH），计算它们每日的动量得分，每天持有得分最高的ETF，日频交易。策略逻辑详细介绍见该策略的聚宽链接。

- 该教程包含两个Python脚本：`1_ETF轮动_计算持仓.py` 和 `2_ETF轮动_回测.py`。
    - 第一个脚本（`1_ETF轮动_计算持仓.py`）根据Tushare数据源更新四个ETF的行情数据，然后计算每日动量得分，得出每日需要持仓的ETF。
    - 第二个脚本（`2_ETF轮动_回测.py`）根据第一个脚本生成的每日持仓信息（etf_tohold.pkl）来进行回测，生成回测结果。



# 怎么使用：


1. 将 Terminal 工作路径切换到当前文件夹。

2. 安装所需要的Python包，以下两种方法选其中一种来进行安装。

    - **方法一：** 使用 `pip` 安装。该方法直接在当前Python环境下安装所需要的Python包。需要注意的是，有些包很久没有更新，不能兼容较高版本的Python。如果当前Python的版本高于3.11，则需要先降低Python版本，再安装所需要的Python包。一般采用3.9、3.10的Python。
  
        ```terminal
        pip install -r requirements/requirements.txt
        ```

      如果配置环境时发现下载太慢，可以试试从内地镜像源安装试试：
        ```terminal
        pip install -r requirements/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
        ```
      安装视频讲解：[用pip配置Backtrader运行环境](https://www.bilibili.com/video/BV1tyADedECr/?share_source=copy_web)


    - **方法二：** 使用 `conda` 安装。该方法会新建一个名为 `quant_test` 的Python环境，Python版本为3.9。后续代码需要在该环境下运行。这个方法需要电脑安装过 `anaconda` 环境管理器。

        ```terminal
        conda env create -f requirements/environment.yml
        ```
        如果配置环境时发现下载太慢，可以试试从内地镜像源安装试试：
        ```terminal
        conda env create -f requirements/environment_m.yml
        ```
      安装视频讲解：[用conda配置Backtrader运行环境](https://www.bilibili.com/video/BV11SADepER8/?share_source=copy_web)




3. 运行 `1_ETF轮动_计算持仓.py`可输出每日需要持有的ETF，并将每日选股文件保存在本地:
   


   <div style="text-align: center;">
       <img src="images/img_1.png" alt="选股结果" />
   </div>

4. 运行 `2_ETF轮动_回测.py` 读取每日选股文件，对策略历史表现进行回测。


   <div style="text-align: center;">
       <img src="images/img_2.png" alt="选股结果" />
   </div>



   <div style="text-align: center;">
       <img src="images/回测结果.png" alt="回测" />
   </div>

   <div style="text-align: center;">
       <img src="images/回测结果_月.png" alt="回测" />
   </div>


