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.
Installieren Sie zunächst den Handelskalender für jede Börse.
python
(python355) C:\Users\***\anaconda3>conda install -c quantopian trading-calendars
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