我尝试通过此代码计算python中的BBP(布林带百分比)。但是,我的BBP
函数为inf
返回了-inf
或bbp
。令人困惑的是,当我使用一些像ETH
这样的硬币收盘价时,此函数返回正确的bbp
数字(不是inf)。
这是我的python代码:
import requests
import json
import pandas as pd
import numpy as np
from talib import RSI, BBANDS
def BBP(price, close):
up, mid, low = BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
bbp = (price['close'] - low) / (up - low)
print(up[-1])
print(mid[-1])
print(low[-1])
print(bbp.iloc[-1])
return bbp
r = requests.get('https://min-api.cryptocompare.com/data/histohour?fsym=SALT&tsym=BTC&limit=900&s=Binance&aggregate=5')
j = r.json()
price = pd.DataFrame(j['Data'])
price = price.sort_values(by='time', ascending=False)
price = price.iloc[::-1]
price = price.dropna()
close = price['close'].values
up, mid, low = BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
rsi = RSI(close, timeperiod=14)
bbp = BBP(price, close)
price.insert(loc=0, column='RSI',value=rsi)
price.insert(loc=0, column='BBP',value=bbp)
print(price.head(30))
如果我在请求API中使用ETH
而不是SALT
,则代码可以正常工作,但以其他价格较低的硬币,BBP
函数将{{1 }}列在价格数据框中。
这是inf
返回值的示例:
BBP
我该如何解决?
谢谢。
答案 0 :(得分:0)
这就是我使用BBANDS:
upperband, middleband, lowerband = talib.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=talib.MA_Type.T3)
我将收盘价(及其他价格)乘以1000000,因为我随后对其进行了缩放。也许是因为收盘价太低。