Прогнозирование БПФ, финансы

Я попытался сделать предсказание опции 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)

0
задан 13 August 2018 в 14:51

1 ответ

У вас есть первая проблема:

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] может возвращать только ошибку.

0
ответ дан 15 August 2018 в 17:03
  • 1
    Да, поэтому мне нужно инициализировать: Y [0] * prices.settle_sp_price.size? – bibio95100 13 August 2018 в 14:55
  • 2
    И если я это сделаю, у меня есть: plt.plot (abs (Y)) ТипError: неправильный тип операнда для abs (): 'list'. – bibio95100 13 August 2018 в 15:06
  • 3
    Я не знаю, что вы хотите использовать для инициализации для Y, но вы должны инициализировать его да, с чем-то подходящего размера. Подсказка может состоять в том, чтобы сделать Y = np.zeros(n), а затем заполнить Y – Christian 13 August 2018 в 15:06
  • 4
    Я сделал то, что вы мне сказали, но у меня есть ошибка в ключевом диапазоне, который возвращается – bibio95100 13 August 2018 в 15:18
  • 5
    ваш код не может быть выполнен сам по себе, не могли бы вы объяснить, где / когда возникает ошибка диапазона ключей? – Christian 13 August 2018 в 15:20

Другие вопросы по тегам:

Похожие вопросы: