Erkennen Sie das Golden Cross Stock Chart mit Python

Einführung

Auf dem Chart gibt es ein Phänomen namens Goldenes Kreuz als Signal beim Kauf von Aktien. Dies ist eine Methode, die hauptsächlich in Diagrammanalysebüchern zu finden ist. Ist sie jedoch tatsächlich eine gültige Methode? In diesem Artikel definieren wir das Goldene Kreuz und prüfen, ob es ein gültiges Kaufsignal ist. (Achtung: Es handelt sich um eine Diskussion darüber, ob es innerhalb des definierten Bereichs gültig ist, und es ist nicht beabsichtigt, die Methode zu kritisieren. Daher verlinken wir nicht auf die Finanzseite, auf die wir verwiesen haben. Bitte auf eigenes Risiko.) 【Implementierungsinhalt】

--Das Goldene Kreuz definieren und einen Detektor erstellen

Definition des Goldenen Kreuzes

Das goldene Kreuz ist, wenn der kurzfristige gleitende Durchschnitt den langfristigen gleitenden Durchschnitt überschreitet (für den gleitenden Durchschnitt Entwickeln eines Anlagealgorithmus in Python 2. Bitte beziehen Sie sich auf Artikel / 6337543ba3eb700d0aaa "Erklärung des gleitenden Durchschnitts")). Zuerst setze ich den täglichen Aktienkurs als Schlusskurs (ehrlich gesagt weiß ich nicht, welcher von "Eröffnungskurs", "Schlusskurs", "Hochpreis" und "Niedrigpreis" besser ist). Als Nächstes müssen Sie die Länge dieses Mittelungszeitraums festlegen. Diesmal wurde der kurzfristige Durchschnitt auf 5 Tage und der langfristige Durchschnitt auf 25 Tage festgelegt. Schließlich wurde der Tag vor dem "überschrittenen Tag" als der Tag festgelegt, an dem der langfristige Durchschnitt höher war und der Tag, an dem der kurzfristige Durchschnitt höher war.

Goldene Kreuzerkennung

Ich werde das Programm erklären, das das goldene Kreuz erkennt. Das Ausgabeergebnis ist wie folgt. Die blaue Linie ist der tägliche Aktienkurs und das rote Quadrat ist das goldene Kreuz (der y-Wert des roten Quadrats ist der Aktienkurs für eine bessere Sichtbarkeit). goldencross_detection.png

Ich werde in der Reihenfolge des Programms erklären (die zusammengefasste Quelle ist goldencross_detection.py und ich setze es unten). Für die erste Aktienakquisition [Aktienakquisition und Erstellung von Kerzendiagrammen in Python]( Siehe http://qiita.com/kjybinp1105/items/be462b481b47b6f94b14 "Aktienkurse ermitteln und Kerzendiagramme in Python erstellen").

Aktienerwerb


import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import pandas as pd

#Einstellen des Zeitraums
start = datetime.datetime(2011, 1, 1)
end = datetime.datetime(2017, 5, 30)

#Aktienerwerb
df = web.DataReader('TM', 'google', start, end)
df = df.loc[:, ['Close']]

Verwenden Sie pandas.rolling, um den gleitenden Durchschnitt zu berechnen. Passen Sie gemäß Programm die Länge des durchschnittlichen Zeitraums in Fenstern an. Natürlich ist der Durchschnitt der Durchschnitt des Zeitraums mit dem aktuellen Tag als letztem Tag. Es wird nicht für gleitende Durchschnitte verwendet, aber Sie können center = True setzen, um den Durchschnitt auf den aktuellen Tag zu zentrieren.

Berechnung des gleitenden Durchschnitts


#Einstellen des Durchschnittszeitraums
short_term = 5
long_term = 25

#Berechnung des Periodenmittelwerts
df['av_short'] = df['Close'].rolling(window=short_term).mean()#Kurzfristiger Durchschnitt
df['av_long'] = df['Close'].rolling(window=long_term).mean()#Langfristiger Durchschnitt

Erkennt goldenes Kreuz. Im Programm wird die Spalte 'golden_flag' mit dem Aktienkurs des Tages des Goldenen Kreuzes und keinem anderen als diesem Tag gefüllt.

Goldenes Kreuz Erkennung und Illustration


#Goldene Kreuzerkennung
df['golden_flag'] = 0
current_flag=0
previous_flag=1
for i,price in df.iterrows():
    if(price['av_short']>price['av_long']):
        current_flag = 1
    else:
        current_flag = 0
    if(current_flag*(1-previous_flag)):
        df.loc[i,'golden_flag']=price['av_long']
    else:
        df.loc[i,'golden_flag']= None
    previous_flag = current_flag

#Illustriert
df.plot(style=['-'])
plt.scatter(x= df.index,y = df['golden_flag'],marker='s',color='red')
plt.show()

Aktienkursübergang nach dem goldenen Kreuz

Als nächstes wollen wir nach dem Goldenen Kreuz sehen, ob der Aktienkurs steigt. Unter der Annahme, dass der Aktienkurs am Tag des Goldenen Kreuzes 1,0 beträgt, werden wir den Aktienkurs 1 bis 20 Tage später zeichnen. Wenn das Goldene Kreuz zum Zeitpunkt des Kaufs ein Signal ist, sollte der Aktienkurs insgesamt steigen. In Bezug auf das Programm (Transition_after_goldencross.py) gibt es viele Duplikate, daher werde ich nur drei Punkte erläutern.

  1. Nächster Tag basierend auf DataFrame.index Um ein Datum einen Tag später mit dem Datum / Uhrzeit-Modul zu konvertieren, müssen Sie "Tag + Datum / Uhrzeit.Timedelta (Tage = 1)" festlegen, da "Tag + 1" zu einem Fehler führt. Da der Aktienkurs nicht immer am nächsten Tag existiert, habe ich eine Funktion erstellt, die am nächsten Tag den Index des DataFrame zurückgibt, wie unten gezeigt.

Eine Funktion, die am nächsten Tag zurückgegeben wird, wenn der Aktienkurs vorhanden ist


def GetIndexNextDay(df,day):
    for p in range(1,10)://10 ist geeignet
        if((day+datetime.timedelta(days=p)) in df.index):
            next_day = day+datetime.timedelta(days=p)
            return next_day
  1. Von der Liste zum DataFrame Ich habe den Aktienkursübergang als Liste gespeichert, in einen DataFrame konvertiert und geplottet. Von Anfang an dachte ich, ich könnte es mit DataFrame machen, aber ich habe es geschafft, es so zu machen.
  2. Einfallsreichtum der Illustration Es ist schwer, nur den Übergang aller Goldenen Kreuze von 2011 nach 2017 zu erkennen, daher habe ich den Durchschnitt berechnet und ihn prominent (rot) dargestellt. Die auf den obigen drei Punkten basierenden Ergebnisse sind wie folgt. Die schwarze Linie ist der Übergang des Aktienkurses ab dem Datum jeder Erkennung des goldenen Kreuzes. Da der Aktienkurs am Erkennungsdatum 1,0 beträgt, ist am Tag = 0 alles 1,0. Die rote Linie ist der Durchschnitt aller schwarzen Linien. Um ehrlich zu sein, sieht es nicht so aus, als würde es im Durchschnitt steigen. transition_after_goldencross.png

Am Ende

Das Goldene Kreuz persönlich sah beim Kauf nicht wie ein Signal aus. Wenn Sie jedoch genau hinschauen, haben viele Websites und Bücher gefälschte goldene Kreuze. Seien Sie also vorsichtig. Ich habe auch geschrieben, wie man es unterscheidet, aber es ist sinnlich geschrieben und es scheint, dass es nicht einfach zu implementieren ist, also werde ich diesmal hier enden.

Referenzseite

Elementreferenz und Zuordnung im Pandas DataFrame-Index https://hydrocul.github.io/wiki/numpy/pandas-dataframe-ref-index.html

matplotlib.markers http://matplotlib.org/api/markers_api.html#module-matplotlib.markers

Methode zur Zuweisung von Datenrahmen http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

Lassen Sie uns mit Python 2 einen Investitionsalgorithmus entwickeln http://qiita.com/hiroshimoda/items/6337543ba3eb700d0aaa

Quellcode

goldencross_detection.py


import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import pandas as pd

#Einstellen des Zeitraums
start = datetime.datetime(2011, 1, 1)
end = datetime.datetime(2017, 5, 30)

#Aktienerwerb
df = web.DataReader('TM', 'google', start, end)
df = df.loc[:, ['Close']]

#Einstellen des Durchschnittszeitraums
short_term = 5
long_term = 25

#Berechnung des Periodenmittelwerts
df['av_short'] = df['Close'].rolling(window=short_term).mean()#Kurzfristiger Durchschnitt
df['av_long'] = df['Close'].rolling(window=long_term).mean()#Langfristiger Durchschnitt

#Goldene Kreuzerkennung
df['golden_flag'] = 0
current_flag=0
previous_flag=1
for i,price in df.iterrows():
    if(price['av_short']>price['av_long']):
        current_flag = 1
    else:
        current_flag = 0
    if(current_flag*(1-previous_flag)):
        df.loc[i,'golden_flag']=price['av_long']
    else:
        df.loc[i,'golden_flag']= None
    previous_flag = current_flag


#Illustriert
df.plot(style=['-'])
plt.scatter(x= df.index,y = df['golden_flag'],marker='s',color='red')

plt.show()

transition_after_goldencross.py


import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import pandas as pd

def GetIndexNextDay(df,day):
    for p in range(1,10):
        if((day+datetime.timedelta(days=p)) in df.index):
            next_day = day+datetime.timedelta(days=p)
            return next_day

#Aktienerwerb
start = datetime.datetime(2011, 1, 1)#Beginn des Aktienerwerbs
end = datetime.datetime(2017, 5, 30)#Enddatum des Aktienerwerbs
df = web.DataReader('TM', 'google', start, end)
df = df.loc[:, ['Close']]

#Berechnung des Periodenmittelwerts
short_term = 5#Kurzfristige durchschnittliche Länge
long_term = 25#Langfristige durchschnittliche Länge
df['av_short'] = df['Close'].rolling(window=short_term).mean()#Berechnung des kurzfristigen Durchschnitts
df['av_long'] = df['Close'].rolling(window=long_term).mean()#Langfristige Durchschnittsberechnung

#Goldene Kreuzerkennung
golden_day = []
df['golden_flag'] = 0
current_flag=0
previous_flag=1
for i,price in df.iterrows():
    if(price['av_short']>price['av_long']):
        current_flag = 1
    else:
        current_flag = 0
    if(current_flag*(1-previous_flag)):
        df.loc[i,'golden_flag']=price['Close']
        golden_day.append(i)
    else:
        df.loc[i,'golden_flag']= None
    previous_flag = current_flag
    
#Übergang speichern
transitions = []
for day in golden_day:
    day_transition = [df['Close'][day]/df['Close'][day]]
    next_day = day
    for term in range(1,20):
        next_day = GetIndexNextDay(df,next_day)
        day_transition.append(df['Close'][next_day]/df['Close'][day])
    transitions.append(day_transition)
    
#Illustriert
df2 = (pd.DataFrame(ss)).T
df_mean = ((df2.T).mean()).T
df2.plot(legend=False,color = 'black')
df_mean.plot(color = 'red',lw=5)
plt.show()

Recommended Posts

Erkennen Sie das Golden Cross Stock Chart mit Python
Holen Sie sich Aktienkurse und erstellen Sie mit Python Kerzendiagramme
Kerzentabelle mit Python zeichnen
Erkennen Sie Tastenanschläge in Python (tty)
Tastenanschläge in Python erkennen (ohne Eingabe)
Anzeigen des Candlestick-Diagramms in Python (Matplotlib-Edition)
Suchen Sie nach Dateien wie Linux Find in Python
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Führen Sie AzureKinect an Heiligabend in Python aus.
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Anzeigen des Candlestick-Diagramms in Python (Plotly Edition)
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Hinweise zur Verwendung von dict mit Python [Competition Pro]
Hinweis zur Codierung bei LANG = C in Python
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
So schreiben Sie in Error Repoting in Python auf GAE
ABC125_C --GCD auf Blackboard [In Python gelöste Notizen]
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Python unter Windows
Unittest in Python
Twitter mit Python3
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
Python auf Mac
FizzBuzz in Python
Schritt AIC in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Python auf Windbg
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python