커뮤니티

스팟식 문의드립니다.

프로필 이미지
수다리
2017-11-07 14:08:35
2642
글번호 224243
답변완료
한국투자증권에서 해외선물 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("진입금지요건만족"); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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("진입금지요건만족"); } }