【시스트레】MACD를 넘는♬

요전날의 MACD 수법을 여러가지 유명 상표로 시험하고 있어 눈치챘다.
이거 좀 신호 나오는데 늦겠지? ?

일발로 하는 것이 좋지 않다고 하는 것은 두고, 원래 이하의 정의였다.
MACD=12日EMA-26日EMA
Signal=MACDの9日EMA
ヒストグラム=Signal-MACD

그러니까, 일족의 데이터로 다음날의 매매의 판단을 할 수 있으면 좋다고 하는 정도의 판단 기준이다.
특징적인 출력으로서 지금은 하는 'ZM'을 보자.


매우 단조롭게 오른쪽 어깨 오르는 그림이며, 솔직히 올리거나 내릴 것을 예측할 수 있으면 큰 벌 수 있다고 한다.
※덧붙여 오해가 있으면 바보 같은 이야기로 보이므로 한마디. . . 「구입해 계속 가지고 있으면 이 경우는 돈을 벌 수 있지만, 실제로는 자금 효율로 레바가 나름대로 크기 때문에 순간의 폭하로 가져갈 수 없게 손절이 되는 상황이 전제의 이야기입니다」 「이 유명 상표다 라고 레바 2배로 갖고 있기 때문에, 1배로 1월에 구입했다고 해도 지금까지 가지고 있으면 현재 3배가 되고 있습니다.이것이 안전하게 보입니다만, 내리는 리스크도 거의 같은 정도 있으니까...」

곳이 잘 보면, 히스토그램의 0을 가로지르는 순간이 조금 타이밍적으로 느리고, 낮추기의 기간이 짧으면 거의 내려버린 곳에서 팔고, 반대로 상승이 빠르면 올라 버린 곳에서 사서 있을 수 있습니다.
이것은, 조금 아무것도 없다. 확실히 낮추거나 인상을 확인하고 나서 매매를 한다면 거의 인간의 눈이나 판단과 같은 의미밖에 없다.
여기서는 목표는 자동 매매이며, 매매의 효율과 정밀도가 필수이기 때문에 역시 수치 변동을 시뮬레이션한 예측 능력을 원한다.
※여기는 여기에서 추구하지만 오늘의 주제는 아니다

그래서 이론이 있는 것은 아니지만, 이 MACD 수법을 개선해 보다 빠른 단계에서 매매 시그널을 내는 궁리를 했다.
이번에 사용하는 정의는 다음과 같다.
※ 이것을 사용할 때는 mu_method (무메소드)라고 부릅니다.
series ;時系列データ
series2, cycle = decompose(series)
MACD2 =series2-26日EMA(series2)
Signal2=MACD2の9日EMA
ヒストグラム=Signal2-MACD2

※자세한 것은 덤의 코드 참조
즉, 전 데이터 시리즈는 그 자체라고 조금 노이즈가 있어 오차가 너무 커서 12일 EMA 해 평활화하고 있었다.
그러나 시리즈를 decompose하면 노이즈 요소가 사라지므로 거의 평활화된 데이터처럼 취급할 수 있다.
그것을 바탕으로 26일 EMA나 MACD를 계산한다.
그 결과, 12일 EMA한 것에 비하면, 생 데이터에 가까운 근처에서 업다운하는 series2 쪽이 훨씬 빠른 매매 시그널을 내 준다.
결과는 다음과 같다.


gif 애니메이션으로하면 다음과 같습니다.
3장의 화상(MACD, trend의 MACD, mu-method)을 반복해서 재생하고 있지만, 타이틀에 ZM과 나오는 것이 이번 개선 후의 그림이다. 오리지널의 MACD에 비교하면, 분명히 3일 이상 신호가 왼쪽으로 시프트해 이것이라면 매매에 늦을 것이라고 생각한다.
※ 다음주 일찍 하락 장면이 보일 것 같다
12일 금요일에 내려간다
YahooFinance

코드는 덤으로 놓았다.

요약



・MACD의 매매 시그널이 실제의 매매에 시간에 맞도록 빨리 낼 수 있도록 개선했다

· 드디어 할까. .


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

좋은 웹페이지 즐겨찾기