Python株式定量取引(1)--- K折れ線グラフ、移動平均、取引量の描画

先祖の美徳から遠く離れて、両親の悲しみを考え、国に返済することの恵みを考え、家族を作ることの祝福を考え、外の人々を助けることの緊急性を考え、余暇の悪を考え、自己内部。

序文

2020年は強気相場の出発点と言われています。明らかに、ほとんどのプログラマーは生涯データを扱っており、プログラマーはデータ処理とチャート描画をマスターするだけでよいので、プログラマーには絶対的な利点があります。株式市場で良い仕事をすることができます。

ただし、定量的な株取引の列は、基本の紹介ではなく、株式に関連する知識のみです。したがって、matplotlibチャートの描画とnumpy、pandasライブラリについては、あまり紹介しません。この種のブログを読む必要がありますが、これら3つの基本的な知識も必要です。以下では、トピックに直接移動します。

株式データを取得する

Python言語の場合、akshare、baostock、tushareライブラリなど、株式を取得するための多くのライブラリがあります。また、これら3つの株式データ取得ライブラリは類似しているため、ここでのエディタの後続の章はすべて、株式データ取得用のakshareライブラリに基づいています。言うまでもありませんが、過去1か月の株価データを取得する方法を見てみましょう。コードは次のとおりです。

import akshare as ak
def get_codeData(code="sz002241"):
    df = ak.stock_zh_a_daily(symbol=code, start_date="20201203", end_date="20210115",
                                                          adjust="qfq")
    df.to_excel("歌尔股份k.xlsx")

上記のコードに示すように、stock_zh_a_dailyメソッドを使用して一定期間のデータを取得します。ここでの日付は、必要に応じて調整できます。たとえば、start_date =“ 20200101”およびend_date =“ 20210101”を設定して株式を取得します。 1年間のデータ。

銘柄コードはshとszに分けられます。szは深セン株を表します。すべての深セン株にはszを付ける必要があります。たとえば、ここのGoertek株はsz002241です。同様に、shは上海証券取引所の株式であり、上海証券取引所のすべての株式は、その前にshを付ける必要があります。

ここでは、下の図に示すように、取得した株式データ形式を見てみましょう。
ここに画像の説明を挿入
日付:取引開始日:
始値を表します
高値:その
日の最高価格最低:その日の最低価格
終値:終値その
日の価格ボリューム:その日の取引ボリューム(元)
outstanding_share:現在の株式(株式)
回転率:回転率

データを取得したので、K線グラフを描きましょう。

ローソク足チャートを描く

Pythonでは、K線グラフを描画するにはmpl_financeライブラリが必要です。このライブラリには、K線グラフを描画する4つの方法があります。ここでは、そのうちの1つを紹介します。コードは次のとおりです。

import mpl_finance as mpf
import matplotlib.pyplot as plt
import pandas as pd

#创建绘图的基本参数
fig=plt.figure(figsize=(12, 8))
ax=fig.add_subplot(111)

#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
#显示出来
plt.show()

このコードを実行すると、次のレンダリングが表示されます。
時間のないローソク足チャート
このローソク足チャートに問題があります。つまり、X座標軸が表示時間ではなく数値です。これは、ローソク足チャートの描画方法が原因です。 X軸を提供しませんパラメータでは、次の数値を時間に置き換える方法は?まず、コードの一部を見てみましょう。

import matplotlib.ticker as ticker
#将股票时间转换为标准时间,不带时分秒的数据
def date_to_num(dates):
    num_time = []
    for date in dates:
        date_time = datetime.strptime(date, '%Y-%m-%d')
        num_date = date2num(date_time)
        num_time.append(num_date)
    return num_time

#创建绘图的基本参数
fig=plt.figure(figsize=(12, 8))
ax=fig.add_subplot(111)

#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
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()

ここでは、2つのメソッドを定義しました。最初のメソッドdate_to_numは、主に取得した時刻データを標準の日付データに変換するために使用されます。2番目のメソッドは、Xの値に従って時刻値を置き換える方法です。

その中で、set_major_formatterメソッドは、値を時間値に置き換える操作ライブラリであり、plt.setupの機能は、X軸ラベルの傾きを45度と右揃えに設定することです。実行後、次の図に示すように、K線グラフが完全に表示されます。
完璧なローソク足チャート

移動平均チャート

K線グラフを実装しましたが、実際、ほとんどの株式取引ソフトウェアのK線グラフは、一般的に使用される5日移動平均、10日移動平均、および10日移動平均などの移動平均でマークされていることを発見しましたか。 30移動平均。したがって、ローソク足チャートに移動平均を追加する必要があります。移動平均を計算する方法は次のとおりです。

df["SMA5"] = df["close"].rolling(5).mean()
df["SMA10"] = df["close"].rolling(10).mean()
df["SMA30"] = df["close"].rolling(30).mean()

3行のコードで株式の移動平均値を取得できます。次に、上記の斧を使用して移動平均を描画できます。追加されたコードは次のとおりです。

ax.plot(np.arange(0, len(df)), df['SMA5'])  # 绘制5日均线
ax.plot(np.arange(0, len(df)), df['SMA10'])  # 绘制10日均线
ax.plot(np.arange(0, len(df)), df['SMA30'])  # 绘制30日均线

ここでは、X軸も数値に設定されており、これら2つのコードが上記のK線グラフコードに追加され、X軸は当然時間に置き換えられます。実行後の表示効果は下図のようになります。
K線グラフと移動平均グラフ
ここでは、5日間の移動平均が青、10日間の移動平均がオレンジ、30日間の移動平均が緑色です。色を設定する必要がある場合自分で、各移動平均の描画方法に色パラメータを追加できます。

注意深い読者は、30日間の移動平均には最後のセグメントしかないことを確認する必要があります。これは、過去29日間が30日未満であり、移動平均を計算できないためです。5日間と10日間の移動平均についても同じことが言えます。 。

ボリューム

最後に、ボリュームもプロットする必要があります。ほとんどの株取引ソフトウェアでは、上部がK線グラフで、下部が取引量に対応しているため、データを比較するとデータの変化を視覚的に確認できます。

ただし、上にK線グラフがあるため、同じキャンバスに2つの画像があり、それらは同じX軸を共有しているため、基本的なパラメーターを変更する必要があります。コードは次のとおりです。

import mpl_finance as mpf
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import numpy as np
#创建绘图的基本参数
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(15, 10))
ax1, ax2 = axes.flatten()

#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax1, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
def format_date(x, pos=None):
    if x < 0 or x > len(df['date']) - 1:
        return ''
    return df['date'][int(x)]
df["SMA5"] = df["close"].rolling(5).mean()
df["SMA10"] = df["close"].rolling(10).mean()
df["SMA30"] = df["close"].rolling(30).mean()
ax1.plot(np.arange(0, len(df)), df['SMA5'])  # 绘制5日均线
ax1.plot(np.arange(0, len(df)), df['SMA10'])  # 绘制10日均线
ax1.plot(np.arange(0, len(df)), df['SMA30'])  # 绘制30日均线
ax1.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
#显示出来
plt.show()

ここでは、描画キャンバスを2行1列に設定します。同時に、上に描画されたすべてのデータをax1に変更して、移動平均とローソク足チャートが最初のサブグラフに描画されるようにします。

次に、ボリュームをプロットする必要がありますが、一般的な株取引ソフトウェアは、上昇日のボリュームを赤で設定し、下降ボリュームを緑でプロットすることを知っています。したがって、最初に行う必要があるのは、取得した株式データをその日の変動に応じて分類することです。具体的なコードは次のとおりです。

red_pred = np.where(df["close"] > df["open"], df["volume"], 0)
blue_pred = np.where(df["close"] < df["open"], df["volume"], 0)

上記のコードに示されているように、np.where(condition、x、y)でデータをフィルタリングします。ここでは、条件が満たされている場合はXが出力され、条件が満たされていない場合はYが出力されます。このようにして、ボリュームの上下のデータを分類します。

最後に、ヒストグラム法を使用してボリュームを直接描画します。具体的なコードは次のとおりです。

ax2.bar(np.arange(0, len(df)), red_pred, facecolor="red")
ax2.bar(np.arange(0, len(df)), blue_pred, facecolor="blue")

これらの4行すべてのコードをplt.show()コードの前に追加します。

実行後の出力効果チャートは次のとおりです
K折れ線グラフ、移動平均とボリューム
。K折れ線グラフ、移動平均チャート、取引量はこちらです。次の記事では、オシレーターKDJの関連知識を紹介します。

おすすめ

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