非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】為替チャートのゴールデンクロス・デッドクロスを明示する

   

以下の記事で為替チャートから簡単に移動平均を算出する方法について解説しました。

せっかく2つの移動平均線(SMA5、SMA21)を描いたので、今回は交わる点(ゴールデンクロス・デッドクロス)をデータ上で明示できるようにしたいと思います。投資チャートにおいてこれらクロスがトレードする上で重要な位置になるので、そのタイミングをデータ上ではっきり示すことがとても大事になります。

 

以下が完成形となります。SMA5>SMA21は「1」、SMA5<SMA21は「-1」とした場合以下のようなグラフを描きます。この切り替わりのラインがちょうどクロスする点を示しますのでデータ解析の際に簡単に捕まえることができます。

 

それではソースコードを紹介します。np.whereで条件に応じた値(-1, 1)を振り分けます。np.whereの詳細は前回の記事をご覧ください

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

fname = 'csv/DAT_ASCII_USDJPY_M1_2022.csv'
book = pd.read_csv(fname, header=None, sep=";")

data = pd.DataFrame()
data['Date'] = book[0]
data['Rate'] = book[1]
# 移動平均線(SMA5)
data['SMA5'] = book[1].rolling(7200).mean()
# 移動平均線(SMA21)
data['SMA21'] = book[1].rolling(30240).mean()
# 条件に応じた-1, 1への振り分け
data['POS'] = np.where(data['SMA5'] > data['SMA21'],1,-1)

x = np.array(range(len(book)))
y1 = np.array(data['Rate'])
y2 = np.array(data['SMA5'])
y3 = np.array(data['SMA21'])
y4 = np.array(data['POS'])

fig, ax1 = plt.subplots(figsize=(10,6))
ax2 = ax1.twinx()
ax1.plot(x, y1)
ax1.plot(x, y2)
ax1.plot(x, y3)
ax2.plot(x, y4)
plt.show()
 

 

スポンサーリンク

 - Python, システムトレード