예스스탁
예스스탁 답변
2017-11-22 16:09:30
> 수다리 님이 쓴 글입니다.
> 제목 : 스팟식 문의드립니다.
> 한국투자증권에서 해외선물 3종목을 예스트레이더 차트신호에 따라서 매매하는 식인데요
3개차트 신호대로 매매하다가 현재 총 손실이 포지션이 있던 없던간에 현재 예탁자산평가액이
스팟적용했을 시기보다 -200000만원이상 떨어졌을때 모든포지션을 청산하고 차트에 신호가 나
와도 더 이상 매매하지 않게 하려고 합니다.
진입식을 잘 작동하는데 매매정지식이 뭔가 잘못된거 같은데 확인 좀 부탁드립니다.
근데 조회를 원화 기준으로 해야하는 달러기준으로 해야하는지요?
-200000만원을 원화 기준으로 해야하나요 달러기준으로 -200으로 해야하나요?
원화기준으로 매매정지 손실금액을 맞추고 싶습니다.
달러기준 조회를 햇을때는 달러로 변하고 원화조회를 햇을때는 원화 기준에 맞춰지는 건가요?
var i1;
var X;
//스팟 시작시
function Main_OnStart()
{
Main.MessageList("스팟 시작");
//i1에 예수금/예탁총액 저장
i1 = Account1.GetBalanceETCinfo(4);
X = 0;
Main.SetTimer(1, 1000);//5초 타이머 셋팅
Main.MessageList("예수금", Account1.GetBalanceETCinfo(4));
}
//-------------------------------------------------------------------------------------
//차트에서 신호나오면 MarketData1 종목에 대해 주문
function Chart1_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다
{
//매수진입신호 발생
if (Signal.signalKind == 1 && X == 0)
{
Main.MessageList("J1매수");
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,0,1);
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J1매수청산");
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
//매도진입신호 발생
if (Signal.signalKind == 3 && X == 0)
{
Main.MessageList("J1매도");
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,0,1);
}
//매도청산신호 발생
if (Signal.signalKind == 4)
{
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J1매도청산");
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
//-------------------------------------------------------------------------------------
//차트에서 신호나오면 MarketData1 종목에 대해 주문
function Chart2_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다
{
//매수진입신호 발생
if (Signal.signalKind == 1 && X == 0)
{
Main.MessageList("J2매수");
Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), Signal.count,0,1);
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J2매수청산");
Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
//매도진입신호 발생
if (Signal.signalKind == 3 && X == 0)
{
Main.MessageList("J2매도");
Account1.OrderSell(Main.GetOrderCode(MarketData2.code), Signal.count,0,1);
}
//매도청산신호 발생
if (Signal.signalKind == 4)
{
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J2매도청산");
Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
//-------------------------------------------------------------------------------------
//차트에서 신호나오면 MarketData1 종목에 대해 주문
function Chart3_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다
{
//매수진입신호 발생
if (Signal.signalKind == 1 && X == 0)
{
Main.MessageList("J3매수");
Account1.OrderBuy(Main.GetOrderCode(MarketData3.code), Signal.count,0,1);
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J3매수청산");
Account1.SetBalance(Main.GetOrderCode(MarketData3.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
//매도진입신호 발생
if (Signal.signalKind == 3 && X == 0)
{
Main.MessageList("J3매도");
Account1.OrderSell(Main.GetOrderCode(MarketData3.code), Signal.count,0,1);
}
//매도청산신호 발생
if (Signal.signalKind == 4)
{
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Main.MessageList("J3매도청산");
Account1.SetBalance(Main.GetOrderCode(MarketData3.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
//---------------------------------------------------------------------
function Main_OnTimer(nEventID)
{
//현재 예수금/예탁총액이 스팟시작시값보다 20만원 이상 감소했으면
if (nEventID == 1 && Account1.GetBalanceETCinfo(4) <= i1-200000)
{
//미체결주문 전체 취소
var num1 = Account1.GetTheNumberOfUnfills();
for(i = 0; i < num1; i++)
{
Account1.SetUnfillIndex(i)
Account1.OrderCancel(Account1.Unfill.orderNum);
}
//잔고 전체 종목 청산
var num2 = Account1.GetTheNumberOfBalances();
for(i = 0; i < num2; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
X = 1;
Main.MessageList("진입금지요건만족");
}
}