예스스탁
예스스탁 답변
2013-10-30 17:58:16
안녕하세요
예스스탁입니다.
예스스팟의 답변은 저희쪽에서 가이드만 제송합니다.
아래 내용 참고하셔서 수정/보완해 사용하시기 바랍니다.
스크립트 객체설정
차트객체 4개 --> 객체명 Chart1, Chart2, Chart3, Chart4
옵션객체
계좌객체 --> 객체명 Account1
종목객체 --> 객체명 MarketData1 --> 선물지정
수식내 게시판 금칙어가 있습니다. ₩
영문 업데이트가 Up*date로 작성이 되어 있으므로 별표 제거하시기 바랍니다.
var Start;
var S1, S2, S3, S4;
var BuyCode, Bvol;
var BC, BH;
var BxCond1,BxCond2,BxCond3;
var SellCode, Svol;
var SC, SL;
var SxCond1,SxCond2,SxCond3;
function Main_OnStart()
{
Start = 0;
}
//A차트
function Chart1_OnRiseSignal(Signal)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
S1 = Signal.signalKind;
if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000)
{
Start = 1;
BuyCode = Option.GetATMCallRecent(2, 0);
Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000)));
Account1.OrderBuy(BuyCode,Bvol,0,1);
BC = MarketData1.current;
BH = MarketData1.current;
BxCond1 = false;
BxCond2 = false;
BxCond3 = false;
}
if (Start == 1 && (S1 == 2 || S1 == 3))
{
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(BuyCode, Account1.Balance.count, 0,1);
Start = 0;
}
}
if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3 && HHMMSS <= 123000)
{
Start = -1;
SellCode = Option.GetATMPutRecent(2, 0);
Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000)));
Account1.OrderSell(SellCode,Svol,0,1);
SC = MarketData1.current;
SL = MarketData1.current;
SxCond1 = false;
SxCond2 = false;
SxCond3 = false;
}
if (Start == -1 && (S1 == 4 || S1 == 1))
{
Account1.SetBalanceItem(SellCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(SellCode, Account1.Balance.count, 0,1);
Start = 0;
}
}
}
//B차트
function Chart2_OnRiseSignal(Signal)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
S2 = Signal.signalKind;
if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000)
{
Start = 1;
BuyCode = Option.GetATMCallRecent(2, 0);
Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000)));
Account1.OrderBuy(BuyCode,Bvol,0,1);
BC = MarketData1.current;
BH = MarketData1.current;
BxCond1 = false;
BxCond2 = false;
BxCond3 = false;
}
if (Start == 1 && (S1 == 2 || S1 == 3))
{
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(BuyCode, Account1.Balance.count, 0,1);
Start = 0;
}
}
if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3)
{
Start = -1;
SellCode = Option.GetATMPutRecent(2, 0);
Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000)));
Account1.OrderSell(SellCode,Svol,0,1);
SC = MarketData1.current;
SL = MarketData1.current;
SxCond1 = false;
sxCond2 = false;
SxCond3 = false;
}
if (Start == 1 && (S1 == 4 || S1 == 1))
{
Account1.SetBalanceItem(SellCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(SellCode, Account1.Balance.count, 0,1);
Start = 0;
}
}
}
//C차트
function Chart3_OnRiseSignal(Signal)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
S3 = Signal.signalKind;
if (Start == 0 && S1 == 1 && S2 == 1 && S3 == 1 && HHMMSS <= 123000)
{
Start = 1;
BuyCode = Option.GetATMCallRecent(2, 0);
Bvol = Math.round((6000000/(Option.GetCurrentByCode(BuyCode)*500000)));
Account1.OrderBuy(BuyCode,Bvol,0,1);
BC = MarketData1.current;
BH = MarketData1.current;
BxCond1 = false;
BxCond2 = false;
BxCond3 = false;
}
if (Start == 0 && S1 == 3 && S2 == 3 && S3 == 3)
{
Start = 1;
SellCode = Option.GetATMPutRecent(2, 0);
Svol = Math.round((6000000/(Option.GetCurrentByCode(SellCode)*500000)));
Account1.OrderSell(SellCode,Svol,0,1);
SC = MarketData1.current;
SL = MarketData1.current;
SxCond1 = false;
SxCond2 = false;
SxCond3 = false;
}
}
//D차트
function Chart4_OnRiseSignal(Signal)
{
S4 = Signal.signalKind;
if (Start == 1 && S4 == 2 && Signal.name == "StopProfittarget" && BxCond3 == false)
{
Bxcond3 = true;
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.position == 2 && Account1.Balance.count > 0)
{
if (Math.round(Bvol*0.4) < Account1.Balance.count )
{
Account1.OrderSell(BuyCode,Math.round(Bvol*0.4),0,1);
}
if (Math.round(Bvol*0.4) >= Account1.Balance.count )
{
Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
if (Start == -1 && S4 == 4 && Signal.name == "StopProfittarget" && SxCond3 == false)
{
Sxcond3 = true;
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.position == 1 && Account1.Balance.count > 0)
{
if (Math.round(Svol*0.4) < Account1.Balance.count )
{
Account1.OrderBuy(SellCode,Math.round(Svol*0.4),0,1);
}
if (Math.round(Svol*0.4) >= Account1.Balance.count)
{
Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)*제거
{
if (Start == 1 && lUp*dateID == 20001)*제거
{
if (MarketData1.current >= BH)
{
BH = MarketData1.current;
}
if (BH >= BC+0.5 && MarketData1.current <= BC)
{
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.position == 2 && Account1.Balance.count > 0)
{
Account1.OrderSell(BuyCode, Account1.Balance.count,0,1);
Start = 0;
}
}
if (MarketData1.current >= BC+0.9 && BxCond1 == false)
{
BxCond1 = true;
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.position == 2 && Account1.Balance.count > 0)
{
if (Math.round(Bvol*0.3) < Account1.Balance.count)
{
Account1.OrderSell(BuyCode,Math.round(Bvol*0.3),0,1);
}
if (Math.round(Bvol*0.3) >= Account1.Balance.count)
{
Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
if (MarketData1.current >= BC+1.5 && BxCond2 == false )
{
BxCond2 = true;
Account1.SetBalanceItem(BuyCode, 0);
if (Account1.Balance.position == 2 && Account1.Balance.count > 0)
{
if (Math.round(Bvol*0.3) < Account1.Balance.count)
{
Account1.OrderSell(BuyCode,Math.round(Bvol*0.3),0,1);
}
if (Math.round(Bvol*0.3) >= Account1.Balance.count)
{
Account1.OrderSell(BuyCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
}
if (Start == -1 && lUp*dateID == 20001)//*제거
{
if (MarketData1.current <= SL)
{
SL = MarketData1.current;
}
if (SL <= SC-0.5 && MarketData1.current >= SC)
{
Account1.SetBalanceItem(SellCode, 0);
if (Account1.Balance.position == 1 && Account1.Balance.count > 0)
{
Account1.OrderBuy(SellCode, Account1.Balance.count,0,1);
Start = 0;
}
}
if (MarketData1.current <= SC-0.9 && SxCond1 == false)
{
Account1.SetBalanceItem(SellCode, 0);
if (Account1.Balance.position == 1 && Account1.Balance.count > 0)
{
SxCond1 = true;
if (Math.round(Svol*0.3) < Account1.Balance.count )
{
Account1.OrderBuy(SellCode,Math.round(Svol*0.3),0,1);
}
if (Math.round(Svol*0.3) >= Account1.Balance.count )
{
Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
if (MarketData1.current <= SC-1.5 && SxCond2 == false )
{
Account1.SetBalanceItem(SellCode, 0);
if (Account1.Balance.position == 1 && Account1.Balance.count > 0)
{
SxCond2 = true;
if (Math.round(Svol*0.3) < Account1.Balance.count )
{
Account1.OrderBuy(SellCode,Math.round(Svol*0.3),0,1);
}
if (Math.round(Svol*0.3) >= Account1.Balance.count )
{
Account1.OrderBuy(SellCode,Account1.Balance.count, 0,1);
Start = 0;
}
}
}
}
}
즐거운 하루되세요
> 극동해 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 다음과 같이 선물챠트를 이용해서 옵션을 거래를 하고자 하는데요.. 예스스팟 수식 전환을 부탁드립니다.
답변 감사드립니다.
=================================================================
1. 진입
선물챠트A 그리고 선물챠트B 그리고 선물챠트C에서 매수신호가 발생하면 등가+2 당월물 콜옵션을 시장가로 600만원어치 매수한다.
2. 청산
(1) 선물챠트A 또는 선물챠트B에서 매도신호가 발생하면 현재 잔고상 보유 콜옵션을 전량 청산한다.
(2) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.5pt이상 상승을 한 후, 진입한 선물가격으로 다시 하락하면 잔고상 보유 콜옵션 전량 청산한다.(본절처리)
(3) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.9pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다.
(4) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 1.5pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다.
(5) 선물챠트D에서 매수 익절신호가 발생하면 진입시점에 매수한 콜옵션 수량의 40%를 청산한다.
3. 거래시간 제한
당일 오후 12시 30분 이후부터 챠트에서 발생하는 신호는 진입하지 않는다.(당일 오후 12시 30분에 청산한다는 것이 아니라 새로운 진입을 금지하는 것임)
풋옵션 거래는 이와 반대로 하면 될 것 같은데요.
감사합니다.