커뮤니티
수식문의
2015-06-30 11:07:51
179
글번호 87815
@@@@@아래수식을 예스에사용하게 만들어주세요
예전에 올렸던 옵션민감도 지표식은 BlackSholes, Delta, Gamma, Theta, Vega, Rho 사용자함수를 각각 부르도록 했는데 NumericRef를 적용하면 하나의 사용자함수로 작성 가능합니다.
#================================================#
# 사용자함수 : OptionGreeks(민감도)
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#================================================#
# cpFlag : Call,Put 구분, 1,2로 표현
# S : 기초자산가격의 가격, 예)주가지수(KOSPI200)
# X : 행사가격
# T : 잔존만기(연율)
# r : 무위험 이자율, 예) CD금리
# Vol : 변동성
#================================================#
input:cpflag(NumericSimple),S(NumericSimple),X(NumericSimple),T(NumericSimple),
r(NumericSimple),vol(NumericSimple),BlackSholes(NumericRef), Delta(NumericRef),
Gamma(NumericRef),Theta(NumericRef),Vega(NumericRef),Rho(NumericRef);
var1 = (log(S/X) + (r + (vol^2) / 2) * T) / (vol*sqrt(T));
var2 = var1 - vol*sqrt(T);
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp((var1^2) / 2));
if cpflag == 1 then {
BlackSholes = S * _NormSDist(var1) - X * (Exp((-r)*T)) * _NormSDist(var2);
Delta = _NormSDist(var1);
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) - r * X * Exp((-r)*T) * _NormSDist(var2);
var5 = X * T * Exp((-r)*T) * _NormSDist(var2);
}
if cpflag == 2 then {
BlackSholes = X * (Exp((-r)*T)) * _NormSDist(-var2) - S * _NormSDist(-var1);
Delta = _NormSDist(var1)-1;
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) + r * X * Exp((-r)*T) * (1-_NormSDist(var2));
var5 = -X * T * Exp((-r)*T) * _NormSDist(-var2);
}
Gamma = Exp((-r)*T) * var3 / (S*vol*Sqrt(T));
Theta = Var4 / 365;
Vega = S * Exp((-r)*T) * var3 * Sqrt(T) /100;
Rho = var5 / 100;
OptionGreeks = 1;
지표식에서 부를 때는 아래와 같이 작성합니다. (자세한 내용은 첨부의 지표식을 참조하세요.)
Var:cpFlag(0),S(0),X(0),T(0),r(0),vol(0),oBS(0),oDelta(0),oGamma(0),oVega(0),oTheta(0),oRho(0);
Value1 = OptionGreeks(cpflag,S,X,T,r,vol,oBS,oDelta,oGamma,oTheta,oVega,oRho);
Plot1(oBS,"이론가");
Plot2(oDelta,"델타");
Plot3(oGamma,"감마");
Plot4(oTheta,"쎄타");
Plot5(oVega,"베가");
Plot6(oRho,"로");
답변 1
예스스탁 예스스탁 답변
2015-06-30 17:51:14
안녕하세요
예스스탁입니다.
해당 내용 올리신 그대로 사용자함수와 지표식 작성하시면 됩니다.
1 사용자함수이름 : OptionGreeks
input:cpflag(NumericSimple),S(NumericSimple),X(NumericSimple),T(NumericSimple),
r(NumericSimple),vol(NumericSimple),BlackSholes(NumericRef), Delta(NumericRef),
Gamma(NumericRef),Theta(NumericRef),Vega(NumericRef),Rho(NumericRef);
var1 = (log(S/X) + (r + (vol^2) / 2) * T) / (vol*sqrt(T));
var2 = var1 - vol*sqrt(T);
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp((var1^2) / 2));
if cpflag == 1 then {
BlackSholes = S * _NormSDist(var1) - X * (Exp((-r)*T)) * _NormSDist(var2);
Delta = _NormSDist(var1);
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) - r * X * Exp((-r)*T) * _NormSDist(var2);
var5 = X * T * Exp((-r)*T) * _NormSDist(var2);
}
if cpflag == 2 then {
BlackSholes = X * (Exp((-r)*T)) * _NormSDist(-var2) - S * _NormSDist(-var1);
Delta = _NormSDist(var1)-1;
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) + r * X * Exp((-r)*T) * (1-_NormSDist(var2));
var5 = -X * T * Exp((-r)*T) * _NormSDist(-var2);
}
Gamma = Exp((-r)*T) * var3 / (S*vol*Sqrt(T));
Theta = Var4 / 365;
Vega = S * Exp((-r)*T) * var3 * Sqrt(T) /100;
Rho = var5 / 100;
OptionGreeks = 1;
2.
해당 내용 사이트에 첨부파일로 지표식도 있습니다.
해당 지표식 내용 올려드립니다.
(해당 지표식에서 _imvol함수가 사용되었지만 어떤 내용인지 모르겠습니다.)
해당 내용 제외했습니다.
타사이트에서 얻은 식은 해당 사이트에서 정보를 찾으셔야 합니다.
저희쪽에서 해당 내용에 대해 정확히 알지 못합니다.
#================================================#
# 지 표 명 : 옵션민감도
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#================================================#
# cpFlag : Call,Put 구분, 1,2로 표현
# S : 기초자산가격의 가격, 예)주가지수(KOSPI200)
# X : 행사가격
# T : 잔존만기(연율)
# r : 무위험 이자율, 예) CD금리
# Vol : 역사적변동성
# ImVol : 내재변동성
#================================================#
Input: 콜풋구분(1), //콜풋 입력(1:콜,2:풋)
행사가격(262.5), //행사가 입력
만기일(20141009), //만기일
CD금리(2.35); //CD 금리, http://stock.koscom.co.kr 조회가능
Var:cpFlag(0),S(0),X(0),T(0),r(0),vol(0),oBS(0),p(0),j(0),
ImVol(0),oDelta(0),oGamma(0),oVega(0),oTheta(0),oRho(0);
//If LastBarOnChart == 1 Then
{
S = C; //기초자산이 기본차트가 되어야 한다.
p = Data2("C"); //옵션가격, 옵션종목을 보조차트로 띄워놓아야 한다.
Var1 = 0; Var2 = 0;
For j = 0 To 59
{
Var1 = Var1 + Log(DayClose(j)/DayClose(j+1))^2;
Var2 = Var2 + Log(DayClose(j)/DayClose(j+1));
}
vol = Sqrt((60 * Var1 - Var2^2)/3540)*Sqrt(244); //역사적변동성
If p > 0 and vol > 0 then
{
cpFlag = 콜풋구분;
X = 행사가격;
T = (DateToJulian(만기일) - DateToJulian(Date) + 1)/365;
r = CD금리 / 100;
//ImVol = _ImVol2(cpFlag, S, X, T, r, p);
Value1 = OptionGreeks(cpflag,S,X,T,r,vol,oBS,oDelta,oGamma,oTheta,oVega,oRho);
Plot1(Vol*100,"역사적변동성");
Plot2(oBS,"이론가");
//Plot3(ImVol*100,"내재변동성");
Plot4(oDelta,"델타");
Plot5(oGamma,"감마");
Plot6(oTheta,"쎄타");
Plot7(oVega,"베가");
Plot8(oRho,"로");
}
}
즐거운 하루되세요
> 백진강 님이 쓴 글입니다.
> 제목 : 수식문의
> @@@@@아래수식을 예스에사용하게 만들어주세요
예전에 올렸던 옵션민감도 지표식은 BlackSholes, Delta, Gamma, Theta, Vega, Rho 사용자함수를 각각 부르도록 했는데 NumericRef를 적용하면 하나의 사용자함수로 작성 가능합니다.
#================================================#
# 사용자함수 : OptionGreeks(민감도)
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#================================================#
# cpFlag : Call,Put 구분, 1,2로 표현
# S : 기초자산가격의 가격, 예)주가지수(KOSPI200)
# X : 행사가격
# T : 잔존만기(연율)
# r : 무위험 이자율, 예) CD금리
# Vol : 변동성
#================================================#
input:cpflag(NumericSimple),S(NumericSimple),X(NumericSimple),T(NumericSimple),
r(NumericSimple),vol(NumericSimple),BlackSholes(NumericRef), Delta(NumericRef),
Gamma(NumericRef),Theta(NumericRef),Vega(NumericRef),Rho(NumericRef);
var1 = (log(S/X) + (r + (vol^2) / 2) * T) / (vol*sqrt(T));
var2 = var1 - vol*sqrt(T);
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp((var1^2) / 2));
if cpflag == 1 then {
BlackSholes = S * _NormSDist(var1) - X * (Exp((-r)*T)) * _NormSDist(var2);
Delta = _NormSDist(var1);
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) - r * X * Exp((-r)*T) * _NormSDist(var2);
var5 = X * T * Exp((-r)*T) * _NormSDist(var2);
}
if cpflag == 2 then {
BlackSholes = X * (Exp((-r)*T)) * _NormSDist(-var2) - S * _NormSDist(-var1);
Delta = _NormSDist(var1)-1;
Var4 = (-1)*(S * vol * var3)/(2*Sqrt(T)) + r * X * Exp((-r)*T) * (1-_NormSDist(var2));
var5 = -X * T * Exp((-r)*T) * _NormSDist(-var2);
}
Gamma = Exp((-r)*T) * var3 / (S*vol*Sqrt(T));
Theta = Var4 / 365;
Vega = S * Exp((-r)*T) * var3 * Sqrt(T) /100;
Rho = var5 / 100;
OptionGreeks = 1;
지표식에서 부를 때는 아래와 같이 작성합니다. (자세한 내용은 첨부의 지표식을 참조하세요.)
Var:cpFlag(0),S(0),X(0),T(0),r(0),vol(0),oBS(0),oDelta(0),oGamma(0),oVega(0),oTheta(0),oRho(0);
Value1 = OptionGreeks(cpflag,S,X,T,r,vol,oBS,oDelta,oGamma,oTheta,oVega,oRho);
Plot1(oBS,"이론가");
Plot2(oDelta,"델타");
Plot3(oGamma,"감마");
Plot4(oTheta,"쎄타");
Plot5(oVega,"베가");
Plot6(oRho,"로");
다음글
이전글