Я попытался сделать предсказание опции put и call с помощью метода FFT, и у меня есть некоторые проблемы в моем коде:
options = pd.read_csv("/Users/***/Documents/relevantoptions2",sep =',',header = 0)
def oneorzero():
L=[]
for i in range( 0,options.shape[0]):
if (options.optiontype[i]=='put'):
L.append(1)
else :
L.append(0)
options.optiontype=L
oneorzero()
options=options.drop_duplicates(subset=None, keep='first', inplace=False)
prices=pd.DataFrame()
prices['settledate']= options.settledate.drop_duplicates(keep='first',
inplace=False)
prices['settle_sp_price']=
options.settle_sp_price.drop_duplicates(keep='first', inplace=False)
prices['return'] = prices.settle_sp_price.pct_change().dropna()
prices['settleVol'] =prices['return'].rolling( window=17).std() *
np.sqrt(17)
prices = prices.fillna(method='ffill').fillna(method='bfill')
prices = prices.reset_index(drop=True)
prices.head()
n=prices.settle_sp_price.size
x=np.arange(0,n)
p1 =sp.polyfit(x, prices.settle_sp_price,3)
pp1 =np.polyval(p1, x)
diff = prices.settle_sp_price-pp1
Y=[]
#for i in range(1,prices.settle_sp_price.size):
# if Y[i] > .1*Y[i]:
# Y[i] = 0
# print(Y[i])
Y=np.fft.fft(diff)
PP=np.fft.ifft(Y)
YY=[0]*(prices.settle_sp_price.size+30)
a=[0]*prices.settle_sp_price.size
b=[0]*prices.settle_sp_price.size
#interpolate the difference for 90days
for n in range(prices.settle_sp_price.size,prices.settle_sp_price.size+25):
YY[n]=0
for k in range(1,prices.settle_sp_price.size):
a[k]=np.real(Y[k])
b[k]=-np.imag(Y[k])
omk=2*math.pi*(k-1)/prices.settle_sp_price.size
YY[n]=YY[n]+a[k]*math.cos(omk*(n-1))+b[k]*math.sin(omk*(n-1))
YY[n]=-YY[n]/prices.settle_sp_price.size
# create one array for the original and interpolated difference
# between the least squares curve and the stock price. for i=1:415
i=range(prices.settle_sp_price.size)
YY[i]=diff[i]
tot= pp1+YY
У меня есть первая проблема с циклом, и я не делаю понять: почему:
Файл «C: / Users / *** / Documents / Stage gm3 / FFT3.py», строка 91, если Y [i]> .1 * Y [i]: IndexError : list index out the rangeВторая проблема, когда я помещаю в цикл комментарии for, я получаю это:
Файл «C: / Users / *** / Documents / Stage gm3 / FFT3.py ", строка 91, если Y [i]> .1 * Y [i]:
KeyError: range (0, 238)
У вас есть первая проблема:
Y=[]
for i in range(1,prices.settle_sp_price.size):
if Y[i] > .1*Y[i]:
Y[i] = 0
print(Y[i])
Массив Y[] инициализирован пустым, а непосредственно после этого вы пытаетесь получить доступ к его элементам, Y[i] может возвращать только ошибку.