[PYTHON] [Cistre] überschreitet MACD ♬

Mir ist aufgefallen, dass ich neulich die MACD-Methode bei verschiedenen Marken ausprobiert habe. Ist das nicht ein bisschen langsam zu signalisieren? ??

Abgesehen von der Tatsache, dass es nicht gut ist, es täglich zu tun, wurde es ursprünglich wie folgt definiert.

MACD = 12-Tage-EMA-26-Tage-EMA
Signal = MACD 9-Tage-EMA
Histogramm = Signal-MACD

Daher ist es ein Beurteilungsstandard, dass es nur notwendig ist, den Kauf und Verkauf des nächsten Tages anhand der täglichen Daten beurteilen zu können. Schauen wir uns als charakteristische Ausgabe das mittlerweile beliebte "ZM" an. 3.png

Es ist ein sehr eintöniges Bild, das sich nach rechts erhebt, und wenn Sie den Anstieg und Abfall gehorsam vorhersagen können, können Sie anscheinend viel Geld verdienen.

* Ein Wort, weil es wie eine dumme Geschichte aussieht, wenn es ein Missverständnis gibt. .. .. "Wenn Sie es kaufen und lange aufbewahren, können Sie in diesem Fall viel Geld verdienen. In Wirklichkeit ist der Hebel jedoch aufgrund der finanziellen Effizienz groß. Daher ist es eine Voraussetzung, dass Sie es nicht mit einer sofortigen Explosion halten können und Geld verlieren." "Diese Marke hat den Hebel verdoppelt. Selbst wenn Sie ihn im Januar gekauft haben, hat er sich jetzt verdreifacht, wenn Sie ihn haben. Das sieht sicher aus, aber das Risiko eines Rückgangs Weil es ungefähr die gleichen gibt ... "

Wenn Sie genau hinschauen, ist der Moment, in dem Sie 0 im Histogramm überschreiten, etwas spät, und wenn die Absenkzeit kurz ist, verkaufen Sie an der Stelle, an der es fast sinkt, und umgekehrt, wenn Sie schnell steigen, kaufen Sie an der Stelle, an der es steigt. Es kann sein. Das ist etwas verschwenderisch. Wenn Sie sicherstellen, dass die Reduzierung oder Erhöhung vor dem Kauf oder Verkauf bestätigt wird, hat dies fast die gleiche Bedeutung wie das menschliche Auge oder Urteil. Hier ist das Ziel der automatische Handel, und die Effizienz und Genauigkeit des Handels sind wesentlich, daher möchte ich die Fähigkeit haben, numerische Schwankungen vorherzusagen.

  • Ich werde hier weiterverfolgen, aber es ist nicht das Hauptthema von heute.

Obwohl es keine Theorie gibt, haben wir diese MACD-Methode verbessert und einen Weg gefunden, um zu einem früheren Zeitpunkt ein Handelssignal zu geben. Die diesmal verwendete Definition lautet wie folgt. ** Wenn Sie dies verwenden, nennen Sie es bitte mu_method **

series ;Daten in chronologischer Reihenfolge
series2, cycle = decompose(series)
MACD2 = Serie2-26 Tage EMA(series2)
Signal2 = MACD2 9-Tage-EMA
Histogramm = Signal2-MACD2
  • Einzelheiten finden Sie im Bonuscode. Mit anderen Worten, die ursprüngliche Datenreihe selbst war etwas verrauscht und der Fehler war zu groß, sodass er am 12. von EMA geglättet wurde. Wenn Sie die Serie jedoch zerlegen, verschwindet das Rauschelement, sodass Sie es fast wie geglättete Daten behandeln können. Darauf basierend werden die 26-Tage-EMA und die MACD berechnet. Infolgedessen gibt die Serie 2, die in der Nähe der Rohdaten auf und ab geht, ein viel schnelleres Kauf- und Verkaufssignal als die am 12. EMAd. Die Ergebnisse sind wie folgt. 2.png

Die GIF-Animation ist wie folgt. Drei Bilder (MACD, MACD des Trends, Mu-Methode) werden wiederholt abgespielt, aber das mit ZM im Titel ist das Bild nach dieser Verbesserung. Im Vergleich zum ursprünglichen MACD verschiebt sich das Signal für mehr als 3 Tage deutlich nach links, was meiner Meinung nach rechtzeitig zum Kauf und Verkauf sein wird.

  • Es scheint, dass Anfang nächster Woche ein Rückgang zu beobachten sein wird. ** Es ist am Freitag den 12. gesenkt ** YahooFinance zm.gif Ich habe den Code als Bonus gesetzt.

Zusammenfassung

  • Das MACD-Handelssignal wurde verbessert, sodass es früher für den tatsächlichen Handel ausgegeben werden kann.

・ Ich frage mich, ob ich es endlich tun werde. ..

Bonus

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import datetime as dt
from pandas_datareader import data
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL

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

def EMA1(x, n):
    #k = 3.45*(n+1)
    a= 2/(n+1)
    return pd.Series(x).ewm(alpha=a).mean()

stock0 = 'ZM'
stock = stock0  #+ '.JP'
start = dt.date(2020,1,1)
end = dt.date(2020,6,13)
df = pd.DataFrame(get_stock(stock, start, end))
date_df=df['Close'].index.tolist()
series = df['Close'].values.tolist()

bunseki = "trend" #series" #cycle" #trend
cycle, trend = sm.tsa.filters.hpfilter(series, 144)
df['Close'] = trend
series2 = df['Close'].values.tolist()

df['Close']=series  #series" #cycle" #trend
df['Close2']=series2
df['y12'] = EMA1(df['Close2'], 12)
df['y26'] =  EMA1(df['Close2'], 26)
df['MACD'] = df['y12'] -df['y26']
df['MACD2'] = df['Close2'] -df['y26']
df['signal2'] = EMA1(df['MACD2'], 9)
df['signal'] = EMA1(df['MACD'], 9)
df['hist_']=df['MACD2']-df['signal2']
date_df=df['Close'].index.tolist()
print(df[len(series)-10:len(series)])

fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 8, 4*2),dpi=200)
ax1.plot(df['Close'],label="series")
ax1.plot(df['Close2'],label="series2")
ax1.plot(df['y12'],label="y12")
ax1.plot(df['y26'],label="y26")
ax2.plot(df['MACD2'],label="MACD2")
#ax2.plot(df['MACD'],label="MACD")
ax2.plot(df['signal2'],label="signal2")
#ax2.plot(df['signal'],label="signal")
ax2.bar(date_df,df['hist_'])
ax1.set_title("{}".format(stock0))
ax1.legend()
ax2.legend()
ax1.grid()
ax2.grid()
ax2.set_ylim(-5,20)
plt.savefig("./stock/{}/newck_ema_df_decompose_%5K%25D_{}_{}now{}.png ".format(stock0,stock,bunseki,start))
plt.pause(1)
plt.close()

Recommended Posts