[PYTHON] [Cistre] Dépasse la MACD ♬

J'ai remarqué que j'avais essayé la méthode MACD l'autre jour avec différentes marques. N'est-ce pas un peu lent à signaler? ??

Outre le fait qu'il n'est pas bon de le faire au quotidien, il a été défini à l'origine comme suit.

MACD = EMA de 12 jours-EMA de 26 jours
Signal = MACD EMA 9 jours
Histogramme = Signal-MACD

Par conséquent, c'est un critère selon lequel il est seulement nécessaire de pouvoir juger des achats et des ventes du lendemain à partir des données quotidiennes. Comme sortie caractéristique, jetons un coup d'œil au désormais populaire «ZM». 3.png

C'est une image très monotone qui monte vers la droite, et si vous pouvez prédire la montée et la chute avec obéissance, il semble que vous puissiez gagner beaucoup d'argent.

* Un mot parce que ça ressemble à une histoire stupide s'il y a un malentendu. .. .. "Si vous l'achetez et le gardez longtemps, vous pouvez gagner beaucoup d'argent dans ce cas, mais en réalité, le levier est grand car il est dû à l'efficacité financière, c'est donc une prémisse que vous ne pouvez pas le tenir avec une explosion instantanée et vous perdrez de l'argent." «Cette marque a doublé le levier, donc même si vous l'avez achetée en janvier, elle a maintenant triplé si vous l'avez. Parce qu'il y en a à peu près les mêmes ... "

Si vous regardez de près, le moment où vous franchissez le 0 dans l'histogramme est un peu tardif, et si la période de descente est courte, vous vendez à l'endroit où il descend presque, et inversement, si vous montez rapidement, vous achetez à l'endroit où il monte. Il peut y avoir. C'est un peu de gaspillage. Si vous vous assurez de confirmer la réduction ou l'augmentation avant d'acheter ou de vendre, cela a presque la même signification que l'œil humain ou le jugement. Ici, l'objectif est le trading automatique, et l'efficacité et la précision du trading sont essentielles, alors j'aimerais avoir la capacité de prédire les fluctuations numériques.

  • Je vais poursuivre ici, mais ce n'est pas le sujet principal d'aujourd'hui.

Par conséquent, bien qu'il n'y ait pas de théorie, nous avons amélioré cette méthode MACD et conçu un moyen d'émettre un signal de trading à un stade plus précoce. La définition utilisée cette fois est la suivante. ** Lorsque vous utilisez ceci, veuillez l'appeler mu_method **

series ;Données par ordre chronologique
series2, cycle = decompose(series)
MACD2 = series2-26 jours EMA(series2)
Signal2 = MACD2 EMA 9 jours
Histogramme = Signal2-MACD2
  • Reportez-vous au code bonus pour plus de détails. En d'autres termes, la série de données d'origine elle-même était un peu bruyante et l'erreur trop importante, elle a donc été lissée par l'EMA le 12. Cependant, si vous décomposez la série, l'élément de bruit disparaît, vous pouvez donc le traiter presque comme des données lissées. Sur cette base, l'EMA et la MACD de 26 jours sont calculées. En conséquence, series2, qui monte et descend près des données brutes, donne un signal d'achat et de vente beaucoup plus rapide que celui qui était EMAd le 12. Les résultats sont les suivants. 2.png

L'animation gif est la suivante. Trois images (MACD, MACD de tendance, méthode mu) sont lues à plusieurs reprises, mais celle avec ZM dans le titre est l'image après cette amélioration. Par rapport au MACD d'origine, le signal se déplace clairement vers la gauche pendant plus de 3 jours, ce qui, je pense, sera à temps pour l'achat et la vente.

  • Il semble qu'une baisse sera observée au début de la semaine prochaine. ** Il est abaissé le vendredi 12 ** YahooFinance zm.gif J'ai mis le code en bonus.

Résumé

-Amélioration du signal de trading MACD afin qu'il puisse être émis plus tôt pour le trading réel.

・ Je me demande si je vais enfin le faire. ..

prime

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