Letztes Mal zeigte einfach den Aktienkurs von 9984 (Softbank) an. Lassen Sie uns diesmal den gleitenden Durchschnitt des Aktienkurses berechnen.
Es gibt verschiedene Arten von gleitenden Durchschnitten, aber im Fall von einfachen gleitenden Durchschnitten ist der gleitende n-Tag-Durchschnitt der Durchschnitt der Schlusskurse der letzten n Tage, wenn $ p_t $ der Preis vor $ t $ Tagen ist.
Der gleitende Durchschnitt ist einer der grundlegendsten Indikatoren bei der technischen Analyse der Aktienkurse und wird zur Beurteilung der Bedingungen wie Goldenes Kreuz und Totes Kreuz verwendet. Das goldene Kreuz sagt "kaufe es", wenn der gleitende 5-Tage-Durchschnitt den gleitenden 25-Tage-Durchschnitt überschreitet und das tote Kreuz das Gegenteil ist.
[Wikipedia: Moving Average Line](https://ja.wikipedia.org/wiki/moving Average Line)
Lassen Sie uns diesmal den gleitenden Durchschnitt mit dem Schlusskurs berechnen, nachdem Sie den Aktienkurs angepasst haben.
Plötzlich ist es ein Code.
def _mavg_signal(data):
m5 = data["close_price_adj"].fillna(method='ffill').rolling(window=5, center=False).mean()
m25 = data["close_price_adj"].fillna(method='ffill').rolling(window=25, center=False).mean()
return {
"mavg_5:price": m5,
"mavg_25:price": m25,
}
#Signalregistrierung
ctx.regist_signal("mavg_signal", _mavg_signal)
Registrieren Sie in initialize ()
die Funktion _mavg_signal
mitctx.regist_signal ()
.
In _mavg_signal ()
werden zwei Arten von Berechnungen durchgeführt: gleitender 5-Tage-Durchschnitt und gleitender 25-Tage-Durchschnitt.
Der Parameter data
ist vom Typ pandas.Panel und hat eine dreidimensionale Struktur. Die dreidimensionale Struktur ist
Achse-0 (Elemente): Datenelemente (Abschlusspreis, Volumen usw.) Achse-1 (Haupt): Datum (Typ datetime.datetime) Achse 2 (Moll): Markenname (Symbolobjekttyp) Zitiert aus https://quantx.io/handbook/ja/#initialize
Es scheint, dass es eine solche Struktur hat. Es ist schwer vorstellbar, aber es ist möglicherweise einfacher zu verstehen, wenn Sie wie Excel denken (3D mit "Zeilen, Spalten, Blättern"?) Das eigentliche interne Bild wird in Handbuch geschrieben, aber nachdem Sie das Datenelement von Achse 0 festgelegt und in 2D abgelegt haben, Pandas Der gleitende Durchschnitt wird durch die Funktion von .DataFrame berechnet und als Wert von dict als Rückgabewert zurückgegeben.
Es kam heraus! mavg_5 ist der gleitende 5-Tage-Durchschnitt und mavg_25 ist der gleitende 25-Tage-Durchschnitt. Der gleitende 5-Tage-Durchschnitt unterscheidet sich nicht wesentlich vom Schlusskurs (close_price_adj), daher ist er schwer zu erkennen.
Ich frage mich, ob ich es wirklich berechnen kann, also werde ich das tatsächliche Berechnungsergebnis auf der Registerkarte "RawData" im Diagramm überprüfen.
Der Wert des gleitenden 5-Tage-Durchschnitts vom 10.01.2014 beträgt $ \ frac {8880 + 8920 + 8990 + 8920 + 9020} 5 = 8946 $. Es scheint also, dass er berechnet werden kann! Mavg_5: Preis ist 5 Da es sich um einen täglichen gleitenden Durchschnitt handelt, kann er erst am 4. Tag nach Beginn des Backtests berechnet werden. Daher ist er leer.
In _mavg_signal ()
, das den gleitenden Durchschnitt berechnet,
return {
"mavg_5:price": m5,
"mavg_25:price": m25,
}
Hat das Diktat zurückgegeben. Der Wert von dict ist pandas.DataFrame, das Berechnungsergebnis des gleitenden Durchschnitts.
Der Schlüssel ist der Achsname des Diagramms, aber der Punkt ist ": Preis", der den Maßstab im Diagramm angibt.
: price
ist eine vordefinierte Skala, die die Aktienkursskala der Aktie darstellt. Wenn Sie die Achsen von mavg_5 und mavg_25 gleich machen, können Sie zum ersten Mal in der Tabelle vergleichen.
als Versuch,
return {
"mavg_5:mavg_5": m5,
"mavg_25:mavg_25": m25,
}
Mit diesem Gefühl, wenn ich versuche, es auszuführen,
Da der Maßstab der vertikalen Achse jedes gleitenden Durchschnittswerts unterschiedlich ist, hat sich der Grad der Überlappung der Diagramme geringfügig geändert (schwer zu verstehen). Daher ist es schwierig, das goldene Kreuz oder das tote Kreuz anhand dieser Tabelle zu beurteilen. Richten wir also die Achsen aus.
Dies ist der Code für diese Zeit.
def initialize(ctx):
ctx.configure(
target="jp.stock.daily",
channels={
"jp.stock": {
"symbols": [ "jp.stock.9984" ],
"columns": [ "close_price_adj" ]
}
}
)
def _mavg_signal(data):
m5 = data["close_price_adj"].fillna(method='ffill').rolling(window=5, center=False).mean()
m25 = data["close_price_adj"].fillna(method='ffill').rolling(window=25, center=False).mean()
return {
"mavg_5:price": m5,
"mavg_25:price": m25,
}
#Signalregistrierung
ctx.regist_signal("mavg_signal", _mavg_signal)
def handle_signals(ctx, date, current):
'''
current: pd.DataFrame
'''
pass
Nächstes Mal werde ich versuchen, kompliziertere Indikatoren zu berechnen und anzuzeigen.
2018/1/11 postscript Offizielle Versions-URL:
Recommended Posts