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
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.
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).
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()
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.
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
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.
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
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