LoginSignup
3
4

More than 3 years have passed since last update.

[Python]Choppiness index

Last updated at Posted at 2018-06-06

ビットコインのalgorithmic trading botを作るうえでレンジ判断に使える指標がないかと探していたら、Choppiness indexというものが見つかったのですがTaLibには無かったので自作しました。
I was looking for an indicator to identify sideways trend of a market and came across this index called "Choppiness index".I made it because the index was not in Ta-Lib, so please feel free to use it if you are interested.

Choppiness index 引用元 reference
https://www.linnsoft.com/techind/choppiness-index

Talib
https://github.com/mrjbq7/ta-lib

重要な計算部分 Important calculation part
tpの基本設定は"14"らしいです the basic setting of tp is "14" according to the webisite

ATR = ta.ATR(high,low,close, timeperiod=tp)
nmrt = np.log10(np.sum(ATR[i-tp:i])/(max(high[i-tp:i])-min(low[i-tp:i])))
dnmnt = np.log10(tp)
choppiness = 100*nmrt / dnmnt

Pandas DataFrame1 -> calculation -> pandas DataFrame2

choppiness.py
import talib as ta
import numpy as np
import pandas as pd
from collections import deque

def choppiness(tp,candlestick):
    high = candlestick["high"]
    low = candlestick["low"]
    close = candlestick["close"]
    ATR = ta.ATR(high,low,close, timeperiod=tp)
    Timestamp = deque()
    CP = deque()
    for i in range(len(candlestick)):
        if i < tp*2:
            Timestamp.append(candlestick.index[i])
            CP.append(0)
        else:
            nmrt = np.log10(np.sum(ATR[i-tp:i])/(max(high[i-tp:i])-min(low[i-tp:i])))
            dnmnt = np.log10(tp)
            Timestamp.append(candlestick.index[i])
            CP.append(round(100*nmrt / dnmnt))
    CP = pd.DataFrame({"CP" : CP}, index=Timestamp)
    return CP

example of DataFrame1
can.png

example of DataFrame2
cann.png

graph of the result above
a.png

間違っている部分や効率化できる部分があればコメントいただける幸いです。
Please leave your comment if there is anything wrong or to make it more efficient

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4