1

我正在尝试计算未来不同时间的空头看涨期权的盈亏,但结果并不正确。与到期时间相比,剩余时间的那些在行使价之上的利润较少,但在低于行使价的某个时间点,它们不会像 t=0 线那样快速贬值。以下是伪代码中的公式,我做错了什么?

profit(stockprice) = -1 * (black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration) - premium);

真实的matlab代码:

function [ x ] = sell_call( current,strike,price,days)  
if (days > 0)  
    Sigma = .25;  
    Rates = 0.05;  
    Settle = today;  
    Maturity = today + days;  

    RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, 'EndDates',...
        Maturity, 'Rates', Rates, 'Compounding', -1);

    StockSpec = stockspec(Sigma, current);

    x = -1 * (optstockbybls(RateSpec, StockSpec, Settle, Maturity, 'call', strike) - price);
else
    x = min(price,strike-current-price);
end

结尾

谢谢,CP

4

2 回答 2

3

你的公式不对。我不知道为什么您需要将前导 -1 作为乘数,因为当我将其分配出去时,“公式”是一个简单的公式:

profit(stockprice) = premium - black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration);

很简单。所以这意味着问题在于调用价格的那个函数,对吗?

当我将您的公式与我在维基百科上看到的定义进行比较时,我根本看不到任何对应关系。您的 MATLAB 代码也无济于事。深入研究函数,看看你哪里出错了。

这些是你写的吗?在将它们组装成这个更大的功能之前,你是如何测试它们的。在将较小的块组装成更大的东西之前,先测试它们。

你测试的基准是什么?您将计算与什么已知情况进行比较?有很多可用的 BS 计算器。也许你可以使用其中之一。

我认为这是您的代码而不是 MATLAB 中的错误。或者你误解了你传递的参数的含义。更仔细地查看你的东西,重新阅读该函数的文档,并获得一组很好的基线案例。

于 2010-06-19T14:10:48.937 回答
1

我发现了问题,它与 RateSpec 参数有关。当您传递利率时,它会影响期权定价。

于 2010-06-19T17:57:18.923 回答