「Python上でテクニカル分析を取り入れたい」
「でもどうやってテクニカル分析を取り入れられるのかわからない。教えてエロい人、エロくない人」
この記事ではPythonを使ったテクニカル分析を行う方法を解説します。
プログラミングでテクニカル分析を行うためには、「可能な限り簡単な指標を使ってまずは動かしてみる」ことが大切だと思います。
ですので、いきなり高度な分析は難しいので、今回は難しい計算が不要でありテクニカル分析の中で王道の王道である「移動平均線」をPython上で描写してみましょう。
移動平均線とは、ある一定期間の価格から平均値を計算し、折れ線グラフで表したものです。その日を含めた過去何日間(または何週間)かの価格を毎日計算するため、平均値が移動していくことから、移動平均と呼ばれます。
草猫店長の目次ノート
この記事での目標 ~移動平均線をPythonを使って描写する~

上の赤、緑、黄が“移動平均線”(SMA)です。ビットコインの過去データを線(青)にするのと同時に、ボリンジャーバンドの線(緑と赤)も引いたグラフです。
ローソク足に見慣れているのでグラフが少し見にくいと感じるかもしれませんが、ビットコインの終値だけを時系列で線にしている形式です。
必要なデータとライブラリの準備
事前にグラフを描くために必要なものがあるので解説します。
必要なデータ
ビットコインの過去データが必要です。過去データはCoinbaseの2014年からの日足データを用意したので利用してみてください
ダウンロード手順① URL先ではCSVファイルでダウンロードできないのでGoogleスプレッドシートで開くために画像のようにスプレッドシートを開きます。

ダウンロード手順② 「ファイル→ダウンロード→カンマ区切り値」と移動していきCSVデータとしてダウンロードします。

ダウンロード手順③ ダウンロードできたら自分の使いたいテキストエディタ(VSCode)の同階層にファイルを移動させておきます。


必要なライブラリ
pandas→データを操作するライブラリ
numpy→高速で計算を行うライブラリ
上の3つのPythonにおける定番ライブラリが必要です。
1 |
$ pip install pandas |
1 |
$ pip install numpy |
1 |
$ pip install matplotlib |
上手くインストールできない、インストール中にエラーが発生するという場合は「pandas インストール エラー」のようなキーワードで検索してみましょう。
もしくは、エラーメッセージの1部を切り取って検索すれば同じ現象の人たちの解決策が見つかりやすいです。
CSVを読み込んでみよう
CSVデータの読み込みにはpandasライブラリを使います
1 2 3 4 |
import pandas as pd history = pd.read_csv("./CoinbaseDayHistory.csv", index_col="DateTime") print(history) |
「import pandas as pd」とは “pandas” を “pd” として読み込みます。という意味になります。長ったらしいのでpdに省略しているだけです。
df = pd.read.csv()でデータを指定して読み込んでいます。 index_colはオプションで、ダウンロードしたデータのDateTime行をインデックスにするという意味です。
(index_colを指定しない場合は、0、1、2、3・・・の順番で行の位置を示してくれます。)
出力結果は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ python python_csv_import.py Symbol Open High Low Close Volume BTC Volume USD DateTime 2014-12-01 BTCUSD 300.00 370.00 300.00 370.00 0.05656 1.953000e+01 2014-12-02 BTCUSD 370.00 378.00 370.00 378.00 15.01000 5.675070e+03 2014-12-03 BTCUSD 378.00 378.00 377.01 378.00 0.54660 2.065200e+02 2014-12-04 BTCUSD 378.00 378.00 377.10 377.10 0.01000 3.770000e+00 2014-12-05 BTCUSD 377.10 377.10 377.10 377.10 0.00000 0.000000e+00 ... ... ... ... ... ... ... ... 2019-08-03 BTCUSD 10533.01 10922.08 10508.50 10820.76 9760.62000 1.051404e+08 2019-08-04 BTCUSD 10820.76 11089.74 10572.00 10977.51 11307.70000 1.227909e+08 2019-08-05 BTCUSD 10977.51 11950.00 10977.51 11819.49 22797.97000 2.655526e+08 2019-08-06 BTCUSD 11819.49 12320.40 11187.00 11465.49 22435.30000 2.632932e+08 2019-08-07 BTCUSD 11465.49 11585.40 11366.26 11576.44 1850.68000 2.126275e+07 [1699 rows x 7 columns] |
CSVの不要なデータを削除してみよう
今回の記事で参照するのは「日付(DateTime)」「終値(Close)」の2列だけです。その他は参照しないようにしましょう。
DateTime,Symbol,Open,High,Low,Close,Volume BTC,Volume USD
「日付(DateTime)」「終値(Close)」以外の列は削除しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
import pandas as pd history = pd.read_csv("./CoinbaseDayHistory.csv", index_col="DateTime") del history['Symbol'] del history['Open'] del history['High'] del history['Low'] del history['Volume BTC'] del history['Volume USD'] print(history) |
del history[削除したい列]で不要なデータを消してくれます。
実行結果も貼っておきます。2列になったことが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ python python_csv_import.py Close DateTime 2014-12-01 370.00 2014-12-02 378.00 2014-12-03 378.00 2014-12-04 377.10 2014-12-05 377.10 ... ... 2019-08-03 10820.76 2019-08-04 10977.51 2019-08-05 11819.49 2019-08-06 11465.49 2019-08-07 11576.44 [1699 rows x 1 columns] |
移動平均線の引き方

上の図は完成形です。VSCodeで実行させると別ウィンドウとして上の図が開かれます。
それでは移動平均線を実際に引いてみましょう。(単純移動平均線と呼ばれるもっとも基本的な線を引きます。)
①. 短期線(25日)、中期線(75日)、長期線(200日)の3つの線を引く
②. それぞれの期間中における平均価格を算出する
③. 算出した価格を線にして描写する
上の3つの手順をPythonでコーディングしながら行なっていきましょう。
Python 移動平均線の完成コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import pandas as pd import numpy as np import matplotlib.pyplot as plt history = pd.read_csv("./CoinbaseDayHistory.csv", index_col="DateTime") del history['Symbol'] del history['Open'] del history['High'] del history['Low'] del history['Volume BTC'] del history['Volume USD'] sma = pd.DataFrame() sma['Close'] = history['Close'] sma['Short25'] = sma['Close'].rolling(window=25).mean() sma['Middle75'] = sma['Close'].rolling(window=75).mean() sma['Long200'] = sma['Close'].rolling(window=200).mean() # インデックス(時期)を指定して拾ってみる print(sma['2019-02-01':'2019-08-01']) sma[['Close', 'Short25', 'Middle75', 'Long200']].plot() plt.title('SMA Technical Analysis') plt.ylabel('BTC/USD') plt.show() |
①. 短期線(25日)、中期線(75日)、長期線(200日)の3つの線を引く
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import pandas as pd import numpy as np import matplotlib.pyplot as plt history = pd.read_csv("./CoinbaseDayHistory.csv", index_col="DateTime") del history['Symbol'] del history['Open'] del history['High'] del history['Low'] del history['Volume BTC'] del history['Volume USD'] sma = pd.DataFrame() sma['Close'] = history['Close'] sma['Short25'] = sma['Close'].rolling(window=25).mean() sma['Middle75'] = sma['Close'].rolling(window=75).mean() sma['Long200'] = sma['Close'].rolling(window=200).mean() # インデックス(時期)を指定して拾ってみる print(sma['2019-02-01':'2019-08-01']) sma[['Close', 'Short25', 'Middle75', 'Long200']].plot() plt.title('SMA Technical Analysis') plt.ylabel('BTC/USD') plt.show() |
グランビルの法則についての詳細は省きますが、グランビルと呼ばれるアナリストが提唱した基準は世界中で有名な指標に関した期間になります。
相場は人の意識によって形作られますので、各トレーダーが意識しやすい指標を参考にするという意味合いで25日、75日、200日で線を引きます。
コード上にある rolling(window=指定行) ですが、これはCSVの行をいくつズラすのかと同時にズラした範囲も指定できるコードです。25日、75日、200日分でズラしましょう。
②. それぞれの期間中における平均価格を算出する
sma[‘Short25’] = sma[‘Close’].rolling(window=25).mean()における「mean()」の関数は、平均値を計算してくれる関数です。
具体的に何をしているのか示します。ローソク足の終値を5日分だけ平均価格を算出してみましょう。
1日目 100万
2日目 120万
3日目 150万
4日目 110万
5日目 90万
という終値だったとすると上の5日の平均価格は114万円です。つまり移動平均線のある一点は114万円の地点となります。
25日、75日、200日で点を繋げていって、線にします。
実際に平均値を算出していけているのか試しに print(sma[‘2019-02-01′:’2019-08-01’]) で確認しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ python python_csv_import.py Close Short25 Middle75 Long200 DateTime 2019-02-01 3437.50 3588.3752 3736.207067 5554.88395 2019-02-02 3468.43 3567.3580 3719.339467 5535.65105 2019-02-03 3414.78 3543.7844 3706.880133 5515.83000 2019-02-04 3409.57 3535.1224 3691.739600 5495.52780 2019-02-05 3428.40 3526.8308 3680.602800 5475.99750 ... ... ... ... ... 2019-07-28 9533.00 10674.2048 9604.251733 6316.58380 2019-07-29 9495.01 10608.5652 9621.474267 6345.41230 2019-07-30 9589.01 10551.9452 9644.274933 6374.21235 2019-07-31 10087.30 10505.9264 9680.589733 6406.18955 2019-08-01 10405.94 10463.1872 9722.503600 6439.08880 [170 rows x 4 columns] |
③. 算出した価格を線にして描写する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import pandas as pd import numpy as np import matplotlib.pyplot as plt history = pd.read_csv("./CoinbaseDayHistory.csv", index_col="DateTime") del history['Symbol'] del history['Open'] del history['High'] del history['Low'] del history['Volume BTC'] del history['Volume USD'] sma = pd.DataFrame() sma['Close'] = history['Close'] sma['Short25'] = sma['Close'].rolling(window=25).mean() sma['Middle75'] = sma['Close'].rolling(window=75).mean() sma['Long200'] = sma['Close'].rolling(window=200).mean() # インデックス(時期)を指定して拾ってみる print(sma['2019-02-01':'2019-08-01']) sma[['Close', 'Short25', 'Middle75', 'Long200']].plot() plt.title('SMA Technical Analysis') plt.ylabel('BTC/USD') plt.show() print(history) |
sma[[‘Close’, ‘Short25’, ‘Middle75’, ‘Long200’]].plot()→指定の4列を描写します。
plt.title(‘SMA Technical Analysis’)→タイトルをつけます
plt.ylabel(‘BTC/USD’)→Y軸のラベルを指定します
plt.show()→ここまでの条件付けで実際に描写します。
実行すると下のグラフが現れるはずです。

ビットコインのテクニカル分析をプログラミングで行う方法 まとめ

「描写しただけで売買はどうするの?」って思った人もいるかと思います。
実際に売買へ繋げるためにもう少しテクニカル分析で線を引いてみる実践をやってみましょう。
次はボリンジャーバンドの引き方の解説です。ビットコイン過去データでボリンジャーバンドを引く方法の記事
を読んでみてください。
良かったらシェアしてね♪ /
VSCodeの使い方とダウンロードはこちらのページ(ビットコイン板情報(価格)をPythonで取得する方法)を参考にしてほしいにゃあ。