首页 > 解决方案 > 如何正确计算加密货币价格的 BBP(布林带百分比)?

问题描述

我尝试通过这段代码在 python 中计算 BBP(布林带百分比)。但是,我的BBP函数返回inf-inffor 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))

如果我使用代码ETH而不是SALT在请求 API 中正常工作,但在其他小价格硬币中,该BBP函数为价格数据框中infBBP列返回。

这是返回值的示例SALT

    BBP        RSI     close      high       low      open        time  \
0   NaN        NaN  0.000069  0.000071  0.000068  0.000068  1534626000   
1   NaN        NaN  0.000070  0.000070  0.000068  0.000069  1534644000   
2   NaN        NaN  0.000072  0.000072  0.000068  0.000070  1534662000   
3   NaN        NaN  0.000073  0.000073  0.000071  0.000072  1534680000   
4   NaN        NaN  0.000074  0.000074  0.000072  0.000073  1534698000   
5   NaN        NaN  0.000073  0.000074  0.000072  0.000074  1534716000   
6   NaN        NaN  0.000073  0.000074  0.000072  0.000073  1534734000   
7   NaN        NaN  0.000071  0.000073  0.000071  0.000073  1534752000   
8   NaN        NaN  0.000072  0.000074  0.000070  0.000071  1534770000   
9   NaN        NaN  0.000069  0.000072  0.000069  0.000072  1534788000   
10  NaN        NaN  0.000070  0.000071  0.000068  0.000069  1534806000   
11  NaN        NaN  0.000072  0.000072  0.000069  0.000070  1534824000   
12  NaN        NaN  0.000070  0.000072  0.000070  0.000072  1534842000   
13  NaN        NaN  0.000070  0.000070  0.000069  0.000070  1534860000   
14  NaN  56.138260  0.000071  0.000072  0.000069  0.000070  1534878000   
15  NaN  53.757682  0.000071  0.000073  0.000071  0.000071  1534896000   
16  NaN  56.547317  0.000072  0.000072  0.000070  0.000071  1534914000   
17  NaN  52.340624  0.000070  0.000072  0.000070  0.000072  1534932000   
18  NaN  42.426811  0.000067  0.000071  0.000067  0.000070  1534950000   
19 -inf  41.721667  0.000067  0.000067  0.000065  0.000067  1534968000   
20 -inf  41.087686  0.000066  0.000067  0.000066  0.000067  1534986000   
21 -inf  42.663976  0.000067  0.000067  0.000066  0.000066  1535004000   
22 -inf  46.241512  0.000068  0.000068  0.000066  0.000067  1535022000   
23 -inf  47.300220  0.000068  0.000069  0.000067  0.000068  1535040000   
24 -inf  47.984947  0.000068  0.000069  0.000067  0.000068  1535058000   
25 -inf  47.984947  0.000068  0.000069  0.000067  0.000068  1535076000   
26 -inf  50.590822  0.000069  0.000069  0.000068  0.000068  1535094000   
27  inf  56.805348  0.000071  0.000071  0.000068  0.000069  1535112000   
28  inf  57.658800  0.000071  0.000072  0.000069  0.000071  1535130000   
29  inf  63.418810  0.000073  0.000073  0.000070  0.000071  1535148000 

我怎样才能解决这个问题?

谢谢。

标签: pythonpandasfinanceta-lib

解决方案


这就是我使用的方式BBANDS:

upperband, middleband, lowerband = talib.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=talib.MA_Type.T3)

我将收盘价(和其他价格)乘以 1000000,然后重新调整它们。也许是因为收盘价太低。


推荐阅读