【发布时间】:2018-12-13 05:08:03
【问题描述】:
我尝试通过此代码在 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 函数为价格数据框中的 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