Используйте опции FCMP
DATA=
и OUT=
для предоставления входов и захвата выходов.
Что касается отсутствующего значения (.
) в позиции аргумента сигма, документация SOLVE гласит:
Функция SOLVE находит значение указанного аргумента, который делает выражение следующей формы равным нулю.
- Ожидаемое значение -
имя-функции
(аргумент-1, аргумент-2,
..., аргумент-n)
Вы указываете интересующий аргумент с отсутствующим значением (. ), который появляется вместо аргумента в списке параметров, показанном выше. Если функция SOLVE находит значение, то значение, возвращаемое для этой функции, является подразумеваемым значением.
Итак, SOLVE () - для сигмы blkshclpr c (то есть волатильности)
Пример кода:
data have;
input OptionID opt_price strike today: date9. exp: date9. eq_price intrate;
format today exp date9.;
datalines;
1 5 50 20jul2010 21oct2010 50 0.05
2 5 75 21jul2010 22oct2010 50 0.05
3 5 55 22jul2010 23oct2010 50 0.05
4 5 60 23jul2010 24oct2010 50 0.05
;
proc fcmp data=have out=want;
time = exp - today;
array opts[5]
initial abconv relconv maxiter status
( .5 .001 1.0e-6 100 -1)
;
function blksch(strike, time, eq_price, intrate, volty);
put volty=; /* show the SOLVE iterations in the OUTPUT window */
return ( blkshclprc (
strike, /* E: exercise prices */
time/365.25, /* t: time to maturity (years) */
eq_price, /* S: share price */
intrate, /* r: annualized risk-free interest rate, continuouslycompounded */
volty /* sigma: volatility of the underlying asset */
));
endsub;
bsvolty=solve("blksch", opts, opt_price, strike,
time, eq_price, intrate, .);
run;
Набор выходных данных
Окно OUTPUT