【问题标题】:How to correctly calculate the BBP ( Bollinger bands percent ) for cryptocurency price?如何正确计算加密货币价格的 BBP(布林带百分比)?
【发布时间】:2018-12-13 05:08:03
【问题描述】:

我尝试通过此代码在 python 中计算 BBP(布林带百分比)。然而,我的BBP 函数返回inf-infbbp。令人困惑的是,当我使用像 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 函数为价格数据框中的 BBP 列返回 inf

这是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 

我该如何解决这个问题?

谢谢。

【问题讨论】:

    标签: python pandas finance ta-lib


    【解决方案1】:

    这就是我使用BBANDS:的方式

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2021-08-10
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多