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