期權

交易平台如何估計期權定價損益圖?

  • February 5, 2022

使用交易平台的股票期權策略的損益計算器,它顯示未來某個日期的估計損益曲線以及標的物價格以及目前和可選的波動率變化。它必須使用某種算法來估計隨著時間的推移和基礎價格的期權價格。我想在我自己的程式碼中訪問這個算法(如果重要的話,使用 Julia)。我了解如何將多條曲線/腿添加在一起,但這是我需要的跨時間/基礎的單個選項的曲線。

我找到了一個使用期權模型算法的金融庫,並嘗試使用它的 Longstaff-Schwartz 實現,但我不得不對參數進行大量調整以匹配目前的實際價格,這並沒有太大的信心。此外,在許多日期和價格上執行它會太慢。

我很確定正在顯示的平滑曲線只是一個具有適當係數的曲線函式,可以滿足我的需要。獲取目前價格和資訊,最終價格和資訊,然後在它們之間擬合一些曲線。我在這裡的一個問題的答案中看到了一些關於擬合樣條的內容(但不了解上下文,我是量化世界的新手)。

他們只顯示圖表?沒有價值觀?平台是什麼?

如果這只是一個情節,我傾向於說他們所做的只是執行 Black Scholes,縮短時間(如果你往未來走 6m,只需將到期時間縮短 6m),並用幾個不同的現貨價值重新定價。我不認為有什麼花哨的。如果它更複雜一點,vol 會調整,使用現在更短的期限並且您沿著期限結構移動的事實。但是,您通過編寫它使用目前(和可選卷)排除了這一點。所以你也笑著不動。

在 Julia 中,您可以通過幾行程式碼來在 DataFrame 中獲取 Black Scholes:

using Plots, Distributions,DataFrames, PlotThemes
theme(:juno)

N(x) = cdf(Normal(0,1),x)

function BSM(S,K,t,rf,d,σ)
 d1 = ( log(S/K) + (rf - d + 1/2*σ^2)*t ) / (σ*sqrt(t))
 d2 = d1 - σ*sqrt(t)
 c  = exp(-d*t)S*N(d1) - exp(-rf*t)*K*N(d2)
 return c
end

S = 6:0.1:15 # spot range
t = 1        # start tenor (1 year)
shift = 6    # months shift
t_new = t - shift/12 
df = DataFrame(Call = BSM.(S,10,t_new,0.0,0.0,0.2))

您可以繪製目前值(假設所有其他條件相同,但現貨變化)與未來某一天(所有變化是到期期限;和現貨)。

plot(S,df.Call , label = "Call Option Price in 6 Months")
plot!(S,BSM.(S,10,t,0.0,0.0,0.2), 
               label = "Call Option Price Today",
               legendposition = :topleft)

在此處輸入圖像描述

添加幾行計算 PnL(減去初始成本),使其成為動態的(帶有用於 term 和 vol 的滑塊),還允許您使用不同的名義值。

original_cost = BSM.(10,10,t,0.0,0.0,0.2)

function call(N, t_new, vega)
   payoff_call = N.*(BSM.(S,10,t-t_new/365.0,0.0,0.0,vega) .- original_cost)
end

function start_val(N, vega)
   payoff = N.*(BSM.(S,10,t,0.0,0.0,vega) .- original_cost)
end

S = 7:0.1:13
using Interact
call_gui = @manipulate for t_new = 1:1:364, vega = 0.01:0.01:0.41,
          Notional = spinbox(label="Notional"; value=1);
   
       plot(S,call(Notional, t_new, vega), 
               label = "Call Option PnL in $t_new days ($(t*365-t_new) days left to expiry)", 
               legendposition = :topleft)
   
       plot!(S, start_val(Notional, vega), 
               label = "Call Option Payoff Today with K = 10",
               xlabel = "Spot",
               ylabel = "Pnl",
               size = (700,500),
               title = "Option PnL for K = 10, t = 1 year, 0 divs and rates and 20% vol at initiation",
               titlefontsize=10)
end
@layout! call_gui vbox(hbox(:t_new, :vega, :Notional),observe(_))

在此處輸入圖像描述

並更改一些參數: 在此處輸入圖像描述

現在大多數股票市場都是美式的,但在我的例子中,美式期權的結果無論如何都是相同的。在更一般的情況下,您需要使用為美式期權定價的模型(例如 PDE 求解器)來實現這一點。您還可以在 DataFrame 中顯示實際值,而不僅僅是圖表。

引用自:https://quant.stackexchange.com/questions/69746