Filter löschen
Filter löschen

Why I can't get my output? What's wrong with line 13?

2 Ansichten (letzte 30 Tage)
Shawn Miller
Shawn Miller am 5 Okt. 2015
Kommentiert: Shawn Miller am 6 Okt. 2015
function [call,put,calldif,putdif]=bs(S,r,T,sigma,K,q)
% S is current stock price
% r is annualized risk free rate
% T is time to expiration (in years)
% sigma is annualized stock return standard deviation/volatility
% K is strike price
% q is annualized dividend rate
temp1=(log(S/K)+(r-q+sigma^2/2)*T)/(sigma*T^0.5);
temp2=temp1-sigma*T^0.5;
call=S*exp(-q*T)*normcdf(temp1)-K*exp(-r*T)*normcdf(temp2);
put=-S*exp(-q*T)*normcdf(-temp1)+K*exp(-r*T)*normcdf(-temp2);
[a,b]=blsprice(S,K,r,T,sigma,q);
[calldif,putdif]=[call,put]-[a,b]
end
  5 Kommentare
Shawn Miller
Shawn Miller am 6 Okt. 2015
Bearbeitet: Shawn Miller am 6 Okt. 2015
>> bs(100, 0.1, 0.25, 0.5, 95, 0)
Error using -
Too many output arguments.
Error in bs (line 17)
[calldif,putdif]=[call,put]-[a,b]
call, put, a, b are all scalers. call and put are what I attempt to compute using my defined formula, and a and b are the values computed using blsprice function in MATLAB. Basically, what I am doing here is to compare the two results.
Joseph Cheng
Joseph Cheng am 6 Okt. 2015
Bearbeitet: Joseph Cheng am 6 Okt. 2015
shawn read the cyclist's answer to remedy your comment above.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

the cyclist
the cyclist am 5 Okt. 2015
Bearbeitet: the cyclist am 6 Okt. 2015
[calldif, putdif] = [call,put] - [a,b]
is not valid MATLAB syntax. MATLAB can't distinguish how the right-hand variables should be sorted into the left-hand variables. The right-hand side is a 1x2 vector, and MATLAB doesn't "know" how you want that parceled out between the two output variables. It is similar to the (invalid) syntax
[x,y] = [[1 2 3],[4 5]] - [[5 6 7],[8 9]]
In that case, the right-hand side is a vector of length 5, and MATLAB would not know how to split it up between x and y.
Instead, you could do
callputdiff = [call,put] - [a,b]
calldiff = callputdiff(1);
putdiff = callputdiff(2);
Alternatively, you might not need to separate them at all, just keeping them in the vector while you operate on it. Similarly, perhaps call and put could just have been in a vector themselves.
  1 Kommentar
Shawn Miller
Shawn Miller am 6 Okt. 2015
Many thanks, I think I'll just change my output to a vector called "callputdiff".

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Price and Analyze Financial Instruments finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by