私はこのパンダコードを持っていますが、それは非常に遅いです。どうすればそれを最適化できますか?つまり、実行すると、実行に約4秒かかります。私がここで呼び出すこのコードは、私が何度も何度も呼び出すものであり、現在はそうではないので、できるだけ速くする必要があります...誰かがアイデアを思いついたのですか?
self.dataframe = pd.DataFrame(columns=list(['O' ,'H' ,'L' ,'C' ,'RSI', 'Upper Band', 'Lower Band']))
BinanceHistoricalUrl = "https://api.binance.com/api/v1/klines?"
BinanceHistoricalPayload = {'symbol' : 'BTCUSDT','interval': '1m','limit': 100}
HistoricalRequestData = requests.get(url=BinanceHistoricalUrl, params=BinanceHistoricalPayload).json()
Lenght = len(HistoricalRequestData)
for i in range(Lenght):
O = HistoricalRequestData[i][1]
O = "{:.4f}".format(O)
O = float(O)
H = HistoricalRequestData[i][2]
H = "{:.4f}".format(H)
H = float(H)
L = HistoricalRequestData[i][3]
L = "{:.4f}".format(H)
L = float(L)
C = HistoricalRequestData[i][4]
C = "{:.4f}".format(C)
C = float(C)
# Volume = HistoricalRequestData[0]["priceData"][i]['volume']
# Volume = "{:.4f}".format(Volume)
# Volume = float(Volume)
self.dataframe = self.dataframe.append({'O': O, 'H' : H, 'L' : L, 'C' : C}, ignore_index=True)
make_RSI(self.dataframe)
make_bollinger_bands(self.dataframe)
RSI = self.dataframe['RSI'][99]
RSI = float(RSI)
UppBoll = self.dataframe['Upper Band'][99]
UndBoll = self.dataframe['Lower Band'][99]
previouscloseprice = self.dataframe['C'][99]
MA = self.dataframe['20 Day MA'][99]
DistanceUppBoll = UppBoll - MA
DistanceUppBoll = float(DistanceUppBoll)
DistanceUndBoll = UndBoll - MA
DistanceUndBoll = float(DistanceUndBoll)
self.dataframe = self.dataframe.iloc[0:0]
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)
あなたのコードは実際には再現可能ではありません。注文しましょう
# 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
、ストリーミングで計算する方法を確認する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加