Ваш код на самом деле не воспроизводим.Давайте сделаем некоторый заказ
# first import libraries
import pandas as pd
import requests
#define functions
def make_RSI(dataframe):
delta = dataframe['C'].diff()
dUp, dDown = delta.copy(), delta.copy()
dUp[dUp < 0] = 0
dDown[dDown > 0] = 0
RolUp = dUp.rolling(14).mean()
RolDown = dDown.rolling(14).mean().abs()
RS = RolUp / RolDown
dataframe['RSI'] = 100 - (100/(1+RS))
def make_bollinger_bands(dataframe):
dataframe['20 Day MA'] = dataframe['C'].rolling(window=20).mean()
dataframe['20 Day STD'] = dataframe['C'].rolling(window=20).std()
dataframe['Upper Band'] = dataframe['20 Day MA'] + (dataframe['20 Day STD'] * 2)
dataframe['Lower Band'] = dataframe['20 Day MA'] - (dataframe['20 Day STD'] * 2)
#############
# your code #
############
BinanceHistoricalUrl = "https://api.binance.com/api/v1/klines?"
BinanceHistoricalPayload = {'symbol' : 'BTCUSDT','interval': '1m','limit': 100}
#get data
HistoricalRequestData = requests.get(url=BinanceHistoricalUrl,
params=BinanceHistoricalPayload)\
.json()
# put on a dataframe
dataframe = pd.DataFrame(HistoricalRequestData)
# consider only columns from 1 to 4(included)
dataframe = dataframe[dataframe.columns[1:5]]
# assign column names
dataframe.columns = ["O", "H", "L", "C"]
# set type float
dataframe = dataframe.astype("float64")
# call functions
make_RSI(dataframe)
make_bollinger_bands(dataframe)
Не совсем ясно, чего вы хотите достичь в конце, но вы просто используете последний ряд вашего dataframe
, поэтому вы можете рассмотреть
last = dataframe.iloc[-1]
DistanceUppBoll = last["Upper Band"] - last["20 Day MA"]
DistanceUndBoll = last["Lower Band"] - last["20 Day MA"]
Это заняло 717 ms
на моем ноутбуке.Я предполагаю, что это в основном зависит от скорости вашего соединения.
ПРИМЕЧАНИЕ: Суть в том, что вы должны избегать петель, если это возможно.
Обновление: Если вы пытаетесь реализовать торговую стратегию, основанную на базовом техническом анализе, вам следует посмотреть, как вычислить MA
в потоковом режиме.