예스스탁
예스스탁 답변
2014-01-28 13:05:00
안녕하세요
예스스탁입니다.
예스스팟은 기본적으로 사용자본인이 작성하셔야 합니다.
저희족에서 작성해 드리는 내용은 기본 가이드라인만 제공됩니다.
아래식 구조 참고하셔서 수정보완해 사용하시기 바랍니다.
1.스크립트 객체 설정
옵션객체 추가
계좌객체 추가 --> 선옵계좌
종목객체 추가 --> 속성에서 코피스200선물로 지정
외부변수 추가 --> 속성에서 변수명은 Y, 초기값 25, 데이터형 숫자로 지정
2. 스팟식
var S1;
var OC = new Array(100);
var OP = new Array(100);
var Delta1;
var Delta2;
//스팟 시작시에
function Main_OnStart()
{
var d = new Date();
//만기 다음날이면 0 아니면 1
if (d.getDate() >= 9 && d.getDate() <= 15 && d.getDay() == 5 && Option.GetRemainDays(0, 0) > 3)
S1 = 0;
else
S1 = 1;
//타이머 동작 1초
Main.SetTimer(1, 1000);
}
function Main_OnTimer(nEventID)
{
//코스피200선물에 가장 가까운 콜/풋 종목 선정
var var1 = MarketData1.current;
var var2 = parseInt(var1/10)*10;
var var3 = var1%10;
var ATM = -1;
if (var3 >= 8.75)
ATM = var2+10;
else if (var3 < 8.75 && var3 >= 6.25)
ATM = var2+7.5;
else if (var3 < 6.25 && var3 >= 3.75)
ATM = var2+5.0;
else if (var3 < 3.75 && var3 >= 1.25)
ATM = var2+2.5;
else
ATM = var2+0.0;
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
CC = -1;
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetExercisePrice(0, i) == ATM)
CC = Option.GetATMCallRecent(i);
}
PP = -1;
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetExercisePrice(1, i) == ATM)
PP = Option.GetATMPutRecent(i);
}
//날자 및 시계계산
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//만기 후 첫날이고 옵션잔존일수가 3일 이상일때
if (S1 == 0 &&
HHMMSS >= 91000 &&
d.getDate() >= 8 &&
d.getDate() <= 15 &&
d.getDay() == 5 &&
Option.GetRemainDays(0, 0) > 3 &&
MarketData1.open > 0)
{
S1 = 1;
//예약총액의 25%씩 콜/풋 매수
var CallV = Math.floor(Account1.GetBalanceETCinfo(0)*(Y/100)/(Option.GetBidByCode(CC,5)*500000));
var PutV = Math.floor(Account1.GetBalanceETCinfo(0)*(Y/100)/(Option.GetBidByCode(PP,5)*500000));
Account1.OrderSell(CC, CallV, Option.GetBidByCode(CC,5),0);
Account1.OrderSell(PP, PutV, Option.GetBidByCode(PP,5),0);
}
//S1이 1이고 옵션 잔존일수가 4이상이고 잔존일수가 3일인 날에는 15시 전
if (S1 == 1 && MarketData1.open > 0 &&
(Option.GetRemainDays(0, 0) >= 4 || (Option.GetRemainDays(0, 0) == 3 && HHMMSS < 150000)))
{
//직전 dleta1
Delta2 = Delta1;
//현재 계좌의 dleta합 저장
Delta1 = Account1.GetTotalDelta(3, 0);//계좌 전체 옵션의 델타합
//현재 계좌 옵션종목의 델타합이 1이상이고 직전은 1 미만
if (Delta1 >= 1 && Delta2 < 1)
{
Account1.OrderSell(CC,1, Option.GetBidByCode(CC,5),0);
Account1.OrderBuy(PP, 1, Option.GetAskByCode(PP,5),0);
}
//현재 계좌 옵션종목의 델타합은 -1이하이고 직전은 -1 보다 큼
if (Delta1 <= -1 && Delta2 > -1)
{
Account1.OrderBuy(CC,1, Option.GetAskByCode(CC,5),0);
Account1.OrderSell(PP, 1, Option.GetBidByCode(PP,5),0);
}
}
//잔존일수 3일이고 15시 이후에 잔고의 옵션종목 모두 청산
if (S1 == 1 && Option.GetRemainDays(0, 0) == 3 && HHMMSS >= 150000 )
{
//타이머 종료
Main.KillTimer(1);
//계좌 옵션 종목 모두 청산
var num = Account1.GetTheNumberOfBalances();
for (var i = -UNum; i <= LNum; i++)
{
Account1.SetUnfillIndex(1);
if (Account1.Balance.code != MarketData1.code && Account1.Balance.count > 0)
{
if (Account1.Balance.position == 1)
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1);
if (Account1.Balance.position == 2)
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1);
}
}
}
}
즐거운 하루되세요
> 밝은아침 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 코스피200 선물가격을 참조하여 해당월물 ATM 콜,풋을 매도 후 헷지해 나가는 경우입니다.
자세한 사항은 아래 참조 부탁드립니다.
- 진입: 옵션 만기 다음날인 금요일 오전 9시 1분에 코스피200선물 가격에서 가장 가까운 ATM Call,Put X계약씩 매도
(매도 가능 계약수는 Input: Y(비율= 매도증거금/예탁금)을 설정해 예를 들어 Y=25(%)이면 예탁금의 25% 내에서
최초로 매도 가능한 ATM Call,Put 계약수 대로 매도 되도록 코딩, 매도 가능 계약수 산정은 최초 매도 진입에만 적용)
- 포지션 진입 후, 포지션 델타가 +/- 1 초과 여부 체크해 가면서,
1. 포지션 델타가 1 이상 도달 시, 도달 시점의 코스피200 선물가에 가장 가까운 ATM Put 1계약 매수, Call 1계약 매도
(델타헷징 후 당일 델타가 다시 1 이상 도달 시, 같은 방법으로 ATM Put 1계약 매수, Call 1계약 매도)
코스피200선물 시가 갭하락으로 포지션 델타가 (예를 들면) 1.5 근처에서 장시작시, ATM Put 2계약 매수, Call 1계약 매도
(같은 방식으로 포지션 델타가 2.4 가 되면 (0.5 단위 반올림하면 2.5가 되므로) ATM Put 3계약 매수, Call 2계약 매도
2. 포지션 델타가 -1 이하 도달 시, 도달 시점의 코스피200 선물가에 가장 가까운 ATM Call 1계약 매수, Put 1계약 매도
(델타헷징 후 당일 델타가 다시 -1 이하 도달 시, 같은 방법으로 ATM Call 1계약 매수, Put 1계약 매도
코스피200선물 시가 갭상승으로 포지션 델타가 (예를 들면) -1.5 근처에서 장시작시, ATM Call 2계약 매수, Put 1계약 매도
(같은 방식으로 포지션 델타가 -2.4 가 되면 (0.5 단위 반올림하면 -2.5가 되므로) ATM Call 3계약 매수, Put 2계약 매도
- 청산: 진입월물의 만기 2일 전인 화요일 오후 3시에 포지션 일괄 청산
항상 감사드립니다.