PythonでビットコインのCCI(商品チャンネル指数)を計算してみる
CCIとは?
CCIとは、商品チャンネル指数「Commodity Channel Index」の略で、
相場の過熱感(買われ過ぎ/売られ過ぎ)を測るオシレーター系指標の一つです。
CCIは、「現在の価格が、価格の移動平均からどれだけ乖離しているか」を表します。
似た役割のテクニカル指標に「移動平均乖離率」がありますが、こちらは単純に移動平均線からの乖離の度合いを示します。
それに対してCCIは、価格の振れ幅(ボラティリティ)が反映された形で表されるのが特徴です。
CCIの計算式
CCI=(TP-MA)/0.015×MD
TP=(高値+安値+終値)/3
MA=n日間のTPの移動平均
MD=TP-MAの平均偏差
移動平均の期間のパラメータは14が基本です。
CCIの使われ方
多くのオシレーター指標は0~100%の間で示されますが、CCIには数値の上限や下限はありません。
一般的には-100%と+100%にレベルラインが引かれ、それらの水準をトレードの判断に用います。
+100%を上抜けた場合は買われすぎ、-100%を下抜けた場合は売られすぎと判断します。
↑後半パートで上のようなグラフをpythonで作成します。
PythonでビットコインのCCIを計算してみる
必要ライブラリのインポート
ccxtのインストールが必要なので注意。
import datetime
import ccxt
import pandas as pd
import matplotlib.pyplot as plt
ろうそく足(日足)をbinanceから取得する。
# ろうそく足を取得する
def get_past_data(exchange, symbol, barsymbol, bar, period, end_day=None):
if not end_day:
timest = exchange.fetch_ticker(symbol)['timestamp']
else:
timest = day_to_unixtime(end_day)
timest = timest - period*bar*60*1000
candles = exchange.fetch_ohlcv(symbol, timeframe=barsymbol, since=timest, limit=min(500,period))
pd_candles = pd.DataFrame(candles)
return pd_candles
binance = ccxt.binance()
symbol = "BTC/USDT"
barsymbol = "1d"
bar = 60*24
period = 200 # ろうそく足の本数
candle = get_past_data(binance, symbol, barsymbol, bar, period)
timestamp = candle[0].values.tolist()
date = [datetime.datetime.fromtimestamp(timestamp[i]/1000) for i in range(len(timestamp))]
date = pd.to_datetime(date)
high = candle[2]
low = candle[3]
close = candle[4]
CCIの計算
# TPの計算
TP = (close + high + low)/3
# 移動平均線の計算
MA = TP.rolling(14).mean()
# 平均偏差の計算
MD = (TP - MA).abs().rolling(14).mean()
# CCIの計算
CCI = (TP - MA)/(0.015 * MD)
グラフを作成
# グラフを作成
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(date,close,label='btc/usdt')
ax1.set_ylabel("btc/usdt")
ax1.axes.xaxis.set_visible(False)
ax2 = fig.add_subplot(2,1,2,sharex=ax1)
ax2.set_ylabel("CCI")
ax2.plot(date,CCI,label='CCI')
ax2.legend()
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()
↓binance新規口座開設はこちら
上のリンクから登録すると、取引手数料が10%返却されてお得です。
↓有料部分には上のコードをまとめたファイルを貼っておきます。
ここから先は
0字
/
1ファイル
¥ 100
この記事が気に入ったらチップで応援してみませんか?