예스스탁
예스스탁 답변
2016-03-04 16:17:06
안녕하세요
예스스탁입니다.
1.
각 주기의 이평이 주문할 종목의 이평인지 혹은
선물과 같은 다른종목의 이평인지 모르겠습니다.
선물로 생각하고 식 작성해 드립니다.
일봉, 300틱등은 시간주기를 가지는 데이터는
차트에서 확인을 해야 하며
지표값 같은 경우에 차트에 지표식을 적용하고
스팟에서 받아서 처리하면 간단히 처리가 됩니다.
아래 지표식을 [이평2]라는 이름으로 작성하시고
input : P1(20),P2(60);
plot1(ma(c,P1));
plot2(ma(C,P2));
일봉과 300틱차트를 차트에 적용한 이후에
아이디 부여후 스팟의 객체설정화면에서 아이디 연결하시면 됩니다.
스크립트 객체 설정
차트객체 추가 --> 속성에서 객체명은 Chart1, 일봉차트와 아이디 연결
차트객체 추가 --> 속성에서 객체명은 Chart2, 300틱차트와 아이디 연결
계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정
옵션객체 추가 --> 속성에서 객체명은 Option1, 주가지수옵션으로 지정
스팟수식은 아래와 같습니다.
var entry;
function Main_OnStart()
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Entry = false;
//스팟이 9시 10분이전에 적용된 경우만 동작
if (HHMMSS < 91000)
{
Entry = true;
Main.SetTimer(1,10000);//1번 타이머 10초
}
}
function Main_OnTimer(nEventID)
{
if (Entry == false && nEventID == 1 && HHMMSS >= 91000)
{
//chart1에 적용된 이평2에서 plot1의 현재값을 가져와 저장
var ma1 = Chart1.GetIndicatorData("이평2",1,0);
//chart2에 적용된 이평2에서 plot2의 현재값을 가져와 저장
var ma2 = Chart1.GetIndicatorData("이평2",2,0);
//chart1의 종가가 ma1보다 크고 chart2의 종가가 ma2보다 작으면
if (Chart1.GetClose(1, 0) > ma1 && Chart2.GetClose(1, 0) < ma2 )
{
//콜+1 2계약 매수5호가로 매도
Account1.OrderSell(Option1.GetATMCallRecent(1, 0),2, Option1.GetBid(Option1.GetATMCallRecent(1, 0), 5),0);
//풋+1 2계약 매수5호가로 매도
Account1.OrderSell(Option1.GetATMPutRecent(1, 0),2, Option1.GetBid(Option1.GetATMCallRecent(1, 0), 5),0);
}
}
}
2.
function Main_OnStart()
{
Main.MessageLog("시작")
Main.SetTimer(1, 30000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 090000 && HHMMSS < 151000)
{
//옵션 잔고의 손익과 손실 합계
var Bnum = Account1.GetTheNumberOfBalances();
var sumPL = 0;
var sumVol = 0;
for(var i = 0; i < Bnum; i++)
{
Account1.SetBalance(i);
//콜이나 풋이면
if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3")
//if (Account1.Balance.code.substring(0,2) == "12" || Account1.Balance.code.substring(0,2) == "13") //NH투자증권이면 아래 if문사용
{
if (Account1.Balance.position == 1)
{
sumPL = sumPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count;
sumVol = sumVol + Account1.Balance.count;
}
if (Account1.Balance.position == 2)
{
sumPL = sumPL + (Account1.Balance.current-Account1.Balance.avgUnitCost)*Account1.Balance.count;
sumVol = sumVol + Account1.Balance.count;
}
}
}
//1계약당 0.1포인트 이상 수익이면
if (sumPL/sumVol >= 0.1)
{
for(var i = 0; i < Bnum; i++)
{
Account1.SetBalance(i);
if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3")
//if (Account1.Balance.code.substring(0,2) == "12" || Account1.Balance.code.substring(0,2) == "13") //NH투자증권이면 아래 if문사용
{
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);
}
}
}
}
}
3
function Main_OnStart()
{
Main.MessageLog("시작")
Main.SetTimer(1, 30000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 090000 && HHMMSS < 151000)
{
//옵션 잔고의 손익과 손실 합계
var Bnum = Account1.GetTheNumberOfBalances();
var AllExit = false;
for(var i = 0; i < Bnum; i++)
{
Account1.SetBalance(i);
//콜이나 풋이면
if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3")
//if (Account1.Balance.code.substring(0,2) == "12" || Account1.Balance.code.substring(0,2) == "13") //NH투자증권이면 아래 if문사용
{
if (Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.5)
{
AllExit = true;
}
if (Account1.Balance.position == 2 && Account1.Balance.current <= Account1.Balance.avgUnitCost*0.5)
{
AllExit = true;
}
}
}
//50% 이상 손실난 옵션 종목이 있으면
//옵션 전체 청산
if (AllExit == true)
{
for(var i = 0; i < Bnum; i++)
{
Account1.SetBalance(i);
if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3")
//if (Account1.Balance.code.substring(0,2) == "12" || Account1.Balance.code.substring(0,2) == "13") //NH투자증권이면 아래 if문사용
{
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);
}
}
}
}
}
즐거운 하루되세요
> 피니트 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 수고 많으십니다.
1. 일봉에서 종가가 20이평 위에 있고 // 300틱에서 종가가 60이평 아래에 있을 때 // 9시 10분이 될 때 // 콜ATM+1 2계약 매도 , 풋ATM+1 2계약 각각 매도 하라
(만기일은 제외하고 진입하라)
2. (선물포지션은 그냥 둔 채로) 현재 계좌의 옵션의 수익이 계약당 5만원이 넘으면 계좌의 모든 옵션 청산하라
3. 진입한 옵션중 콜 옵션이나 풋옵션의 수익률이 -50% 가 되면 계좌의 모든 옵션을 청산하라