커뮤니티
수식 요청
2013-05-09 22:41:23
619
글번호 63013
안녕하세요
관리자님. 수고 많으십니다
아래 내용이용하여. 매매코져 하오니
시스템식. 부탁드립니다
선물2분. 또는5분 에서. 매매계힉이고요
수고^^. 그럼. 꾸벅
  
_NormSDist.yfu   (표준정규분포사용자함수)
input:z(numeric);
var : a1(0.31938153),
      a2(-0.356563782),
      a3(1.781477937),
      a4(-1.821255978),
      a5(1.330274429),
      R(0.2316419),
      Exp(2.71828182846), 
      k(0),
      N(0);
        
k = 1 / (1 + (R * Abs(z)));
        
N = 1 / (Sqrt(2 * Pie())) * Exp^(-(z^2) / 2);
        
_NormSDist = 1 - N * (a1 * k + a2 * (k ^ 2) + a3 * (k ^ 3) + a4 * (k ^ 4) + a5 * (k ^ 5));
 
If z < 0 Then
   _NormSDist = 1 - _NormSDist;
 
_BlackSholes.yfu (BS 모델이론가 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (r + (Sig^2) / 2) * T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
 
if cpflag == 1 then
   {
   _BlackSholes = S * _NormSDist(var1) - X * (Exp^((-r)*T)) * _NormSDist(var2);
   }
else if cpflag == 2 then
   {   
   _BlackSholes = X * (Exp^((-r)*T)) * _NormSDist(var2) - S * _NormSDist(var1);
   }
 
_ImVol.yfu (내재변동성 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Price(numeric);
var:vLow(0), vHigh(0), vi(0),cLow(0), cHigh(0), Epsilon(0.001), j(0), n(5000);
   
vLow = 0.01;
vHigh = 2;
   
cLow = _BlackSholes(cpFlag, S, X, T, r, q, vLow);
cHigh = _BlackSholes(cpFlag, S, X, T, r, q, vHigh);
vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow);
 
for j = 0 to n
      {
      If _BlackSholes(cpFlag, S, X, T, r, q, vi) < Price Then
         vLow = vi;
      Else
         vHigh = vi;
      cLow = _BlackSholes(cpFlag, S, X, T, r, q, vLow);
      cHigh = _BlackSholes(cpFlag, S, X, T, r, q, vHigh);
      vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow);
 
      if Abs(Price - _BlackSholes(cpFlag, S, X, T, r, q, vi)) <= Epsilon then
         {
         var1 = vi;
         j = n;
         }
    }
            
_ImVol = vi;
 
_Delta.yfu  (델타 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
 
if cpflag == 1 then
   {
   _Delta = Exp^((q-r)*T) * _NormSDist(var1);
   }
else if cpflag == 2 then
   {   
   _Delta = Exp^((q-r)*T) * (_NormSDist(var1)-1);
   }
 
 
_Gamma.yfu  (감마 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp^((var1^2) / 2));
 
_Gamma = Exp^((q-r)*T) * var3 / (S*Sig*Sqrt(T));
 
 
_Vega.yfu   (베가 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*Sqrt(T));
var3 = (1 / Sqrt(2*pie())) * (1 / Exp^((var1^2) / 2));
 
_Vega = S * Exp^((q-r)*T) * var3 * Sqrt(T) /100;
 
 
_Theta.yfu  (쎄타 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp^((var1^2) / 2));
 
if cpflag == 1 then
   {
   _Theta = (-1) * (S * Exp^((q-r)*T) * var3 * Sig) / (2*Sqrt(T))
            - (q-r) * S * Exp^((q-r)*T) * _NormSDist(var1)
            - r * X * Exp^((-r)*T) * _NormSDist(var2);
   }
else if cpflag == 2 then
   {   
   _Theta = (-1) * (S * Exp^((q-r)*T) * var3 * Sig) / (2*Sqrt(T))
            + (q-r) * S * Exp^((q-r)*T) * _NormSDist(-var1)
            + r * X * Exp^((-r)*T) * _NormSDist(-var2);
   }
 
_Theta = _Theta / 365;
 
 
 
_Rho.yfu   (로 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
 
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
 
if cpflag == 1 then
   {
   _Rho = X * T * Exp^((q-r)*T) * _NormSDist(var2);
   }
else if cpflag == 2 then
   {   
   _Rho = -X * T * Exp^((q-r)*T) * _NormSDist(-var2);
   }
 
 
옵션민감도.yin  (지표식)
/*cpFlag : Call,Put 구분, 1,2로 표현
  S : 기초자산가격의 가격, 예)주가지수(KOSPI200)
  X : 행사가격
  T : 잔존만기(연율)
  r : 무위험 이자율, 예) CD금리
  q : 배당률
  Sig : 변동성 */
 
input: cpflag(1),     //콜풋 입력
       InS(0),        //현재 지수를 입력 안하면 data 참조를 통해 실시간 가격을 이용. 테스트시 이용
       x(145.0),      //행사가 입력
       ex(20050908),  //만기일
       r(0.0351),     //CD 금리, 요기서 볼 수 있음 ==> http://stock.koscom.co.kr/
       q(0),          //배당률
       InSig(0),      //내재변동성을 입력 안하면 자체 계산된 변동성을 사용. 단, 오차 감안해야 함
       InPrice(0);    //역시 테스트를 목적으로 함
var:S(0),T(0),sig(0),price(0),ImVol(0),bs(0),delta(0),gamma(0),vega(0),theta(0),rho(0);
    
S = iff(inS!=0,inS,data1("c")); //kospi종합을 같이 띄워 놓아야 합니다.
T = (DateToJulian(ex) - DateToJulian(date) + 1)/365;
price = iff(inPrice!=0,inPrice,c);
 
imvol = _ImVol(cpFlag, S, X, T, r, q, price);
sig = iff(insig!=0,insig,ImVol);
 
bs = _BlackSholes(cpFlag, S, X, T, r, q, sig);
delta = _Delta(cpFlag, S, X, T, r, q, sig);
gamma = _gamma(cpFlag, S, X, T, r, q, sig);
theta = _theta(cpFlag, S, X, T, r, q, sig);
vega = _vega(cpFlag, S, X, T, r, q, sig);
rho = _rho(cpFlag, S, X, T, r, q, sig);
 
plot1(imvol*100,"내재변동성");
plot2(bs,"이론가");
plot3(delta,"델타");
plot4(gamma,"감마");
plot5(theta,"쎄타");
plot6(vega,"베가");
plot7(rho,"로");
매매 방법. Plot1. Plot2.plot3. Plot4. Plot5. Plot6. Plot7.
각각 서로 교차돌파 할때.마다 한번씩
즉시. 상승돌파면. 매수. 하락돌파면 매도식
감사합니다. ^^. 시스템에 에러없는지. 확인해주시면 더욱 고맙습니다 ^^
답변 1
예스스탁 예스스탁 답변
2013-05-10 09:24:49
안녕하세요
예스스탁입니다.
아래 매수와 매도식과 같이 or로 조건을 연결해 사용하시면 됩니다.
각 값이 크로스가 가능한 값인지 확인하시기 바랍니다.
올리신 옵션그릭수치나 변동성과 관련해서는 저희 쪽에서
수식 계산검증은 해드리지 않습니다.
이용에 참고하시기 바랍니다.
input: cpflag(1), //콜풋 입력
InS(0), //현재 지수를 입력 안하면 data 참조를 통해 실시간 가격을 이용. 테스트시 이용
x(145.0), //행사가 입력
ex(20050908), //만기일
r(0.0351), //CD 금리, 요기서 볼 수 있음 ==> http://stock.koscom.co.kr/
q(0), //배당률
InSig(0), //내재변동성을 입력 안하면 자체 계산된 변동성을 사용. 단, 오차 감안해야 함
InPrice(0); //역시 테스트를 목적으로 함
var:S(0),T(0),sig(0),price(0),ImVol(0),bs(0),delta(0),gamma(0),vega(0),theta(0),rho(0);
S = iff(inS!=0,inS,data1("c")); //kospi종합을 같이 띄워 놓아야 합니다.
T = (DateToJulian(ex) - DateToJulian(date) + 1)/365;
price = iff(inPrice!=0,inPrice,c);
imvol = _ImVol(cpFlag, S, X, T, r, q, price);
sig = iff(insig!=0,insig,ImVol);
bs = _BlackSholes(cpFlag, S, X, T, r, q, sig);
delta = _Delta(cpFlag, S, X, T, r, q, sig);
gamma = _gamma(cpFlag, S, X, T, r, q, sig);
theta = _theta(cpFlag, S, X, T, r, q, sig);
vega = _vega(cpFlag, S, X, T, r, q, sig);
rho = _rho(cpFlag, S, X, T, r, q, sig);
if crossup(imvol*100,bs) or
crossup(imvol*100,delta) or
crossup(imvol*100,gamma) or
crossup(imvol*100,theta) or
crossup(imvol*100,vega) or
crossup(imvol*100,rho) or
crossup(bs,delta) or
crossup(bs,gamma) or
crossup(bs,theta) or
crossup(bs,vega) or
crossup(bs,rho) or
crossup(delta,gamma) or
crossup(delta,theta) or
crossup(delta,vega) or
crossup(delta,rho) or
crossup(gamma,theta) or
crossup(gamma,vega) or
crossup(gamma,rho) or
crossup(theta,vega) or
crossup(theta,rho) or Then
buy();
if CrossDown(imvol*100,bs) or
CrossDown(imvol*100,delta) or
CrossDown(imvol*100,gamma) or
CrossDown(imvol*100,theta) or
CrossDown(imvol*100,vega) or
CrossDown(imvol*100,rho) or
CrossDown(bs,delta) or
CrossDown(bs,gamma) or
CrossDown(bs,theta) or
CrossDown(bs,vega) or
CrossDown(bs,rho) or
CrossDown(delta,gamma) or
CrossDown(delta,theta) or
CrossDown(delta,vega) or
CrossDown(delta,rho) or
CrossDown(gamma,theta) or
CrossDown(gamma,vega) or
CrossDown(gamma,rho) or
CrossDown(theta,vega) or
CrossDown(theta,rho) or Then
sell();
즐거운 하루되세요
> yang오뚜기 님이 쓴 글입니다.
> 제목 : 수식 요청
> 안녕하세요
관리자님. 수고 많으십니다
아래 내용이용하여. 매매코져 하오니
시스템식. 부탁드립니다
선물2분. 또는5분 에서. 매매계힉이고요
수고^^. 그럼. 꾸벅
_NormSDist.yfu (표준정규분포사용자함수)
input:z(numeric);
var : a1(0.31938153),
a2(-0.356563782),
a3(1.781477937),
a4(-1.821255978),
a5(1.330274429),
R(0.2316419),
Exp(2.71828182846),
k(0),
N(0);
k = 1 / (1 + (R * Abs(z)));
N = 1 / (Sqrt(2 * Pie())) * Exp^(-(z^2) / 2);
_NormSDist = 1 - N * (a1 * k + a2 * (k ^ 2) + a3 * (k ^ 3) + a4 * (k ^ 4) + a5 * (k ^ 5));
If z < 0 Then
_NormSDist = 1 - _NormSDist;
_BlackSholes.yfu (BS 모델이론가 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (r + (Sig^2) / 2) * T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
if cpflag == 1 then
{
_BlackSholes = S * _NormSDist(var1) - X * (Exp^((-r)*T)) * _NormSDist(var2);
}
else if cpflag == 2 then
{
_BlackSholes = X * (Exp^((-r)*T)) * _NormSDist(var2) - S * _NormSDist(var1);
}
_ImVol.yfu (내재변동성 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Price(numeric);
var:vLow(0), vHigh(0), vi(0),cLow(0), cHigh(0), Epsilon(0.001), j(0), n(5000);
vLow = 0.01;
vHigh = 2;
cLow = _BlackSholes(cpFlag, S, X, T, r, q, vLow);
cHigh = _BlackSholes(cpFlag, S, X, T, r, q, vHigh);
vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow);
for j = 0 to n
{
If _BlackSholes(cpFlag, S, X, T, r, q, vi) < Price Then
vLow = vi;
Else
vHigh = vi;
cLow = _BlackSholes(cpFlag, S, X, T, r, q, vLow);
cHigh = _BlackSholes(cpFlag, S, X, T, r, q, vHigh);
vi = vLow + (Price - cLow) * (vHigh - vLow) / (cHigh - cLow);
if Abs(Price - _BlackSholes(cpFlag, S, X, T, r, q, vi)) <= Epsilon then
{
var1 = vi;
j = n;
}
}
_ImVol = vi;
_Delta.yfu (델타 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
if cpflag == 1 then
{
_Delta = Exp^((q-r)*T) * _NormSDist(var1);
}
else if cpflag == 2 then
{
_Delta = Exp^((q-r)*T) * (_NormSDist(var1)-1);
}
_Gamma.yfu (감마 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp^((var1^2) / 2));
_Gamma = Exp^((q-r)*T) * var3 / (S*Sig*Sqrt(T));
_Vega.yfu (베가 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*Sqrt(T));
var3 = (1 / Sqrt(2*pie())) * (1 / Exp^((var1^2) / 2));
_Vega = S * Exp^((q-r)*T) * var3 * Sqrt(T) /100;
_Theta.yfu (쎄타 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
var3 = (1 / Sqrt(2 * pie())) * (1 / Exp^((var1^2) / 2));
if cpflag == 1 then
{
_Theta = (-1) * (S * Exp^((q-r)*T) * var3 * Sig) / (2*Sqrt(T))
- (q-r) * S * Exp^((q-r)*T) * _NormSDist(var1)
- r * X * Exp^((-r)*T) * _NormSDist(var2);
}
else if cpflag == 2 then
{
_Theta = (-1) * (S * Exp^((q-r)*T) * var3 * Sig) / (2*Sqrt(T))
+ (q-r) * S * Exp^((q-r)*T) * _NormSDist(-var1)
+ r * X * Exp^((-r)*T) * _NormSDist(-var2);
}
_Theta = _Theta / 365;
_Rho.yfu (로 사용자함수)
input:cpflag(numeric),S(numeric),X(numeric),T(numeric),r(numeric),q(numeric),Sig(numeric);
var:Exp(2.71828182846);
var1 = (log(S/X) + (q + (Sig^2) / 2)*T) / (Sig*sqrt(T));
var2 = var1 - Sig*sqrt(T);
if cpflag == 1 then
{
_Rho = X * T * Exp^((q-r)*T) * _NormSDist(var2);
}
else if cpflag == 2 then
{
_Rho = -X * T * Exp^((q-r)*T) * _NormSDist(-var2);
}
옵션민감도.yin (지표식)
/*cpFlag : Call,Put 구분, 1,2로 표현
S : 기초자산가격의 가격, 예)주가지수(KOSPI200)
X : 행사가격
T : 잔존만기(연율)
r : 무위험 이자율, 예) CD금리
q : 배당률
Sig : 변동성 */
input: cpflag(1), //콜풋 입력
InS(0), //현재 지수를 입력 안하면 data 참조를 통해 실시간 가격을 이용. 테스트시 이용
x(145.0), //행사가 입력
ex(20050908), //만기일
r(0.0351), //CD 금리, 요기서 볼 수 있음 ==> http://stock.koscom.co.kr/
q(0), //배당률
InSig(0), //내재변동성을 입력 안하면 자체 계산된 변동성을 사용. 단, 오차 감안해야 함
InPrice(0); //역시 테스트를 목적으로 함
var:S(0),T(0),sig(0),price(0),ImVol(0),bs(0),delta(0),gamma(0),vega(0),theta(0),rho(0);
S = iff(inS!=0,inS,data1("c")); //kospi종합을 같이 띄워 놓아야 합니다.
T = (DateToJulian(ex) - DateToJulian(date) + 1)/365;
price = iff(inPrice!=0,inPrice,c);
imvol = _ImVol(cpFlag, S, X, T, r, q, price);
sig = iff(insig!=0,insig,ImVol);
bs = _BlackSholes(cpFlag, S, X, T, r, q, sig);
delta = _Delta(cpFlag, S, X, T, r, q, sig);
gamma = _gamma(cpFlag, S, X, T, r, q, sig);
theta = _theta(cpFlag, S, X, T, r, q, sig);
vega = _vega(cpFlag, S, X, T, r, q, sig);
rho = _rho(cpFlag, S, X, T, r, q, sig);
plot1(imvol*100,"내재변동성");
plot2(bs,"이론가");
plot3(delta,"델타");
plot4(gamma,"감마");
plot5(theta,"쎄타");
plot6(vega,"베가");
plot7(rho,"로");
매매 방법. Plot1. Plot2.plot3. Plot4. Plot5. Plot6. Plot7.
각각 서로 교차돌파 할때.마다 한번씩
즉시. 상승돌파면. 매수. 하락돌파면 매도식
감사합니다. ^^. 시스템에 에러없는지. 확인해주시면 더욱 고맙습니다 ^^