Lassen Sie uns mit Python 2 einen Investitionsalgorithmus entwickeln

Bis zum letzten Mal

Letztes Mal zeigte einfach den Aktienkurs von 9984 (Softbank) an. Lassen Sie uns diesmal den gleitenden Durchschnitt des Aktienkurses berechnen.

Was ist ein gleitender Durchschnitt?

Wikipedia: Moving Average

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.

SMA_t = \frac{p_t + p_{t-1} + \ldots + p_{t - \left( n - 1 \right)}}{n};t \geq n - 1

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.

Code

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.

Versuche zu rennen

スクリーンショット 2017-06-15 10.38.18.png

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.

Kannst du wirklich rechnen?

Ich frage mich, ob ich es wirklich berechnen kann, also werde ich das tatsächliche Berechnungsergebnis auf der Registerkarte "RawData" im Diagramm überprüfen.

スクリーンショット 2017-06-15 11.08.43.png

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.

Diagrammachse

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,

スクリーンショット 2017-06-15 10.48.22.png

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.

Zusammenfassung

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.

Referenzinformationen

2018/1/11 postscript Offizielle Versions-URL:

Recommended Posts

Lassen Sie uns mit Python 2 einen Investitionsalgorithmus entwickeln
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Genetischer Algorithmus in Python
Algorithmus in Python (Bellman-Ford-Methode, Bellman-Ford)
Algorithmus in Python (Dijkstra)
Algorithmus in Python (Haupturteil)
Reproduzieren Sie die euklidische Methode der gegenseitigen Teilung in Python
Algorithmus in Python (Dichotomie)
Implementieren Sie den Dijkstra-Algorithmus in Python
Wie man in Python entwickelt
Algorithmus in Python (Breitenprioritätssuche, bfs)
Sortieralgorithmus und Implementierung in Python
Schreiben Sie einen HTTP / 2-Server in Python
Python-Algorithmus
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Algorithmus in Python (Tiefenprioritätssuche, dfs)
Implementierung eines einfachen Algorithmus in Python 2
Algorithmus (Segmentbaum) in Python (Übung)
Python in ist auch ein Operator
Führen Sie einen einfachen Algorithmus in Python aus
Eine Alternative zu "Pause" in Python
Ali Buch in Python: Sec.2-5 Dyxtra-Methode
Algorithmus in Python (ABC 146 C Dichotomie
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Schreiben Sie eine einfache Giermethode in Python
Ausrichtungsalgorithmus durch Einfügemethode in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Python-Memorandum (Algorithmus)
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv