我试图在将来的不同时间计算短暂的通话的利润/亏损,但它不是正确的。与到期时间相比,剩余时间的利润低于行使价格,但在低于行程的某一点,它们不会像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
答案 0 :(得分:3)
你的公式不对。我不知道为什么你需要那个前导-1作为乘数,因为当我把它分发出来时,“公式”是一个简单的:
profit(stockprice) = premium - black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration);
非常简单。所以这意味着问题被隐藏在该函数中以获得通话价格,对吗?
当我将你的公式与我在维基百科上看到的定义进行比较时,我根本看不到任何对应关系。您的MATLAB代码也没有帮助。挖掘功能,看看你哪里出错了。
你写的是吗?在将它们组装成这个更大的功能之前,你是如何测试它们的。在将较小的块组装到较大的块之前测试它们。您测试的基准是什么?您比较计算的已知情况是什么?有很多B-S计算器可用。也许你可以使用其中之一。
我认为你的代码而不是MATLAB是一个错误。或者你误解了你传递的参数的含义。仔细查看您的内容,重新阅读该功能的文档,并获得一组良好的基线案例。
答案 1 :(得分:1)
我发现了问题,它与RateSpec参数有关。当您通过利率时,它会影响期权定价。