Юлия - найди независимую переменную, если дана зависимость - PullRequest
2 голосов
/ 01 октября 2019

У меня есть следующая функция в julia, которая вычисляет цену опциона пут с учетом определенных параметров (S, K, m, y, sigma).

формула

function OptionBlackSFs(S,K,m,y,σ,δ=0,PutIt=false)
    # Calculates Black-Scholes European call or put option price, continuous dividends of δ.
    d1 = ( log(S/K) + (y-δ+0.5*σ^2)*m ) / (σ*sqrt(m))
    d2 = d1 - σ*sqrt(m)
    c  = exp(-δ*m)*S*Φ(d1) - K*exp(-y*m)*Φ.(d2)
    if PutIt 
        price = c - exp(-δ*m)*S + exp(-y*m)*K    
    else     
        price = c
    end    
    return price      
end

Можно ли "повернуть" функцию, чтобы узнать сигму по определенной цене?

Спасибо!

1 Ответ

1 голос
/ 01 октября 2019

Нет, это потребовало бы, чтобы каждая цена соответствовала только одному уровню сигмы, например, чтобы ваша функция была монотонной. Вы не можете гарантировать это.

Что вы можете сделать, это сделать так, чтобы Джулия итеративно оптимизировала вашу функцию, чтобы вы нашли те значения сигмы, которые приводят к наименьшей разнице между выходом функции и вашей ценой. У Джулии есть несколько пакетов для такого рода вещей, взгляните на Optim.jl. Например, эта страница: https://julianlsolvers.github.io/Optim.jl/stable/#user/minimization/#minimizing-a-univariate-function-on-a-bounded-interval

Ваша функция не одномерна, но это легко сделать, присвоив значения переменным, которые вы не оцениваете:

f(σ) = OptionBlackSFs(2,3,4,5,σ,6) - input_price

и затем передайтев Optim, который будет решать для входов, которые делают вывод f как можно ближе к 0. Более приятный, но немного более сложный синтаксис может быть

let S = 2, K = 3, m = 4, y = 5, δ = 6, input_price = 100
  global f(σ) = OptionBlackSFs(S,K,m,y,σ,δ) - input_price
end
...