Я пытаюсь применить функцию к фрейму данных в Python. Данные из представляют собой список цен опционов, и функция берет эти цены и преобразует их в подразумеваемое значение:
def find_vol(target_value, call_put, S, K, T, r):
MAX_ITERATIONS = 100
PRECISION = 1.0e-5
sigma = 0.5
for i in range(0, MAX_ITERATIONS):
price = bs_price(call_put, S, K, T, r, sigma)
vega = bs_vega(call_put, S, K, T, r, sigma)
price = price
diff = target_value - price
if (abs(diff) < PRECISION):
return sigma
sigma = sigma + diff/vega # f(x) / f'(x)
return sigma
Это итеративная функция, которая продолжает работать до тех пор, пока разница между двумя значениями не окажется в пределах допуска.
Во фрейме данных есть несколько столбцов с датами цен закрытия акций, ценами в наличных деньгах и затем ценами опционов в столбцах, начиная примерно год назад.
I ' мы пробовали следующее:
Vols=pd.DataFrame()
for i in range (9, 18):
Vols[i]=find_vol(Bund[i], "p", Bund[4], Bund[5], ((Bund[7]-Bund[0])/365), 0.00000002)
, чтобы создать DataFrame подразумеваемых vols, но я получаю следующую ошибку:
"ValueError: Истинное значение Series является неоднозначным. Используйте a.empty , a.bool (), a.item (), a.any () или a.all (). "
... что, я думаю, относится к приведенным выше условным операторам, применяемым к DataFrame.
Есть идеи, как мне заставить это работать?