我是新来的,希望能帮助我解决一个反复出现的问题
我正在使用下面的代码,试图使用下面的循环将“delta”、“gain”、“loss”、“avg gain”、“avg loss”、“RS”和“RSI”添加为新列。当我运行循环时,没有错误消息,我可以运行RSI函数,但是没有列附加到df数据帧。但是,当我逐行运行代码而不是选择整个循环块并以这种方式运行它时,dataframe将填充列。我做错什么了吗?我希望在以循环方式运行此代码时填充列
df = ohlcv.copy()
def RSI(DF,n):
df = DF.copy()
df['delta']=df['Adj Close'] - df['Adj Close'].shift(1)
df['gain']=np.where(df['delta']>=0,df['delta'],0)
df['loss']=np.where(df['delta']<0,abs(df['delta']),0)
avg_gain = []
avg_loss = []
gain = df['gain'].tolist()
loss = df['loss'].tolist()
for i in range(len(df)):
if i < n:
avg_gain.append(np.NaN)
avg_loss.append(np.NaN)
elif i == n:
avg_gain.append(df['gain'].rolling(n).mean().tolist()[n])
avg_loss.append(df['loss'].rolling(n).mean().tolist()[n])
elif i > n:
avg_gain.append(((n-1)*avg_gain[i-1] + gain[i])/n)
avg_loss.append(((n-1)*avg_loss[i-1] + loss[i])/n)
df['avg_gain']=np.array(avg_gain)
df['avg_loss']=np.array(avg_loss)
df['RS'] = df['avg_gain']/df['avg_loss']
df['RSI'] = 100 - (100/(1+df['RS']))
return df['RSI']
抱歉,如果这是一个新手问题,但我必须从某个地方开始
目前没有回答
相关问题 更多 >
编程相关推荐