期權

嘗試編寫 Haug 的 4.19.7 雙屏障二進制不對稱

  • May 21, 2020

下面的 Clojure 程式碼正確輸出了“期權定價公式完整指南”第 4.19.6 節中的表格,但我對 4.19.7 中的不對稱非常不滿意。

(defn double-barrier-binary
 [S L U T r b v asymmetric?]
 (let [R 1
       Z (Math/log (/ U L))
       v-sq (Math/pow v 2)
       term (- (/ (* 2 b) v-sq) 1)
       alpha (* -0.5 term)
       beta (- (* -0.25 (Math/pow term 2)) (* 2 (/ r v-sq)))
       N 100]
   (loop [i 1 result 0]
     (let [i-pi (* i Math/PI)
           i-pi-Z (/ i-pi Z)
           i-pi-Z-sq (Math/pow i-pi-Z 2)
           log-s-l (Math/log (/ S L))
           sin-pi-log (Math/sin (* i-pi-Z log-s-l))
           exp-term (Math/exp (* -0.5 (* (- i-pi-Z-sq beta) (* v-sq T))))]
       (case asymmetric?
         true (if (= N i)
                 (float (* R (Math/pow (/ S L) alpha) result))
                 (let [i-pi-2 (/ 2 i-pi)
                       t-top (- beta (* i-pi-Z-sq exp-term))
                       t-btm (- i-pi-Z-sq beta)
                       log-Z (- 1 (/ log-s-l Z))]
                   (recur (inc i) (+ result (* i-pi-2 (/ t-top t-btm) sin-pi-log) log-Z))))
         false (if (= N i)
                 (float result)
                 (let [K 10
                       i-pi-K-Z (/ (* 2 i-pi K) (Math/pow Z 2))
                       sla (Math/pow (/ S L) alpha)
                       sua (Math/pow (/ S U) alpha)
                       neg-1-i (Math/pow -1 i)
                       t-top (- sla (* neg-1-i sua))
                       t-btm (+ (Math/pow alpha 2) i-pi-Z-sq)]
                   (recur (inc i) (+ result (* i-pi-K-Z (/ t-top t-btm) sin-pi-log exp-term))))))))))

(letfn [(nk [L H v] (double-barrier-binary 100 L H 0.25 0.05 0.03 v false))]
 (println (map (fn [v] (str "\n" (mapv #(nk (first v) (second v) %) [0.1 0.2 0.3 0.5]))) [[80 120] [85 115] [90 110] [95 105]])))

要嘗試上述操作,請粘貼到https://repl.it/languages/clojure的左側面板並點擊“執行”。如果有人有工作程式碼(任何語言都可以),我將不勝感激,因為我看不出我是如何錯誤地解釋了不對稱公式的。

回答我自己的問題 - 我似乎無法正確閱讀公式。決賽 $$ \left( 1 - \dfrac{ln(S/L)}{Z} \right) $$ Haug 的第 181 頁底部的術語僅在迭代結束時添加一次,而不是在每個循環中添加。惠的原作也有類似的括號。我假設方括號每次都包含它。所以回到我的數學課上。修改後的程式碼(Clojure 再次為那些(很少?)在這個領域中使用它的人,尚未完成收斂檢查):

(defn double-barrier-binary
 [S L U T r b v asymmetric?]
 (let [R 10
       Z (Math/log (/ U L))
       v-sq (Math/pow v 2)
       term (- (/ (* 2 b) v-sq) 1)
       alpha (* -0.5 term)
       beta (- (* -0.25 (Math/pow term 2)) (* 2 (/ r v-sq)))
       log-s-l (Math/log (/ S L))
       log-Z (- 1 (/ log-s-l Z))
       N 100]
   (loop [i 1 result 0]
     (let [i-pi (* i Math/PI)
           i-pi-Z (/ i-pi Z)
           i-pi-Z-sq (Math/pow i-pi-Z 2)
           sin-pi-log (Math/sin (* i-pi-Z log-s-l))
           exp-term (Math/exp (* -0.5 (* (- i-pi-Z-sq beta) (* v-sq T))))]
       (case asymmetric?
         true (if (= N i)
                 (float (* R (Math/pow (/ S L) alpha) (+ result log-Z)))
                 (let [i-pi-2 (/ 2 i-pi)
                       t-top (- beta (* i-pi-Z-sq exp-term))
                       t-btm (- i-pi-Z-sq beta)]
                   (recur (inc i) (+ result (* i-pi-2 (/ t-top t-btm) sin-pi-log)))))
         false (if (= N i)
                 (float result)
                 (let [K 10
                       i-pi-K-Z (/ (* 2 i-pi K) (Math/pow Z 2))
                       sla (Math/pow (/ S L) alpha)
                       sua (Math/pow (/ S U) alpha)
                       neg-1-i (Math/pow -1 i)
                       t-top (- sla (* neg-1-i sua))
                       t-btm (+ (Math/pow alpha 2) i-pi-Z-sq)]
                   (recur (inc i) (+ result (* i-pi-K-Z (/ t-top t-btm) sin-pi-log exp-term))))))))))

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