Lors de la lecture des données de marque avec la tyrolienne et de l'exécution de backtest, il existe une méthode pour créer un «bundle» sur tyrolienne et y gérer les données de marque, mais il existe également une méthode de lecture des données de marque directement à partir du fichier csv et d'effectuer des backtest. Dans cet article, j'écrirai comment lire les données boursières directement à partir d'un fichier csv et effectuer un backtesting.
Tout d'abord, installez le calendrier de trading pour chaque échange.
python
(python355) C:\Users\***\anaconda3>conda install -c quantopian trading-calendars
Exécutez le code ci-dessous. Les fichiers csv des marques n1570 et n7752 utilisés lors de l'exécution du code ci-dessous Obtenez-le ici
python
from zipline.api import order, record, symbol,set_benchmark
import pandas as pd
from datetime import datetime
import zipline
import pytz  #paramètres de fuseau horaire https://narito.ninja/blog/detail/81/
from trading_calendars import get_calendar #Importez le calendrier de chaque échange
from collections import OrderedDict
HDIR="xxxxxxxxxxxxxx" #fichier csv (données de marque)Spécifiez le répertoire à mettre
 
data=OrderedDict() #Donnez de l'ordre au dictionnaire ordonné.
tickers=["n1570","n7752"] #Spécifiez ici le nom du fichier csv correspondant à la marque à lire.
#Lire le cours d'une action à partir d'un fichier csv
for ticker in tickers:
    DIR=HDIR + ticker +".csv" #Marque à lire(fichier csv)Spécifier.
    data[ticker]= pd.read_csv(DIR, index_col=0,parse_dates=True) #Lisez le fichier csv.
panel=pd.Panel(data)  #Placez les données de marque dans le panneau de matrice 3D.
panel.major_axis=panel.major_axis.tz_localize(pytz.utc) #Réglez l'heure sur la zone UTC.(Si vous ne le définissez pas sur la zone UTC pour plus de commodité, une erreur se produira.)
def initialize(contect):
    set_benchmark(symbol("n1570")) #Désignez le stock n1570 comme référence.
def handle_data(context,data):
    order(symbol("n1570"),1) #Achetez une part chaque jour à la clôture.
    record(N1570=data.current(symbol("n1570"),"price")) #Enregistrez la valeur de clôture de l'émission n1570.
    
#Exécutez un backtest.(Achetez une part de la marque n1570 à la clôture chaque jour.)
perf=zipline.run_algorithm(start=datetime(2020,1,4,0,0,0,0,pytz.utc),
                            end=datetime(2020,3,4,0,0,0,0,pytz.utc),
                            initialize=initialize,
                            capital_base=1000000, #Spécifiez l'actif au début.
                            handle_data= handle_data,
                            data=panel,
                            trading_calendar=get_calendar('XTKS') #Lire le calendrier de la Bourse de Tokyo
                           )
perf.to_csv("********") #Ecrire le résultat de l'exécution du backtest dans le fichier csv
print(perf.head())
★ Supplément ・ OrderedDict () # Donner l'ordre au dictionnaire commandé ・ ・ ・ [Cliquez ici pour l'explication](# https://note.nkmk.me/python-collections-ordereddict/) ・ Créez un tableau Panel 3D ... Cliquez ici pour l'explication ・ Réglage du fuseau horaire pytz ・ ・ ・ Cliquez ici pour l'explication
Voici le résultat de l'exécution.
python
                           N1570  algo_volatility  algorithm_period_return  \
2020-01-06 06:00:00+00:00  21510              NaN                 0.000000   
2020-01-07 06:00:00+00:00  22200         0.000125                -0.000011   
2020-01-08 06:00:00+00:00  21530         0.006189                -0.000692   
2020-01-09 06:00:00+00:00  22480         0.017575                 0.001197   
2020-01-10 06:00:00+00:00  22730         0.015535                 0.001936   
                              alpha  benchmark_period_return  \
2020-01-06 06:00:00+00:00       NaN                -0.042724   
2020-01-07 06:00:00+00:00 -0.001598                -0.012016   
2020-01-08 06:00:00+00:00 -0.046605                -0.041834   
2020-01-09 06:00:00+00:00  0.071751                 0.000445   
2020-01-10 06:00:00+00:00  0.084250                 0.011571   
                           benchmark_volatility      beta  capital_used  \
2020-01-06 06:00:00+00:00                   NaN       NaN         0.000   
2020-01-07 06:00:00+00:00              0.839647 -0.000148    -22211.101   
2020-01-08 06:00:00+00:00              0.635930  0.003357    -21540.766   
2020-01-09 06:00:00+00:00              0.692524  0.017970    -22491.241   
2020-01-10 06:00:00+00:00              0.604182  0.018330    -22741.366   
                           ending_cash  ending_exposure  \
2020-01-06 06:00:00+00:00  1000000.000              0.0   
2020-01-07 06:00:00+00:00   977788.899          22200.0   
2020-01-08 06:00:00+00:00   956248.133          43060.0   
2020-01-09 06:00:00+00:00   933756.892          67440.0   
2020-01-10 06:00:00+00:00   911015.526          90920.0   
                                   ...            short_exposure  short_value  \
2020-01-06 06:00:00+00:00          ...                       0.0          0.0   
2020-01-07 06:00:00+00:00          ...                       0.0          0.0   
2020-01-08 06:00:00+00:00          ...                       0.0          0.0   
2020-01-09 06:00:00+00:00          ...                       0.0          0.0   
2020-01-10 06:00:00+00:00          ...                       0.0          0.0   
                           shorts_count    sortino  starting_cash  \
2020-01-06 06:00:00+00:00             0        NaN    1000000.000   
2020-01-07 06:00:00+00:00             0 -11.224972    1000000.000   
2020-01-08 06:00:00+00:00             0  -9.313364     977788.899   
2020-01-09 06:00:00+00:00             0  13.968067     956248.133   
2020-01-10 06:00:00+00:00             0  20.185869     933756.892   
                           starting_exposure  starting_value  trading_days  \
2020-01-06 06:00:00+00:00                0.0             0.0             1   
2020-01-07 06:00:00+00:00                0.0             0.0             2   
2020-01-08 06:00:00+00:00            22200.0         22200.0             3   
2020-01-09 06:00:00+00:00            43060.0         43060.0             4   
2020-01-10 06:00:00+00:00            67440.0         67440.0             5   
                                                                transactions  \
2020-01-06 06:00:00+00:00                                                 []   
2020-01-07 06:00:00+00:00  [{'amount': 1, 'sid': Equity(0 [N1570]), 'orde...   
2020-01-08 06:00:00+00:00  [{'amount': 1, 'sid': Equity(0 [N1570]), 'orde...   
2020-01-09 06:00:00+00:00  [{'amount': 1, 'sid': Equity(0 [N1570]), 'orde...   
2020-01-10 06:00:00+00:00  [{'amount': 1, 'sid': Equity(0 [N1570]), 'orde...   
                          treasury_period_return  
2020-01-06 06:00:00+00:00                    0.0  
2020-01-07 06:00:00+00:00                    0.0  
2020-01-08 06:00:00+00:00                    0.0  
2020-01-09 06:00:00+00:00                    0.0  
2020-01-10 06:00:00+00:00                    0.0  
        Recommended Posts