[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬

Ich habe den Stochastic Oscillator ausprobiert, den Einstieg in den Systemhandel, nachdem ich den Aktienkurs erhöht hatte. Der Python-Code befindet sich in Referenz ①, ist also 3 Jahre alt. Wenn Sie also glauben, dass er noch vorhanden ist, funktioniert er nicht. Also werde ich es in einem Artikel zusammenstellen, damit ich es nicht vergesse. 【Referenz】 ①Investing with Python: Stochastic OscillatorImmediateDeprecationError of Google Finance data #587pandas.core.window.rolling.Rolling.min

Was ich getan habe

・ Einführung in Systre ・ Verschieben Sie den Code · Wie ist es jetzt?

・ Einführung in Systre

Grundsätzlich ① Kaufen, wenn es sinkt ② Verkaufen, wenn es steigt Es ist in Ordnung, wenn das System dies automatisieren kann. Geht ① nicht mehr runter? ② Kann es noch höher gehen? Es besteht ein Risiko, daher möchte ich das auch identifizieren. Eine Methode, die häufig für diese Bestimmung verwendet wird, ist die Verwendung des in Referenz (1) gezeigten Diagramms des stochastischen Oszillators. Dieses Mal werden wir die Codierung beschreiben, damit sie verwendet werden kann. The Stochastic Oscillator is calculated as follows:

%K = (Current Close - Lowest Low)/(Highest High - Lowest Low) * 100
%D = 3-day SMA of %K
Lowest Low =Das niedrigste Tief für den Look-back period)
Highest High =Höchste Höhe für den Look-back period)
3-day SMA =3 Tage einfacher gleitender Durchschnitt

In der Regel wird eine Lookback-Zeit von 14 Tagen verwendet. So ermitteln Sie den einfachen gleitenden Durchschnitt wie folgt

SMA(n) = \frac {\sum_{i=0}^{n-1}(CLOSE_i)} {n}

【Referenz】 ④ Aktien analysieren, um die Unternehmensleistung zu verstehen

・ Verschieben Sie den Code

Tatsächlich funktioniert der Referenzcode ① nicht. Darüber hinaus ist es Yahoo Finance untersagt, zu kratzen.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
from pandas_datareader import data

Sie können es erhalten, indem Sie das Datum auf Yahoo, Google und anderen kostenpflichtigen Websites angeben. Sie können jedoch nicht das Enddatum auf dieser Website angeben. Es funktioniert jedoch wie dieselbe Funktion, indem Sie das, was Sie benötigen, aus den abgerufenen Daten extrahieren, wie unten gezeigt. Da die Datensequenz umgekehrt ist, ist sie auch umgekehrt. 【Referenz】 ⑥ [Mit Pandas bestimmte Zeilen / Spalten aus dem Datenrahmen abrufen](https://pythondatascience.plavox.info/pandas/%E8%A1%8C%E3%83%BB%E5%88%97%E3% 81% AE% E6% 8A% BD% E5% 87% BA) ⑦Right way to reverse pandas.DataFrame?

def get_stock(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)["Close"]
    df = df.iloc[::-1]
    return df[start:end]

def get_high(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)['High']
    df = df.iloc[::-1]
    return df[start:end]

def get_low(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)['Low']
    df = df.iloc[::-1]
    return df[start:end]

Berechnen Sie die obigen% K unten. Hier wurde das Rollen (). Max () der Pandas geändert und kann wie folgt gemäß Referenz ③ berechnet werden.

def STOK(close, low, high, n): 
    STOK = ((close - low.rolling(n).min()) / (high.rolling(n).max() - low.rolling(n).min())) * 100
    return STOK

Unten ist die Funktion, die% D berechnet. Berechnen Sie% K, um den einfachen gleitenden 3-Tage-Durchschnitt zu berechnen.

def STOD(close, low, high, n):
    STOK = ((close - low.rolling(n).min()) / (high.rolling(n).max() - low.rolling(n).min())) * 100
    STOD = STOK.rolling(3).mean()
    return STOD

Die Marke verwendet Sony. Der Zeitraum ist der gleiche wie in Referenz ① oben. Erstens beträgt die Anzahl der Tage, die auf% K und% D zurückblicken, ebenfalls 14 Tage.

stock = '6758.JP' #sony
start = dt.date(2016,1,1)
end = dt.date(2016,12,31)
df = pd.DataFrame(get_stock(stock, start, end))
df['High'] = get_high(stock, start, end)
df['Low'] = get_low(stock, start, end)
df['%K'] = STOK(df['Close'], df['Low'], df['High'], 14)
df['%D'] = STOD(df['Close'], df['Low'], df['High'], 14)

Ich werde die Daten zur Bestätigung unten ausgeben.

print(df[0:30])
print(df.tail())
              Close     High      Low         %K         %D
Date
2016-01-04  2875.56  2981.55  2859.04        NaN        NaN
2016-01-05  2880.90  2916.39  2849.30        NaN        NaN
...
2016-01-21  2363.56  2506.53  2363.06        NaN        NaN
2016-01-22  2458.85  2470.05  2405.86  15.487720        NaN
2016-01-25  2468.09  2498.74  2439.42  18.493802        NaN
2016-01-26  2363.06  2408.78  2359.66   0.595113  11.525545
2016-01-27  2442.81  2453.99  2409.75  18.250258  12.446391
...
2016-02-15  2379.61  2408.29  2293.05  34.207540  16.258774
2016-02-16  2415.11  2459.84  2316.39  39.242858  27.149584
              Close     High      Low         %K         %D
Date
2016-12-26  3261.97  3293.31  3260.04  65.381424  70.155819
2016-12-27  3253.17  3264.93  3237.51  59.458713  65.992247
2016-12-28  3266.87  3296.23  3249.25  62.741071  62.527069
2016-12-29  3228.71  3261.97  3196.41  22.300469  48.166751
2016-12-30  3205.22  3240.46  3192.49   8.557408  31.199649
              Close     High      Low         %K         %D

Schließlich wird das Diagramm unten ausgegeben. Da% D 15 Tage lang keine Daten enthält (an Samstagen und Sonntagen gibt es überhaupt keine Daten), richten Sie die horizontalen Achsen von ax1 und ax2 durch Zeichnen ab dem 16. Tag aus.

fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*1))
ax1.plot(df['Close'][16:],label = "close")
ax2.plot(df['%K'][16:],label = "%K")
ax2.plot(df['%D'][16:],label = "%D")
ax1.legend()
ax2.legend()
ax1.grid()
ax2.grid()
plt.savefig("./stock/stc_%K%D_6758.png ")
plt.show()

Das Ergebnis ist wie folgt. stc_%K%D_6758.png Ich kann mich nicht erleichtert fühlen, daher werde ich versuchen, dieselbe Ausgabe wie die Referenzseite auszugeben. Das Diagramm von 2016 von "FB" konnte reproduziert werden, und die gleichen Diagramme von% K und% D wurden erhalten. stc_%K%D_yahoo.png Übrigens können Sie den Aktienkurs 2016 von FB in Referenz ⑧ überprüfen.

In den folgenden Abschnitten ⑨ usw. finden Sie Informationen zu den Aktionen in diesen Diagrammen. Referenz ⑨ Google Übersetzung und Zitat. ** "Wenn es über 80 liegt, gilt der Markt als überkauft und Werte unter 20 als überverkauft.% K (blaue Linie in der Grafik unten) und% D (rote Linie unten). Wenn sich diese beiden Linien kreuzen, bedeutet dies, dass der Markt im Begriff ist, die Richtung zu ändern. Wenn% K über% D liegt, handelt es sich um ein Kaufsignal, sofern der Wert 80 nicht überschreitet. Wenn% K unter% D fällt, wird dies als Verkaufssignal betrachtet, es sei denn, der Wert fällt unter 20. "** 【Referenz】 ⑧ Facebook (Facebook, Inc.) Aktienkurs / US-AktieA trader’s guide to the stochastic oscillator

· Wie ist es jetzt?

Sony: Es gibt viele Geschäfte. .. .. Ein bisschen überkauft. .. .. stc_%K%D_6758_now.png Nippon Airlines 9201; Es wurde überkauft. .. .. Aber können Sie es am Montag kaufen? stc_%K%D_9201.JP_now.png Sumitomo Mitsui Financial Group 8316; Hmm, überkauft. .. .. stc_%K%D_8316.JP_now.png NTT Docomo 9437; Wenn es überverkauft ist und Blau auftaucht, kaufen Sie es ♬ stc_%K%D_9437.JP_now.png

Ich habe den gesamten Code unten angegeben

Es ist einfach zu bedienen, also lasst es uns benutzen ・ Stock_trade / stc2.py

Zusammenfassung

・ Ich habe einen stochastischen Oszillator gezeichnet und damit gespielt. ・ Ich habe das Gefühl, dass ich es ernsthaft nutzen kann

・ Gibt es einen Indikator? ・ Machst du Systole? ・ Wenn dies der Fall ist, ist es wahrscheinlich, dass die Transaktionsgebühr bankrott geht, und es wird notwendig sein, Wege zu finden, um sie in einem langen Zyklus zu sehen.

Bonus

・ Yahoo Finance darf nicht kratzen Das automatische Erfassen (Scraping) von Veröffentlichungsinformationen von Yahoo! Finance ist verboten

Recommended Posts

[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬
Ich habe mit PyQt5 und Python3 gespielt
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
[Systemhandel] Ich habe versucht, mit dem zerlegten stochastischen Oszillator mit Python ♬ zu spielen
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
[Einführung in StyleGAN] Ich habe mit "Eine Frau verwandelt sich in Mayuyu" gespielt ♬
Ich habe eine Heatmap mit Seaborn [Python] gezeichnet.
[Einführung in Pytorch] Ich habe mit sinGAN ♬ gespielt
[Einführung in AWS] Ich habe mit Polly und Transcribe male mit Männer- und Frauenstimmen gespielt
Ich möchte ein Spiel mit Python machen
Ich möchte mit Python in eine Datei schreiben
Systemhandel ab Python 3: Investition und Risiko
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Einführung in die KI-Erstellung mit Python! Teil 3 Ich habe versucht, Bilder mit einem Convolutional Neural Network (CNN) zu klassifizieren und vorherzusagen.
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich möchte einen Quantencomputer mit Python betreiben
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
[Python] Ich habe das Spiel von pip installiert und versucht zu spielen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Ich möchte die Effizienz mit Python auch in experimentellen Systemen verbessern (2) RS232C und pySerial
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
IPynb-Bewertungssystem mit TA von Introduction to Programming (Python)
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
[Einführung in Python3 Tag 1] Programmierung und Python
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ein Memorandum beim automatischen Erwerb mit Selen
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
Hadoop-Einführung und MapReduce mit Python