Python株の量的取引(4)---ゴールデンフォークとデッドフォーク

純粋に世界を救う心、それは終わりです。ゴウは世界を魅了する心、つまり音楽を持っています。純粋な愛は終わりです。ちょっとした皮肉は歌です。他人への純粋な敬意は終わりです。ちょっとした皮肉は音楽です。

ゴールデンチャとシチャとは

前回の記事では、移動平均について触れました。ゴールデンクロスを理解するには、別の概念である移動平均クロスオーバーを理解する必要があります。これは、取引時間が進むにつれて、異なる期間の移動平均が互いに交差する現象を指します。

最も一般的なのは、私たちが描いた5日間の移動平均と10日間の移動平均です。これらが交差する場合、それは移動平均クロスオーバー現象と呼ばれます。金色の十字は、短期移動平均が長期移動平均の下から長期移動平均と交差するときに形成される交差点を指します。

このようなゴールデンクロス現象が発生した場合、市場が短期から長期に転じることを示す指標(強気)と見なすことができます。逆に、短期移動平均が上昇から長期移動平均を破るまでの場合、それをデッドフォークと呼び、市場と見なすことができます。ロングからショート(弱気)への変化の指標。

以下に示すように、最初に画像を見てみましょう。
ここに画像の説明を挿入
上の画像は、最初のブログ投稿のK線グラフと移動平均グラフでもあります。オレンジは10日間の移動平均、青色は5日間の移動平均です。平均。その中で、1でマークされた交差点は、強気である長期の10日間の移動平均(ゴールデンクロス)を上向きに突破する短期の5日間の移動平均です。2でマークされた交差点は、5日間の短期移動平均を下回る10日間の長期移動平均であり、弱気になります(ダイクロス)。

ただし、GoerTekの写真から、1、2の交差点は2番目の市場に沿っているだけです。それどころか、3番目の交差点は何日も続けて上昇しました。したがって、株式の場合、この種のゴールデンフォークだけを見るのは意味がなく、他の指標と組み合わせて観察する必要があります。

ゴールデンチャとシチャの運営

ここでは、株式のデータを再取得する必要があります。結局、移動平均では、1か月のデータはほとんど参照されません。少なくとも3か月の株式データを取得する必要があります。具体的なコードは次のとおりです。

import akshare as ak
df = ak.stock_zh_a_daily(symbol="sz002241", start_date="20200101", end_date="20210115",
                         adjust="qfq")
df.to_excel("歌尔股份year.xlsx")

ここでは、Goertekの3か月のデータを取得し、その20日と30日の移動平均を描画します。具体的なコードは次のとおりです。

df = pd.read_excel("歌尔股份year.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
df["SMA20"]=df["close"].rolling(20).mean()
df["SMA30"]=df["close"].rolling(30).mean()
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
ax.plot(df["date"],df["SMA20"])
ax.plot(df["date"],df["SMA30"])
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.show()

実行後、表示される効果図は次のとおりです。
ここに画像の説明を挿入
上の図に示すように、一般的に言って、この種の図は非常に面倒に見えます。結局のところ、交差点を示すものではありません。交差点が多い場合、自分で見つけるのに時間がかかることがよくあります。株価のグラフをより直感的にするために、交差点に印を付ける必要があります。ただし、マークを付ける前に、交差点の場所を見つける必要があります。

コードは次のとおりです。

diff=np.sign(df["SMA20"]-df["SMA30"])

sign()は、PythonのNumpyで番号記号(数値の前の記号)を取得する関数です。上のグラフを見ると、SMA20がSMA30を上回っている場合、差は正であり、逆もまた同様であることがわかります。

減算後に取得されたシーケンス差分については、DataFrame.shift()関数を使用して1つの値を右にシフトし、新しいシーケンスを取得してから、シーケンスを減算して符号を取得すると、2つの移動平均のクロスシグナルを取得できます。 。符号が負の場合は死んだ十字であり、符号が正の場合は金色の十字です。対応するコードは次のとおりです。

signal=np.sign(diff-diff.shift(1))
down_cross=df[signal<0]
up_cross=df[signal>0]

金色のフォークと死んだフォークを描く

次に、ゴールデンフォークとデッドフォークを描画しましょう。具体的なコードは次のとおりです。

#标记金叉
for key, val in df.items():
    for index, today in up_cross.iterrows():
        x_posit = df.index.get_loc(index-1)
        ax.annotate("{}\n{}".format("金叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-up_cross["SMA20"].mean()+100), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))
#标记死叉
for key, val in df.items():
    for index, today in down_cross.iterrows():
        x_posit = df.index.get_loc(index-1)
        ax.annotate("{}\n{}".format("死叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-down_cross["SMA20"].mean()-100), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="g"))

ここでは、注釈を使用して画像上の交差点をマークします。特定のコードは、分類交差点を今すぐトラバースしてから、別々に描画することです。

完全なコードは次のとおりです。

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import numpy as np

df = pd.read_excel("歌尔股份year.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
df["SMA20"] = df["close"].rolling(20).mean()
df["SMA30"] = df["close"].rolling(30).mean()
diff = np.sign(df["SMA20"] - df["SMA30"])
signal = np.sign(diff - diff.shift(1))
down_cross = df[signal < 0]
up_cross = df[signal > 0]
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
plt.rcParams['font.sans-serif'] = ['SimHei']
ax.plot(df["date"], df["SMA20"])
ax.plot(df["date"], df["SMA30"])
for key, val in df.items():
    for index, today in up_cross.iterrows():
        x_posit = df.index.get_loc(index-1)
        ax.annotate("{}\n{}".format("金叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-up_cross["SMA20"].mean()+100), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))

for key, val in df.items():
    for index, today in down_cross.iterrows():
        x_posit = df.index.get_loc(index-1)
        ax.annotate("{}\n{}".format("死叉",today["date"]), xy=(x_posit, today["SMA20"]),xytext=(-30,-down_cross["SMA20"].mean()-100), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="g"))
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.show()

実行後、表示される効果は次の図のようになります。
ここに画像の説明を挿入
注意深い読者は、時間を取得すると、インデックスを1つ前に移動することを確認する必要があります(index-1)。これは、ゴールデンフォークの計算に便利なためです。デッドフォークでは、関数shiftを使用して1つの値を右にシフトします。矢印を交差点に対応させるには、逆の時点に戻る必要があります。(3か月のデータには交差が多すぎるため、ここでは移動平均の後半のみを使用します)

ここではゴールデンフォークとデッドフォークについて説明します。次の記事では、株価ギャップの可視化について紹介します。

おすすめ

転載: blog.csdn.net/liyuanjinglyj/article/details/112773191