커뮤니티

수식문의

프로필 이미지
백진강
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,"로");