見出し画像

【初心者向け】株価がボリジャーバンドを突破しているか判定するPythonコード

(追記)
初心者向けに、今すぐビットコイン取引の自動売買を始められるスターター・プログラムを無料公開しました。
コピペでも一応動くので、良かったら見てみてください↓

仮想通貨をPythonで自動売買する方法を初心者向けに解説

===追記終わり===

Pythonを使って自動売買botを作りたいというニーズは結構あるみたいですね。
かくいう僕も大学時代に仮想通貨の自動売買にチャレンジして失敗した過去があります。
参考)ビットコイン自動売買bot作成失敗の思い出

最終的に稼ぐのは難しかったですが、実装自体はとても楽しかったです。
Pythonの良い勉強になりますしね。

さて先日も、twitterで「ボリジャーバンドを使って自動売買botの実装を教えて欲しい」的な声が届きました。
そこで今回の記事ではその実装の一部を行います。

やること
時系列データ(株価、為替、仮想通貨etcの価格)がボリジャーバンドの指定のσ区間を突破しているかを判定する
やらないこと
・リアルタイムデータの取得
・実際の売買指示
(これらは各自の環境や対象資産によって実装が異なるため)


実際の売買時は、自分で作った売買プログラムと組み合わせてやってみて下さい。

なお、ボリジャーバンドってなんやねんって方は、こちらを参考してください。
簡単に言うと、「現在の価格が過去n日間の平均に対してどれくらい乖離しているか?」を参考に売買するかしないかを決める手法っすね。

さて実際のコードです。
(途中出てくるdata.csvというファイルはこの記事のものと同じ形式です。)

import pandas as pd


#ボリジャーバンドの期間は20日とすることが多い
duration = 20

#移動平均からの2σ区間以上の上側乖離に注目することにする
sigma = 2

#今回はデモなので、あらかじめ用意しておいたcsvファイル(data.csv)からデータ読み込む
#実際は、リアルタイムでデータ取得しながらデータフレームを逐次編集していく形になる(たぶん)
#初期状態では、データはDATE,targetの2つの列を持つ。それぞれ日付と価格を指す
df = pd.read_csv("data.csv")
price_column_name = "target"

#移動平均を計算
df["MSE"] = df[price_column_name].rolling(window=duration).mean()

#標準偏差を計算
df["std"] = df[price_column_name].rolling(window=duration).std()

#注目しているσ区間の境界線(今回は上に2σ分)
df["limit"] = df["MSE"]+sigma*df["std"]

#最新の値段が2σ区間を超えているか判定
#今回は「2σ以上高い値なら上がり過ぎなので売るべき」みたいなノリを想定
I_should_sell = df.iloc[-1][price_column_name]>df.iloc[-1]["limit"]

if I_should_sell:
   #実際はここに売却用のコードを書く
   pass
else:
   print("売らない")

こんなに少ない行数で行けるのはpython神(というかpandasが神)


関連記事)
MACDをpythonで計算してみる簡易コード


ご覧いただきありがとうございます! 少しでもサポートいただければモチベーションになります!