커뮤니티
수정부탁드립니다=========================
2018-01-02 18:12:05
250
글번호 115402
처음식은 첨부 왼쪽 그림처럼 내재변동성이 나오는데 수정해주신 두번째식은 (첨부우측)내재변동성이 표시가 안되네요 제가뭘 잘못적용했나요?
부탁드립니다
//처음식
//(옵션민감도(nh버전))**********************************************************************
Input:역사적변동성(11.4);
Var:cpFlag(""),S(0),X(0),T(0),r(0),BS(0),p(0),j(0),
ImVol(0),Delta(0),Gamma(0),Vega(0),Theta(0),Rho(0),exit(0),만기일1단계(0),만기일2단계(0),만기일3단계(0);
#================================================#
p = C; //옵션가격, 옵션종목을 기본차트로 띄워놓아야 한다.
S = Data2("C"); //기초자산이 보조차트가 되어야 한다.
If CodeCategory <> 6 Then {
Alert("Data1이 옵션종목이 아닙니다.");
exit = 1;
}
If Data2(SymbolName) <> "KP200 종합" Then {
Alert("Data2가 KP200 종합이 아닙니다.");
exit = 1;
}
If exit == 0 Then {
If CurrentBar == 1 Then {
// SymbolName : 콜1801월 327.5kp (한글은 2자리로 계산)
X = StrToNum(MidStr(SymbolName,10,5)); // 행사가격, 종목명에서 추출
만기일1단계 = 20000000 + StrToNum(MidStr(SymbolName,3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계 = DayOfWeek(만기일1단계); // 만기월의 8일의 요일 값
만기일3단계 = 만기일1단계 + (Iff(만기일2단계 > 4, 11, 4) - 만기일2단계); // 2번째 목요일을 계산해 낸다.
cpFlag = LeftStr(SymbolName,2); // 콜,풋 구분. 종목명에서 추출
}
If p > 0 then {
T = (DateToJulian(만기일3단계) - DateToJulian(Date) + 1)/365;
r = CD91Rate(Date)/100;
ImVol = _ImVol(IFF(cpFlag=="콜",1,2), S, X, T, r, p);
Value1 = _OptionGreeks(IFF(cpFlag=="콜",1,2),S,X,T,r,역사적변동성/100,BS,Delta,Gamma,Theta,Vega,Rho);
If Value1 == 1 Then {
Plot1(BS,"이론가");
Plot2(ImVol*100,"내재변동성");
Plot3(Delta,"델타");
Plot4(Gamma,"감마");
Plot5(Theta,"쎄타");
Plot6(Vega,"베가");
Plot7(Rho,"로");
}
}
}
//두번째식
//(01두민감도평균)
Input:역사적변동성(11.4);
var : exit(0),C1(0),C2(0),C3(0);
Var: cpFlag2(""),X2(0),T2(0),r2(0),BS2(0),j2(0),
ImVol2(0),Delta2(0),Gamma2(0),Vega2(0),Theta2(0),Rho2(0),
만기일1단계2(0),만기일2단계2(0),만기일3단계2(0);
Var: cpFlag3(""),X3(0),T3(0),r3(0),BS3(0),j3(0),
ImVol3(0),Delta3(0),Gamma3(0),Vega3(0),Theta3(0),Rho3(0),
만기일1단계3(0),만기일2단계3(0),만기일3단계3(0);
#================================================#
C1 = Data1(C); //기초자산이 보조차트가 되어야 한다.
C2 = data2(C); //옵션가격, 옵션종목을 기본차트로 띄워놓아야 한다.
C3 = data3(c);
If Data1(SymbolName) <> "KP200 종합" Then {
Alert("Data1이 KP200 종합이 아닙니다.");
exit = 1;
}
If data2(CodeCategory) <> 6 Then {
Alert("Data2가 옵션종목이 아닙니다.");
exit = 1;
}
If data3(CodeCategory) <> 6 Then {
Alert("Data3이 옵션종목이 아닙니다.");
exit = 1;
}
If exit == 0 Then {
If CurrentBar == 1 Then {
// SymbolName : 콜1801월 327.5kp (한글은 2자리로 계산)
X2 = StrToNum(MidStr(data2(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계2 = 20000000 + StrToNum(MidStr(data2(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계2 = DayOfWeek(만기일1단계2); // 만기월의 8일의 요일 값
만기일3단계2 = 만기일1단계2 + (Iff(만기일2단계2 > 4, 11, 4) - 만기일2단계2); // 2번째 목요일을 계산해 낸다.
cpFlag2 = LeftStr(data2(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
X3 = StrToNum(MidStr(data3(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계3 = 20000000 + StrToNum(MidStr(data3(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계3 = DayOfWeek(만기일1단계3); // 만기월의 8일의 요일 값
만기일3단계3 = 만기일1단계3 + (Iff(만기일2단계3 > 4, 11, 4) - 만기일2단계3); // 2번째 목요일을 계산해 낸다.
cpFlag3 = LeftStr(data3(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
}
If C2 > 0 then {
T2 = (DateToJulian(만기일3단계2) - DateToJulian(Date) + 1)/365;
r2 = data2(CD91Rate(Date)/100);
ImVol2 = data2(_ImVol(IFF(cpFlag2=="콜",1,2), C1, X2, T2, r2, C2));
Value1 = data2(_OptionGreeks(IFF(cpFlag2=="콜",1,2),C1,X2,T2,r2,역사적변동성/100,BS2,Delta2,Gamma2,Theta2,Vega2,Rho2));
}
If C3 > 0 then {
T3 = (DateToJulian(만기일3단계3) - DateToJulian(Date) + 1)/365;
r3 = data3(CD91Rate(Date)/100);
ImVol3 = data3(_ImVol(IFF(cpFlag3=="풋",1,2), C1, X3, T3, r3, C3));
Value2 = data3(_OptionGreeks(IFF(cpFlag3=="풋",1,2),C1,X3,T3,r3,역사적변동성/100,BS3,Delta3,Gamma3,Theta3,Vega3,Rho3));
}
If Value1 == 1 and value2 == 2 Then {
Plot1((BS2+BS3)/2,"이론가");
Plot2((ImVol2*100 +ImVol3*100)/2,"내재변동성");
Plot3((Delta2+Delta3)/2,"델타");
Plot4((Gamma2+Gamma3)/2,"감마");
Plot5((Theta2+Theta3)/2,"쎄타");
Plot6((Vega2+Vega3)/2,"베가");
Plot7((Rho2+Rho3)/2,"로");
}
}
- 1. 두민감도평균.xlsx (0.12 MB)
답변 1
예스스탁 예스스탁 답변
2018-01-03 16:19:11
안녕하세요
예스스탁입니다.
식을 수정했습니다.
Input:역사적변동성(11.4);
var : exit(0),C1(0),C2(0),C3(0);
Var: cpFlag2(""),X2(0),T2(0),r2(0),BS2(0),j2(0),
ImVol2(0),Delta2(0),Gamma2(0),Vega2(0),Theta2(0),Rho2(0),
만기일1단계2(0),만기일2단계2(0),만기일3단계2(0);
Var: cpFlag3(""),X3(0),T3(0),r3(0),BS3(0),j3(0),
ImVol3(0),Delta3(0),Gamma3(0),Vega3(0),Theta3(0),Rho3(0),
만기일1단계3(0),만기일2단계3(0),만기일3단계3(0);
#================================================#
C1 = Data1(C); //기초자산이 보조차트가 되어야 한다.
C2 = data2(C); //옵션가격, 옵션종목을 기본차트로 띄워놓아야 한다.
C3 = data3(c);
If Data1(SymbolName) <> "KP200 종합" Then {
Alert("Data1이 KP200 종합이 아닙니다.");
exit = 1;
}
If data2(CodeCategory) <> 6 Then {
Alert("Data2가 옵션종목이 아닙니다.");
exit = 1;
}
If data3(CodeCategory) <> 6 Then {
Alert("Data3이 옵션종목이 아닙니다.");
exit = 1;
}
If exit == 0 Then {
If CurrentBar == 1 Then {
// SymbolName : 콜1801월 327.5kp (한글은 2자리로 계산)
X2 = StrToNum(MidStr(data2(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계2 = 20000000 + StrToNum(MidStr(data2(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계2 = DayOfWeek(만기일1단계2); // 만기월의 8일의 요일 값
만기일3단계2 = 만기일1단계2 + (Iff(만기일2단계2 > 4, 11, 4) - 만기일2단계2); // 2번째 목요일을 계산해 낸다.
cpFlag2 = LeftStr(data2(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
X3 = StrToNum(MidStr(data3(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계3 = 20000000 + StrToNum(MidStr(data3(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계3 = DayOfWeek(만기일1단계3); // 만기월의 8일의 요일 값
만기일3단계3 = 만기일1단계3 + (Iff(만기일2단계3 > 4, 11, 4) - 만기일2단계3); // 2번째 목요일을 계산해 낸다.
cpFlag3 = LeftStr(data3(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
}
If C2 > 0 then {
T2 = (DateToJulian(만기일3단계2) - DateToJulian(Date) + 1)/365;
r2 = data2(CD91Rate(Date)/100);
ImVol2 = data2(_ImVol(IFF(cpFlag2=="콜",1,2), C1, X2, T2, r2, C2));
Value1 = data2(_OptionGreeks(IFF(cpFlag2=="콜",1,2),C1,X2,T2,r2,역사적변동성/100,BS2,Delta2,Gamma2,Theta2,Vega2,Rho2));
}
If C3 > 0 then {
T3 = (DateToJulian(만기일3단계3) - DateToJulian(Date) + 1)/365;
r3 = data3(CD91Rate(Date)/100);
ImVol3 = data3(_ImVol(IFF(cpFlag3=="풋",1,2), C1, X3, T3, r3, C3));
Value2 = data3(_OptionGreeks(IFF(cpFlag3=="풋",1,2),C1,X3,T3,r3,역사적변동성/100,BS3,Delta3,Gamma3,Theta3,Vega3,Rho3));
}
If Value1 == 1 and value2 == 1 Then {
Plot1((BS2+BS3)/2,"이론가");
Plot2((ImVol2*100 +ImVol3*100)/2,"내재변동성");
Plot3((Delta2+Delta3)/2,"델타");
Plot4((Gamma2+Gamma3)/2,"감마");
Plot5((Theta2+Theta3)/2,"쎄타");
Plot6((Vega2+Vega3)/2,"베가");
Plot7((Rho2+Rho3)/2,"로");
}
}
즐거운 하루되세요
> leekss1 님이 쓴 글입니다.
> 제목 : 수정부탁드립니다=========================
> 처음식은 첨부 왼쪽 그림처럼 내재변동성이 나오는데 수정해주신 두번째식은 (첨부우측)내재변동성이 표시가 안되네요 제가뭘 잘못적용했나요?
부탁드립니다
//처음식
//(옵션민감도(nh버전))**********************************************************************
Input:역사적변동성(11.4);
Var:cpFlag(""),S(0),X(0),T(0),r(0),BS(0),p(0),j(0),
ImVol(0),Delta(0),Gamma(0),Vega(0),Theta(0),Rho(0),exit(0),만기일1단계(0),만기일2단계(0),만기일3단계(0);
#================================================#
p = C; //옵션가격, 옵션종목을 기본차트로 띄워놓아야 한다.
S = Data2("C"); //기초자산이 보조차트가 되어야 한다.
If CodeCategory <> 6 Then {
Alert("Data1이 옵션종목이 아닙니다.");
exit = 1;
}
If Data2(SymbolName) <> "KP200 종합" Then {
Alert("Data2가 KP200 종합이 아닙니다.");
exit = 1;
}
If exit == 0 Then {
If CurrentBar == 1 Then {
// SymbolName : 콜1801월 327.5kp (한글은 2자리로 계산)
X = StrToNum(MidStr(SymbolName,10,5)); // 행사가격, 종목명에서 추출
만기일1단계 = 20000000 + StrToNum(MidStr(SymbolName,3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계 = DayOfWeek(만기일1단계); // 만기월의 8일의 요일 값
만기일3단계 = 만기일1단계 + (Iff(만기일2단계 > 4, 11, 4) - 만기일2단계); // 2번째 목요일을 계산해 낸다.
cpFlag = LeftStr(SymbolName,2); // 콜,풋 구분. 종목명에서 추출
}
If p > 0 then {
T = (DateToJulian(만기일3단계) - DateToJulian(Date) + 1)/365;
r = CD91Rate(Date)/100;
ImVol = _ImVol(IFF(cpFlag=="콜",1,2), S, X, T, r, p);
Value1 = _OptionGreeks(IFF(cpFlag=="콜",1,2),S,X,T,r,역사적변동성/100,BS,Delta,Gamma,Theta,Vega,Rho);
If Value1 == 1 Then {
Plot1(BS,"이론가");
Plot2(ImVol*100,"내재변동성");
Plot3(Delta,"델타");
Plot4(Gamma,"감마");
Plot5(Theta,"쎄타");
Plot6(Vega,"베가");
Plot7(Rho,"로");
}
}
}
//두번째식
//(01두민감도평균)
Input:역사적변동성(11.4);
var : exit(0),C1(0),C2(0),C3(0);
Var: cpFlag2(""),X2(0),T2(0),r2(0),BS2(0),j2(0),
ImVol2(0),Delta2(0),Gamma2(0),Vega2(0),Theta2(0),Rho2(0),
만기일1단계2(0),만기일2단계2(0),만기일3단계2(0);
Var: cpFlag3(""),X3(0),T3(0),r3(0),BS3(0),j3(0),
ImVol3(0),Delta3(0),Gamma3(0),Vega3(0),Theta3(0),Rho3(0),
만기일1단계3(0),만기일2단계3(0),만기일3단계3(0);
#================================================#
C1 = Data1(C); //기초자산이 보조차트가 되어야 한다.
C2 = data2(C); //옵션가격, 옵션종목을 기본차트로 띄워놓아야 한다.
C3 = data3(c);
If Data1(SymbolName) <> "KP200 종합" Then {
Alert("Data1이 KP200 종합이 아닙니다.");
exit = 1;
}
If data2(CodeCategory) <> 6 Then {
Alert("Data2가 옵션종목이 아닙니다.");
exit = 1;
}
If data3(CodeCategory) <> 6 Then {
Alert("Data3이 옵션종목이 아닙니다.");
exit = 1;
}
If exit == 0 Then {
If CurrentBar == 1 Then {
// SymbolName : 콜1801월 327.5kp (한글은 2자리로 계산)
X2 = StrToNum(MidStr(data2(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계2 = 20000000 + StrToNum(MidStr(data2(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계2 = DayOfWeek(만기일1단계2); // 만기월의 8일의 요일 값
만기일3단계2 = 만기일1단계2 + (Iff(만기일2단계2 > 4, 11, 4) - 만기일2단계2); // 2번째 목요일을 계산해 낸다.
cpFlag2 = LeftStr(data2(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
X3 = StrToNum(MidStr(data3(SymbolName),10,5)); // 행사가격, 종목명에서 추출
만기일1단계3 = 20000000 + StrToNum(MidStr(data3(SymbolName),3,4))*100+8; // 만기년월 + 08일, 종목명에서 추출
만기일2단계3 = DayOfWeek(만기일1단계3); // 만기월의 8일의 요일 값
만기일3단계3 = 만기일1단계3 + (Iff(만기일2단계3 > 4, 11, 4) - 만기일2단계3); // 2번째 목요일을 계산해 낸다.
cpFlag3 = LeftStr(data3(SymbolName),2); // 콜,풋 구분. 종목명에서 추출
}
If C2 > 0 then {
T2 = (DateToJulian(만기일3단계2) - DateToJulian(Date) + 1)/365;
r2 = data2(CD91Rate(Date)/100);
ImVol2 = data2(_ImVol(IFF(cpFlag2=="콜",1,2), C1, X2, T2, r2, C2));
Value1 = data2(_OptionGreeks(IFF(cpFlag2=="콜",1,2),C1,X2,T2,r2,역사적변동성/100,BS2,Delta2,Gamma2,Theta2,Vega2,Rho2));
}
If C3 > 0 then {
T3 = (DateToJulian(만기일3단계3) - DateToJulian(Date) + 1)/365;
r3 = data3(CD91Rate(Date)/100);
ImVol3 = data3(_ImVol(IFF(cpFlag3=="풋",1,2), C1, X3, T3, r3, C3));
Value2 = data3(_OptionGreeks(IFF(cpFlag3=="풋",1,2),C1,X3,T3,r3,역사적변동성/100,BS3,Delta3,Gamma3,Theta3,Vega3,Rho3));
}
If Value1 == 1 and value2 == 2 Then {
Plot1((BS2+BS3)/2,"이론가");
Plot2((ImVol2*100 +ImVol3*100)/2,"내재변동성");
Plot3((Delta2+Delta3)/2,"델타");
Plot4((Gamma2+Gamma3)/2,"감마");
Plot5((Theta2+Theta3)/2,"쎄타");
Plot6((Vega2+Vega3)/2,"베가");
Plot7((Rho2+Rho3)/2,"로");
}
}