[Python Data Science | 11] Application Combat: Mi primer proyecto de código abierto - Herramienta de backtesting de inversión programada de fondos

Esta es la publicación número 60 en Machine Future

Dirección original: https://robotsfutures.blog.csdn.net/article/details/127712752

Navegación rápida "Python Data Science Quick Start Series":



Escribe al principio:

  • Introducción al blog: ¡Enfóquese en el campo AIoT, siga el pulso de la era futura y registre el crecimiento tecnológico en el camino!
  • Comunidad de Blogger: inteligencia artificial AIoT , ¡bienvenido a unirse!
  • Introducción de columna: bibliotecas de uso común de ciencia de datos maestros Numpy, Matploblib, Pandas de 0 a 1.
  • Frente a la multitud: Estudiantes primarios de IA

1. Resumen del proyecto

El proyecto es una herramienta de inversión de cartera de fondos que los bloggers quieren lograr.
La filosofía de inversión del fondo del blogger es la inversión fija a largo plazo, comprando el índice del mercado, diversificando la inversión y dando prioridad a mantener el principal.

1.1 Inversión diversificada

  • Dividir en diferentes categorías: como Shanghai y Shenzhen 300, China Securities 500, ChiNext;

    • Por ejemplo, el CSI 300 está entre las 300 empresas con mejor desempeño en las bolsas de Shanghai y Shenzhen, representa la economía china y es estable, pero los ingresos pueden ser relativamente bajos y se pueden hacer más asignaciones;
    • CSI 500 está entre las 500 empresas con mejor desempeño en el mercado de valores chino, con un alcance más amplio;
    • ChiNext es una empresa empresarial en el mercado de valores de China. Tiene un gran impulso y representa una nueva fuerza en el futuro de la economía de China. Tiene altos riesgos y altos rendimientos. Puede asignar menos
    • El índice de oro es un fondo que rastrea el precio del oro físico. Como dice el refrán: compre oro en tiempos difíciles y compre acciones en tiempos prósperos. Cuando el mercado de valores no funciona bien, el oro puede funcionar bien.
    • El índice de deuda es un fondo que rastrea la deuda nacional y es la piedra angular fija del fondo de fondos Cuando otros objetivos de valor tienen un desempeño deficiente, el desempeño general no será tan malo;
  • Distribuido a diferentes países: China, Estados Unidos (S&P 500, NASDAQ 100), etc.

    • S&P 500, las 500 empresas con mejor desempeño en el mercado estadounidense
    • Nasdaq 100, la mayoría de las empresas de tecnología cotizan en Nasdaq, conoce el valor
  • En la actualidad, la proporción de la cartera de fondos del blogger es aproximadamente

    • CSI 300 25%
    • CSI 500 15%
    • gema 10%
    • Oro 10%
    • 20% de deuda
    • S&P 500 15%
    • Nasdaq 100 5%

    El blogger no probó más índices de participación y puede probarlos por sí mismo.

1.2 Reequilibrio periódico

Cuando se crea la cartera de fondos, diferentes fondos tienen diferentes acciones. Después de un período de operación, las acciones cambiarán. Algunos fondos pueden subir mucho y otros pueden bajar un poco. La razón por la que algunas personas compran fondos y no ganan el dinero es Qué, no se venderá, y el dinero que ha subido ha salido de nuevo.
El mercado de valores es cíclico, con altibajos y flujos y reflujos. A través del reequilibrio regular, las acciones del fondo que han estado funcionando durante un período de tiempo se reconfiguran al índice de acciones inicial, lo que cumple el propósito de vender alto y comprar bajo en disfrazar y se da cuenta de la nitidez El propósito de Pinggu es ganar más retornos en exceso.

Se recomienda operar el ciclo de rebalanceo una vez al año, lo que puede reducir costos.

2. Guía del usuario

2.1 Iniciar y ejecutar

2.1.1 Método 1

Abra directamente el IDE de la nube de CSDN para que se ejecute automáticamente: https://idegitcode.net/RobotFutures/1024

2.1.2 Método 2

  • Descarga el código fuente de gitcode
git clone https://gitcode.net/RobotFutures/1024.git
  • empezar a correr
./env.sh&&pip install -r requirements.txt&&python fund_portfolio_backtesting_tool.py

2.2 Estructura del directorio

├── CHANGELOG.MD                        # 修订记录
├── README.md                           # 使用文档
├── fund_fee_list.csv                   # 爬取的公募基金交易费用
├── fund_portfolio_backtesting_tool.py  # 基金组合回测工具程序
├── log.txt                             # 日志输出
├── package.json    
├── preview.yml                         # 自动启动运行脚本配置
├── requirements.txt                    # 项目所需库
├── src
├── 公募基金概要数据.csv                 # 下载的公募基金概要数据,包含交易费用
├── 回测结果                             # 回测计算结果
    └── 2022-11-06_01-23-39             # 回测时间
        ├── fund_portfolio_result.csv   # 基金组合清单及份额占比
        ├── fund_portfolio_trend.png    # 基金组合与沪深300对比
        ├── 沪深300基金参考.csv          # 沪深300参考基金历史数据
        └── 自选组合基金回测数据.csv     # 基金组合回测历史数据
├── 数据可靠性验证                       # 使用EXCEL验证组合基金复权净值的数据可靠性
    ├── 数据可靠性验证.xlsx             # 数据可靠性数据验证文档,使用EXCEL函数来实现
    ├── fund_portfolio_result.csv       # 基金组合份额数据
    └── 自选组合基金回测数据.csv        # 基金组合回测历史数据
├── 基金关键字筛选结果                   # 大盘基金关键字及策略筛选结果
├── 基金组合筛选结果列表                 # 筛选结果基金性能指标
    ├── fund_portfolio_result.csv       # 基金组合清单及份额占比
    ├── fund_portfolio_trend.png        # 基金组合与沪深300对比
    ├── 沪深300基金参考.csv              # 沪深300参考基金历史数据
    └── 自选组合基金回测数据.csv        # 基金组合回测历史数据
├── 累计净值趋势                         # 下载的公募基金累计净值历史数据       
└── 累计回报趋势                        # 下载的公募基金累计回报历史数据    

2.3 Visualización de los resultados del backtest

  • Visualización visual de los resultados del backtest

  • fondo de fondos autoseleccionado

Unnamed: 0,code,years,withdrawal,annual_return,total_return,sharp,calmar,volatility,name,type,scale,m_fee,c_fee,sale_fee,sub_fee,total_fee,share
16.0,002670,6.11,27.34,6.74,37.02,0.46,12.9743,19.4,万家沪深300指数增强A,股票指数,6.34,1.0,0.12,0.0,0.1,1.22,0.5
97.0,502000,7.55,29.38,9.81,57.14,0.62,18.3793,20.16,西部利得中证500指数增强A,股票指数,5.08,1.0,0.2,0.0,0.1,1.3,0.15
3.0,001879,5.42,37.64,12.36,75.57,0.59,16.5217,26.3,长城创业板指数增强A,股票指数,6.58,1.0,0.15,0.0,0.15,1.3,0.1
4.0,002610,6.43,20.27,7.04,38.89,0.65,15.5788,12.22,博时黄金ETF联接A,联接基金,8.27,0.5,0.1,0.0,0.06,0.66,0.1
134.0,002864,6.38,0.61,3.38,17.41,10.81,224.7164,0.32,广发安泽短债债券A,债券型,28.99,0.3,0.1,0.0,0.04,0.4399999999999999,0.05
4.0,050025,10.39,31.17,11.3,67.75,0.65,17.4237,20.85,博时标普500ETF联接A,QDII-指数,8.87,0.6,0.25,0.0,0.12,0.97,0.05
5.0,161130,5.37,28.32,13.13,81.43,0.66,23.5765,25.47,易方达纳斯达克100人民币,QDII-指数,7.36,0.8,0.25,0.0,0.12,1.17,0.05
  • Verificación de la confiabilidad de los datos

Use EXCEL para calcular el valor neto ponderado de la cartera del fondo de acuerdo con la proporción de las acciones del fondo de la cartera. Los resultados de la prueba son los siguientes (consulte el catálogo [Verificación de la confiabilidad de los datos] para obtener más detalles):

EXCEL calcula el valor neto reponderado de la cartera del fondo

imagen-20221106234134442

fund_portfolio_backtestng_tool herramienta de backtesting para calcular el valor neto reponderado de la cartera del fondo

imagen-20221106234413472

Se puede ver que los datos de los dos son consistentes, por lo que se puede garantizar la confiabilidad de los datos de la herramienta.

3. Combinación de construcción propia

Encuentre esta ubicación del código

if __name__ == "__main__":
    pd.set_option('display.max_rows', 1000)
    pd.set_option('display.max_columns', 10)

    # 获得公募基金基础数据(这里不用管,执行即可)
    df_base = get_fund_base_info()

    # 大盘基金筛选(这里就是基金筛选策略)
    # 筛选策略是关键字、最大历史回测,基金成立时间、基金最小规模、基金最大允许的交易费率
    # 可支持的关键字很多,从基金的分类通用关键字即可,例如半导体、新能源、量化等
    df_kpi_csi300 = get_fund_rank(fund_list=df_base, keywords='沪深300', max_withdrawal=60.0, establish_year=5, start='2018-01-01', end='2022-10-31')
    df_kpi_csi500 = get_fund_rank(df_base, '中证500', 50.0, 5, '2018-01-01', '2022-10-31')
    df_kpi_gem = get_fund_rank(df_base, '创业板', 50.0, 5, '2018-01-01', '2022-10-31')
    df_kpi_gold = get_fund_rank(df_base, '黄金', 50.0, 5, '2018-01-01', '2022-10-31')
    df_kpi_bond = get_fund_rank(df_base, '债', 30.0, 5, '2018-01-01', '2022-10-31')
    df_kpi_sp500 = get_fund_rank(df_base, '标普500', 50.0, 5, '2018-01-01', '2022-10-31')
    df_kpi_nasda = get_fund_rank(df_base, '纳斯达克', 50.0, 5, '2018-01-01', '2022-10-31')

    # 定投基金组合回测
    fund_portfolio_backtesting(
        # 这里填写上面获得基金分类数据集
        fund_kinds_list = [df_kpi_csi300, df_kpi_csi500, df_kpi_gem, df_kpi_gold, df_kpi_bond, df_kpi_sp500, df_kpi_nasda],
        # 这里配置对应上面的基金份额
        fund_share_cfg = [0.25, 0.15, 0.10, 0.10, 0.20, 0.15, 0.05],
        # 这里填写回测起始时间和结束时间,参考跟踪基金
        start_date = '2018-01-01', end_date = '2022-10-31', fund_id_ref = '160706'
    )

4. Contáctame

Siga al autor para obtener más noticias, suscríbase al blog https://blog.csdn.net/RobotFutures?spm=1010.2135.3001.5343 , comuníquese con el blogger para el intercambio técnico de inversión fija de valor de cartera de fondos (nota: intercambio técnico de fondos )

— Recomendado por las columnas populares de los blogueros —

Supongo que te gusta

Origin blog.csdn.net/RobotFutures/article/details/127712752
Recomendado
Clasificación