我正在尝试从 aapl 数据中获取信号,但出现此错误
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
apple_stock = pd.read_csv('AAPL.csv')
apple_stock = apple_stock.set_index(pd.DatetimeIndex(apple_stock['Date'].values))
ma30 = pd.DataFrame()
ma30['AM'] = apple_stock['Adj Close'].rolling(window=30).mean()
ma100 = pd.DataFrame()
ma100['AM'] = apple_stock['Adj Close'].rolling(window=100).mean()
data = pd.DataFrame()
data['AAPL'] = apple_stock['Adj Close']
data['MA30'] = ma30['AM']
data['MA100'] = ma100['AM']
def signal(data):
signal_buy = []
signal_sell = []
f = -1
for i in range(0, len(data)):
if data['MA30'][i] > data['MA100']:
if f != 1:
signal_buy.append(data['AAPL'][i])
signal_sell.append(np.nan)
f = 1
else:
signal_buy.append(np.nan)
signal_sell.append(np.nan)
elif data['MA30'][i] < data['MA100']:
if f != 0:
signal_buy.append(np.nan)
signal_sell.append(data['AAPL'][i])
f = 0
else:
signal_buy.append(np.nan)
signal_sell.append(np.nan)
else:
signal_buy.append(np.nan)
signal_sell.append(np.nan)
return signal_buy, signal_sell
buy_sell = signal(data)
data['buy signal'] = buy_sell[0]
data['sell signal'] = buy_sell[1]
print(data)
这是它给出的错误:
Traceback(最近一次通话最后):文件“C:/Users/k.taherinia/Desktop/Stock analysis and forecasting/moving_average_indicator.py”,第 53 行,在 buy_sell = signal(data) 文件“C:/Users/k. taherinia/Desktop/Stock analysis and forecasting/moving_average_indicator.py”,第 28 行,在信号中如果数据['MA30'][i] > data['MA100']:文件“C:\Users\k.taherinia\AppData\ Local\Programs\Python\Python38\lib\site-packages\pandas\core\generic.py",第 1527 行,在非零中引发 ValueError(ValueError:一个 Series 的真值是不明确的。使用 a.empty,a.bool ()、a.item()、a.any() 或 a.all()。
有些人(和/或在熊猫中)有同样的问题,但我找不到我的代码的解决方案
您不能一方面使用 [i] 定位器,另一方面将其释放。但是,要做到你所期望的,这里有一个简单的方法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
apple_stock = pd.read_csv('AAPL.csv')
apple_stock = apple_stock.set_index(pd.DatetimeIndex(apple_stock['Date'].values))
ma30 = pd.DataFrame()
ma30['AM'] = apple_stock['Adj Close'].rolling(window=30).mean()
ma100 = pd.DataFrame()
ma100['AM'] = apple_stock['Adj Close'].rolling(window=100).mean()
data = pd.DataFrame()
data['AAPL'] = apple_stock['Adj Close']
data['MA30'] = ma30['AM']
data['MA100'] = ma100['AM']
data['buy_signal'] = np.where(data.MA30 > data.MA100,1,0)
data['sell_signal'] = np.where(data.MA30 < data.MA100,1,0)
print(data)
请注意,您还可以使用以下方法执行唯一信号列:
data['signal'] = np.where(data.MA30 > data.MA100,1,np.where(data.MA30 < data.MA100,-1,0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句