예스스탁
예스스탁 답변
2016-01-19 19:52:15
안녕하세요
예스스탁입니다.
스팟 답변은 간단한 가이드 라인입니다.
수식내용 참고하셔서 수정보완해 사용하시기 바랍니다.
주석 참고하시면 시초가 기준내용도 있습니다.
스크립트 객체화면에서
옵션객체 Option
계좌객체 Account1
로 설정하시면 됩니다.
1.
var CallOrderCode,PutOrderCode;
var Entry, Exit, BuyCall, BuyPut, Call, Put;
function Main_OnStart()
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Entry = false;
Exit = false;
Call = Main.GetUserValue("Call");
//내부파일에의 Call변수에 종목코드값이 없으면 새로 매수
//코드값이 있으면 매도로 진행
if (Call == "")
{
BuyCall = true;
}
else
BuyCall = false;
Put = Main.GetUserValue("Call");
//내부파일에의 Call변수에 종목코드값이 없으면 새로 매수
//코드값이 있으면 매도로 진행
if (Put == "")
{
BuyPut = true;
}
else
BuyPut = false;
Main.MessageList(HHMMSS,BuyCall,BuyPut)
if (HHMMSS < 90500)
{
//1번 타이머 5초셋팅
Main.SetTimer(1, 5000);
Main.MessageList(HHMMSS,"타이머 셋팅")
}
else
{
Main.MessageList(HHMMSS,"이미 시간경과해서 수행하지 않음")
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//1번타이머 동작하고 9시 5분 이후
if (nEventID == 1 && HHMMSS >= 90500)
{
Main.KillTimer(1);
if (BuyCall == false)
{
//Call종목에 대해 잔고셋팅
Account1.SetBalance(Call,0);
//수량이 6개 이상이고 매수포지션이면
if (Account1.Balance.count > 5 && Account1.Balance.position == 2)
{
//5개만 매수3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
}
//수량이 5개 이하이고 매수포지션이면
if (Account1.Balance.count <= 5 && Account1.Balance.position == 2)
{
//남은 수량전량 매도 3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
//내부변수 Call에 저장된 값을 비움
Main.SetUserValue("Call","");
}
}
if (BuyPut == false)
{
//Put종목에 대해 잔고셋팅
Account1.SetBalance(Put,0);
//수량이 6개 이상이고 매수포지션이면
if (Account1.Balance.count > 5 && Account1.Balance.position == 2)
{
//5개만 매수3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
}
//수량이 5개 이하이고 매수포지션이면
if (Account1.Balance.count <= 5 && Account1.Balance.position == 2)
{
//남은 수량전량 매도 3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, Option.GetBid(CallOrderCode, 3),0);
//내부변수 Call에 저장된 값을 비움
Main.SetUserValue("Call","");
}
}
if (BuyCall == true)
{
//콜옵션중 3.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
//시초가 기준이면 Option.GetCurrent(0, i)를 Option.GetOpen(0, i)로 변경
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//콜종목을 찾았으면 매도 3호가로 10계약 매수주문
//내부파일에 콜옵션 코드 저장
if (CC < 99999999)
{
Account1.OrderBuy(CallOrderCode, 10, Option.GetAsk(CallOrderCode, 3), 0);
Main.SetUserValue("Call",CallOrderCode);
}
}
if (BuyPut == true)
{
//풋옵션중 1.0에 가장 가까운 종목
//풋옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
//시초가 기준이면 Option.GetCurrent(1, i)를 Option.GetOpen(1, i)로 변경
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-3.0);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//풋종목을 찾았으면 매수 3호가로 10계약 매수주문
//내부파일에 풋옵션 코드 저장
if (PP < 99999999)
{
Account1.OrderBuy(PutOrderCode, 10, Option.GetAsk(PutOrderCode, 3), 0);
Main.SetUserValue("Put",PutOrderCode);
}
}
}
}
2. 행사가 지정
var CallOrderCode,PutOrderCode;
var Entry, Exit, BuyCall, BuyPut, Call, Put;
function Main_OnStart()
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Entry = false;
Exit = false;
Call = Main.GetUserValue("Call");
//내부파일에의 Call변수에 종목코드값이 없으면 새로 매수
//코드값이 있으면 매도로 진행
if (Call == "")
{
BuyCall = true;
}
else
BuyCall = false;
Put = Main.GetUserValue("Call");
//내부파일에의 Call변수에 종목코드값이 없으면 새로 매수
//코드값이 있으면 매도로 진행
if (Put == "")
{
BuyPut = true;
}
else
BuyPut = false;
Main.MessageList(HHMMSS,BuyCall,BuyPut)
if (HHMMSS < 90500)
{
//1번 타이머 5초셋팅
Main.SetTimer(1, 5000);
Main.MessageList(HHMMSS,"타이머 셋팅")
}
else
{
Main.MessageList(HHMMSS,"이미 시간경과해서 수행하지 않음")
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//1번타이머 동작하고 9시 5분 이후
if (nEventID == 1 && HHMMSS >= 90500)
{
Main.KillTimer(1);
if (BuyCall == false)
{
//Call종목에 대해 잔고셋팅
Account1.SetBalance(Call,0);
//수량이 6개 이상이고 매수포지션이면
if (Account1.Balance.count > 5 && Account1.Balance.position == 2)
{
//5개만 매수3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
}
//수량이 5개 이하이고 매수포지션이면
if (Account1.Balance.count <= 5 && Account1.Balance.position == 2)
{
//남은 수량전량 매도 3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
//내부변수 Call에 저장된 값을 비움
Main.SetUserValue("Call","");
}
}
if (BuyPut == false)
{
//Put종목에 대해 잔고셋팅
Account1.SetBalance(Put,0);
//수량이 6개 이상이고 매수포지션이면
if (Account1.Balance.count > 5 && Account1.Balance.position == 2)
{
//5개만 매수3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0);
}
//수량이 5개 이하이고 매수포지션이면
if (Account1.Balance.count <= 5 && Account1.Balance.position == 2)
{
//남은 수량전량 매도 3호가로 매도주문
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, Option.GetBid(CallOrderCode, 3),0);
//내부변수 Call에 저장된 값을 비움
Main.SetUserValue("Call","");
}
}
if (BuyCall == true)
{
//행사가 230 콜
CallOrderCode = Option.GetCodeByExercisePrice(0, 230);
if (CallOrderCode != "")
{
Account1.OrderBuy(CallOrderCode, 10, Option.GetAsk(CallOrderCode, 3), 0);
Main.SetUserValue("Call",CallOrderCode);
}
}
if (BuyPut == true)
{
//행사가 230 풋
PutOrderCode = Option.GetCodeByExercisePrice(1, 230);
if (PutOrderCode != "")
{
Account1.OrderBuy(PutOrderCode, 10, Option.GetAsk(PutOrderCode, 3), 0);
Main.SetUserValue("Put",PutOrderCode);
}
}
}
}
즐거운 하루되세요
> 초록이 님이 쓴 글입니다.
> 제목 : 수식 문의합니다.
> 당일 아침 9:05분에, 1.0에 가장 가까운 행사가의 콜옵션을
10 계약, 아침 9:05분에 자동매수 하는 수식 부탁합니다.
반대 수식도 부탁드립니다.
(풋옵션 9:05분 1.0 근접, 9:05분 10계약 매수)
(또한, 상기 콜/풋 식들을 시초가 1.0 근접, 시초가 매수도 함께 부탁합니다.)
그리고, 위와 같이 매수한 옵션을 그 다음날 아침 9:05분에 절반 매도,
또 그 다음날 아침 9:05분에 나머지 절반 매도하고 싶은데,
청산수식도 같이 부탁합니다.
(혹시, 위 매수/청산 수식을 한가지로 묶을수 있나요?
가령 수 아침에 매수하고, 목아침 절반매도, 금아침 나머지 절반매도
하는 식으로 말입니다)
한가지만 더 부탁합니다.
위 수식에서 본인이 직접 옵션 행사가를 지정해서 할수는 없읍니까?
가령, 수식에 행사가를 직접 입력하게 하거나, 다른 방법이 가능한지
부탁합니다.
수고하십시요.