Pythonの定量的株取引(3)---トレンドインジケーターMACD

祝福の基盤である自分に謙虚に見下します。空気に満ちている人は遠隔武器であってはならず、縦の髪を持っていることは無意味です。

MACDとは

MACDのフルネームは移動平均収束と発散です。これは、株式市場でよく言及される収束と発散の平滑化移動平均です。1979年にGeralAppelによって最初に提案されました。これは、高速線DIF、低速線DEA、および赤と緑のヒストグラムで構成されるトレンドインジケーターに属しています。

その中で、DIFとDEAはX軸を中心軸とする2本の線であり、ヒストグラムはDIFからDEAを差し引いて得られます。MACDの赤と緑の列の収縮を補助的な指標として使用して、株式市場。したがって、MACD図面で最も重要なことは、DIFとDEAを取得することであると結論付けることができます。

このうち、DIFは、終値の短期指数移動平均EMA1と長期指数移動平均EMA2を差し引いたものです。DEAに関しては、これはDIF値の二次的な動きの平滑化にすぎず、主に変化の観察を支援するために使用されます。

理論的には、上昇を続ける株式市場では、短期のEMA1ラインが長期のEMA2ラインを上回り、それらの間の正の偏差(+ DIF)がますます大きくなり、DIF距離DEAも大きくなります。大きくなり、ヒストグラムも拡大します。逆に、加速された下降では、負の偏差補間(-DIF)はますます小さくなります。市場が逆転すると、DIFとDEAの間の距離は徐々に減少します。つまり、よく言われる指標には偏差があります。これは、株価の2回目の上昇/下降に対応しますが、最初の最高点を超えています。株価のラウンド/最低点ですが、2回目の運用の運動エネルギーは1回目のラウンドの運動エネルギーよりも低く、トレンドが1日の終わりにあることを示しています。

MACDインジケーターの計算

MACDインジケーターの計算は4つのステップに分かれています。

(1)前述のように、MACDはDIF、DEA、ヒストグラムで構成されており、そのうちDIFはEMA1とEMA2を引いたものです。したがって、最初にEMA1とEMA2の値を計算する必要があります。EMAは通常の移動平均とは異なり、指数加重移動平均です。つまり、EMA1のウィンドウ期間は12日、EMA2のウィンドウ期間は26日です。次のように計算されます。

EMA1(12日の終値の移動平均)= EM1(12)前日の11/13 +今日の終値2/13

EMA2(26日間の終値移動平均)=前日のEMA2(26)25/27 +本日の終値2/27

ここで、コードを介してこれら2つの値を直接計算します。具体的な手順は、次のとおりです。

EMA1=df["close"].ewm(span=12, adjust=False).mean()
EMA2=df["close"].ewm(span=26, adjust=False).mean()

(2)EMA1とEMA2を取得した後、DIFとDEAの値を計算できます。通常、DEAウィンドウ期間は9日で、具体的な式は次のとおりです。

DIF(差分値)= EMA1-EMA2

DEA(平均偏差)=前日のDEA8 / 10 +今日のDIF2 / 10

Pythonコードに置き換えると、次のようになります。

DIF=EMA1-EMA2
DEA=DIF.ewm(9,adjust=False).mean()

(3)最後に、ヒストグラムはDIFとDEAを介して取得されます。具体的な式は、次のとおりです。

BAR(バー値)= 2 *(DIF-DEA)

コードに置き換えると、次のようになります。

BAR=2*(DIF-DEA)

しかし、他のストックソフトウェアのヒストグラムは一定のレイヤーではなく、赤と緑であることがわかりました。したがって、ここでは、赤と緑のヒストグラムを表示するためにBARの値も分類する必要があります。コードは次のように表示されます。

red_bar=np.where(BAR>0,BAR,0)
blue_bar=np.where(BAR<0,BAR,0)

MACDチャートを描く

MACDを描画するためのすべての値を取得したので、MACDインジケーターチャートを直接描画できます。完全なコードは次のとおりです。

import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime

fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)

df = pd.read_excel("歌尔股份k.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
EMA1=df["close"].ewm(span=12, adjust=False).mean()
EMA2=df["close"].ewm(span=26, adjust=False).mean()
DIF = EMA1 - EMA2
DEA = DIF.ewm(span=9, adjust=False).mean()
BAR = 2 * (DIF - DEA)

red_bar = np.where(BAR > 0, BAR, 0)
blue_bar = np.where(BAR < 0, BAR, 0)

ax.plot(np.arange(0, len(df)), DIF)
ax.plot(np.arange(0, len(df)), DEA)

ax.bar(np.arange(0, len(df)), red_bar, color="red")
ax.bar(np.arange(0, len(df)), blue_bar, color="blue")
ax.xaxis.set_major_locator(ticker.MaxNLocator(20))

def format_date(x, pos=None):
    if x < 0 or x > len(df['date']) - 1:
        return ''
    return df['date'][int(x)]

ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
plt.title("MACD")
plt.show()

実行後、得られた結果を次の図に示し
MACDチャート
ます。ここではMACDについて説明し、次の記事ではJinchaとSichaを紹介します。

おすすめ

転載: blog.csdn.net/liyuanjinglyj/article/details/112755758
おすすめ