当前位置: 首页 > 知识库问答 >
问题:

如何在dataframe中使用一列的,然后使用同一日期的另一列数据?[副本]

邬友樵
2023-03-14

我正在尝试使用一个振荡器(相对强弱指数)来知道什么时候买入和卖出一只股票。我为RSI和收盘价创建了一个数据帧。我可以绘制这两个图,但我也想添加到我的图,当RSI击中一个买进和卖出信号。因此,为了做到这一点,我需要在RSI降至25以下时对我的RSI列进行比较,这将触发我的买入信号,如果RSI超过85,则触发我的卖出信号。我的问题是,在我的RSI柱下降到25以下的那一天,直到我的RSI柱上升到85以上的那一天,我无法计算出我的收盘价柱。我得到的只是我新的dataframe列中的Nan。

#rsi
import pandas
import warnings
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
# Window length for moving average
window_length = 14

# Dates
start = datetime.datetime(2016, 1, 5)
end = datetime.datetime(2016, 12, 31)

# Get data
data = web.DataReader('FB', 'morningstar', start, end)
df= pd.DataFrame(data)

# Get just the close
close = data['Close']
# Get the difference in price from previous step
delta = close.diff()
# Get rid of the first row, which is NaN since it did not have a previous 
# row to calculate the differences
delta = delta[1:] 

# Make the positive gains (up) and negative gains (down) Series
up, down = delta.copy(), delta.copy()
up[up < 0] = 0
down[down > 0] = 0

# Calculate the EWMA
roll_up1 = pandas.stats.moments.ewma(up, window_length)
roll_down1 = pandas.stats.moments.ewma(down.abs(), window_length)

# Calculate the RSI based on EWMA
RS1 = roll_up1 / roll_down1
RSI1 = 100.0 - (100.0 / (1.0 + RS1))

# Calculate the SMA
roll_up2 = pandas.rolling_mean(up, window_length)
roll_down2 = pandas.rolling_mean(down.abs(), window_length)

# Calculate the RSI based on SMA
RS2 = roll_up2 / roll_down2
RSI2 = 100.0 - (100.0 / (1.0 + RS2))
df['RSI2']=RSI2

df=df.dropna(axis=0)

df['RSI2']=df['RSI2'].astype(float)




df['BUY']=df['Close'][df['RSI2'] < 25]
print (df['BUY'])




# Compare graphically
plt.figure()
df['BUY'].plot(title='FB',figsize = (20, 5))
plt.show()
RSI1.plot(title='Relative Strength Index',figsize = (20, 5))
RSI2.plot(figsize = (20, 5))
plt.legend(['RSI via EWMA', 'RSI via SMA'])
plt.show()

共有1个答案

姚新霁
2023-03-14

如果我答对了你的问题,那么你要找的东西就在pandas(pd.query()中,就像在SQL中一样,例如

df['rsi_query'] = np.zeros(df.shape[0])
myquery = df.query('RSI>.25 & RSI<.85').index
df.iloc[myquery, -1] = 1(replace it with what you want)

进一步参考

 类似资料:
  • 我的熊猫数据框中有2列。 我想去掉可乐和可乐,用可乐代替。 基本上,我需要用cola和colb中的值填充colc。如果可乐中有一个楠,那么它会从可乐中拉出,如果可乐中有一个楠,它会从可乐中拉出。如果可乐和可乐中没有楠,它们应该总是相等的。 我将如何在熊猫身上实现这一点?

  • 问题内容: 我在尝试获取另一列中的字符串值的字符计数列时遇到问题,但还没有弄清楚如何有效地做到这一点。 显然,这涉及首先创建一个null列,然后将其重写,这对我的数据集要花费很长时间。那么获得这样的东西最有效的方法是什么 我已经检查了很多,但是还无法弄清楚。 问题答案: Pandas为此使用了矢量化字符串方法:。要创建新列,您可以编写: 例如: 这应该比使用Python循环在DataFrame上循

  • 问题内容: 是否可以将SQL中表中的所有记录的数据从A列复制到B列? 问题答案: 这个怎么样 这将更新每一行。

  • 在Laravel5.4中是否有一种方法可以在sqlite表中的另一列之后/之前添加一列?像MySql的('column')之后的? 我之所以这么着急,是因为每当我尝试使用Laravel迁移重命名列时,它都会跳到表的最后一个/末尾! 有办法摆脱这一切吗?

  • 我有一个包含3列的数据表,我想使用列投影的值创建一个新列。 应该如何从投影中选择值?--它应该选择前一年投影的3个具体值--如果您要为2020年创建一个新列,它应该从2021年、2022年和2023年选择值 我已经尝试了以下SQL: spark.sql(''从表中选择serial_number,pit_pd_proj为proj1,year,lead(pit_pd_proj,3)over(parti

  • 问题内容: 我需要将一个列的数据插入同一表中的另一列。 有人可以告诉我该怎么写吗? 谢谢 问题答案: