[PYTHON] Lesen Sie die Zipline-Markendaten aus der CSV-Datei und führen Sie einen Backtest durch

1 Was ist mit diesem Artikel?

Wenn Sie Markendaten mit der Zipline lesen und Backtesting durchführen, gibt es eine Methode zum Erstellen eines "Bündels" auf der Zipline und zum Verwalten der Markendaten. Es gibt jedoch auch eine Methode zum Lesen der Markendaten direkt aus der CSV-Datei und zum Durchführen des Backtestings. In diesem Artikel werde ich schreiben, wie Bestandsdaten direkt aus einer CSV-Datei gelesen und Backtesting durchgeführt werden.

2 Inhalt

2-1 Installieren des Handelskalenders

Installieren Sie zunächst den Handelskalender für jede Börse.

python


(python355) C:\Users\***\anaconda3>conda install -c quantopian trading-calendars

2-2 Installieren des Handelskalenders

Führen Sie den folgenden Code aus. Die CSV-Dateien der Marken n1570 und n7752, die bei der Ausführung des folgenden Codes verwendet wurden Hier herunterladen

python


from zipline.api import order, record, symbol,set_benchmark
import pandas as pd
from datetime import datetime
import zipline
import pytz  #Zeitzoneneinstellungen https://narito.ninja/blog/detail/81/
from trading_calendars import get_calendar #Importieren Sie den Kalender jeder Börse
from collections import OrderedDict

HDIR="xxxxxxxxxxxxxx" #CSV-Datei (Markendaten)Geben Sie das Verzeichnis an, das abgelegt werden soll
 
data=OrderedDict() #Bestellen Sie das bestellte Wörterbuch.
tickers=["n1570","n7752"] #Geben Sie den Namen der CSV-Datei an, die der Marke entspricht, die hier gelesen werden soll.

#Lesen Sie den Aktienkurs einer Aktie aus einer CSV-Datei
for ticker in tickers:
    DIR=HDIR + ticker +".csv" #Marke zu lesen(CSV-Datei)Konkretisieren.
    data[ticker]= pd.read_csv(DIR, index_col=0,parse_dates=True) #Lesen Sie die CSV-Datei.

panel=pd.Panel(data)  #Fügen Sie die Markendaten in das 3D-Array-Bedienfeld ein.
panel.major_axis=panel.major_axis.tz_localize(pytz.utc) #Stellen Sie die Zeit auf die UTC-Zone ein.(Wenn Sie es der Einfachheit halber nicht auf die UTC-Zone einstellen, tritt ein Fehler auf.)

def initialize(contect):
    set_benchmark(symbol("n1570")) #Bestimmen Sie die Aktie n1570 als Benchmark.

def handle_data(context,data):
    order(symbol("n1570"),1) #Kaufen Sie zum Schluss jeden Tag eine Aktie.
    record(N1570=data.current(symbol("n1570"),"price")) #Notieren Sie den Schlusswert der Ausgabe n1570.

    
#Führen Sie einen Backtest durch.(Kaufen Sie jeden Tag eine Aktie der Marke n1570 zum Handelsschluss.)
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, #Geben Sie das Asset zu Beginn an.
                            handle_data= handle_data,
                            data=panel,
                            trading_calendar=get_calendar('XTKS') #Lesen Sie den Kalender der Tokyo Stock Exchange
                           )

perf.to_csv("********") #Schreiben Sie das Backtest-Ausführungsergebnis in die CSV-Datei

print(perf.head())

★ Ergänzung ・ OrderedDict () # Ordnen Sie das bestellte Wörterbuch ・ ・ ・ [Klicken Sie hier, um eine Erklärung zu erhalten](# https://note.nkmk.me/python-collections-ordereddict/) ・ Erstellen Sie ein Panel-3D-Array ... Klicken Sie hier, um eine Erklärung zu erhalten ・ Zeitzoneneinstellung pytz ・ ・ ・ Zur Erklärung hier klicken

Das Folgende ist das Ausführungsergebnis.

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

Lesen Sie die Zipline-Markendaten aus der CSV-Datei und führen Sie einen Backtest durch
CSV-Datei lesen und schreiben
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Python - Lesen Sie Daten aus einer numerischen Datendatei und suchen Sie die multiple Regressionslinie.
Python - Lesen Sie Daten aus einer numerischen Datendatei und berechnen Sie die Kovarianz
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
Lesen Sie die CSV-Datei: pandas
Lesen Sie die Python-CSV-Datei
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Dateien lesen und schreiben
Dateien schreiben und lesen
CSV-Daten extrahieren und berechnen
[Python] Lesen Sie eine CSV-Datei mit großen Datenmengen mithilfe eines Generators
Lesen und verwenden Sie Python-Dateien aus Python
Lesen und Schreiben von Python CSV-Dateien
Lesen und formatieren Sie CSV-Dateien gemischt mit Komma-Registerkarten mit Python-Pandas
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame