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