커뮤니티

예스스팟 Q&A

답변완료

문의드립니다

예스렝귀지를 이용하여 구동중입니다 이용중 신호발생 진입,청산이 이루어 지지 않았을때 백업으로 예스스팟을 이용하여 계좌를 모니터링하여 설정해 놓은 손실시 발생시 청산하는 것을 구현하고 싶습니다 스팟은 처음이라시상기와 같은 식이 있는지와 구현방법에 대해 알려주시면 감사하겠습니다
프로필 이미지
라떼처럼
2018-01-13
2798
글번호 224306

베스트시스템 님에 의해서 삭제되었습니다.

프로필 이미지
베스트시스템
2018-01-12
4
글번호 224305

mirror05 님에 의해서 삭제되었습니다.

프로필 이미지
mirror05
2018-01-09
9
글번호 224303
답변완료

수정 부탁드립니다.

수식 문의 드립니다. 하이투자 이용하고 있고 예스트레이더에서 신호를 받아와서 예스스팟을 이용해 주문 하고 있습니다. 설정은 예스트레이더 차트 4개에서 가각의 신호를 받아서 코스피 선물 거래하고 있습니다. 하지만, 오류가 계속 발생해서 제대로 적용하지 못하고 있습니다. 현재는 예스스팟은 모의 투자로만 돌리면서 테스트 하고 있고요. 아래의 조건에 맞게 수식을 보완해 주시면 감사 하겠습니다. 1. 4개중의 하나의 차트에서 신호가 발생하면 신규 진입한다. 2. 진입시 계약 수 설정할 수 있었으면 합니다.(예 5계약 주문) 3, 하나의 차트에서 신호가 나와서 체결이 되었으면 즉, 포지션이 있으면 다른차트에서의 신규 진입은 무시한다. 4, 1번 차트에서 신호가 나와서 미체결 상태로 남아 있고 2번 차트에서 신호가 나왔다면 미체결 취소하고 2번차트 신호로 신규진입한다. 5, 청산신호가 나와서 포지션이 청산되고 3분뒤에 포지션을 확인해서 포지션이 남아 있으면 모두 시장가로 청산한다. 이 때, 모든 미체결도 모두 취소한다. 6, 아래식에서 정정취소가 제대로 안되는 것 같습니다. 또 청산이 제대로 안되어 포지션이 남아 있는 경우가 많습니다. 수정부탁드립니다. (모의투자에서 적용시) 아래 식에서 위 의 조건대로 고쳐 주시면 감사하겠습니다. 나름대로 열심히 만들고는 있는데 너무 모자라네요. 또, 마지막 잔고청산은 15시 06분으로 청산하라고 작성했는데 확인결과 15시 26분에 일괄청산이 되네요. 왜 그런건지도 알려주면 고맙겠습니다. 원래는 4개의 차트를 이용하는데 너무 길어서 두 개만 올립니다. var BID,BXID,SID,SXID; var BID1,BXID1,SID1,SXID1; var BNum,BXNum,SNum,SXNum; var BNum1,BXNum1,SNum1,SXNum1; function Chart1_OnRiseSignal(Signal) { //기존타이머는 모두 종료 Main.KillTimer(1); Main.KillTimer(2); //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //buy신호 발생 if (Account1.Balance.count == 0 && Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitlong신호 발생 if (Signal.signalKind == 2) { //기존타이머는 모두 종료 Main.KillTimer(1); Main.KillTimer(2); //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유중인 수량만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.current, 0); } } //Sell신호 발생 if (Account1.Balance.count == 0 && Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitshort신호 발생 if (Signal.signalKind == 4) { //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유중인 수량만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.current, 0); } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { //매수진입 최초주문 if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; Main.SetTimer(1,30000); //1번 타이머셋팅 30초 } //매수진입 30초후 정정주문 if (OrderResponse.orderID == BID1) { BNum1 = OrderResponse.orderNum; Main.SetTimer(11,180000); //11번 타이머셋팅 180초 } //매수청산 최초주문 if (OrderResponse.orderID == BXID) { BXNum = OrderResponse.orderNum; Main.SetTimer(2,20000); //2번 타이머셋팅 20초 } //매수청산 취소주문 후 시장가 청산 if (OrderResponse.orderID == BXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Bid(2), 0); } } //매도진입 최초주문 if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; Main.SetTimer(3,30000); //3번 타이머셋팅 30초 } //매도진입 30초 후 정정주문 if (OrderResponse.orderID == SID1) { SNum1 = OrderResponse.orderNum; Main.SetTimer(33,180000); //33번 타이머셋팅 180초 } //매도청산 최초주문 if (OrderResponse.orderID == SXID) { SXNum = OrderResponse.orderNum; Main.SetTimer(4,20000); //4번 타이머셋팅 20초 } //매도청산 취소주문 후 시장가로 청산 if (OrderResponse.orderID == SXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Ask(2), 0); } } } function Main_OnTimer(nEventID) { //매수진입주문 타이머 동작 if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID1 = Account1.OrderCancel(BNum); } } //매수청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 2) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BID2 = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Bid(2), 0); } } //매도진입주문 타이머 동작 if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID1 = Account1.OrderCancel(SNum); } } //매도청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 4) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,Ask(2), 0); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMDD >= 150600) { //전체 보유 종목 수 Main.KillTimer(1); num = Account1.GetTheNumberOfBalances(); //전체 보유 종목을 하나씩 불러와 for(var i = 0; i < num; i++) { //잔고객체를 셋팅하고 Account1.SetBalanceIndex(i); // 해당 잔고가 매도이면 보유수량만큼 매수주문 if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,Ask(2), 0); } //해당 잔고가 매수이면 보유수량만큼 매도주문 if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Bid(2), 0); } } } } //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ function Chart2_OnRiseSignal(Signal) { //기존타이머는 모두 종료 Main.KillTimer(1); Main.KillTimer(2); //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //buy신호 발생 if (Account1.Balance.count == 0 && Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitlong신호 발생 if (Signal.signalKind == 2) { //기존타이머는 모두 종료 Main.KillTimer(1); Main.KillTimer(2); //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유중인 수량만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.current, 0); } } //Sell신호 발생 if (Account1.Balance.count == 0 && Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0); } //Exitshort신호 발생 if (Signal.signalKind == 4) { //MarketData1종목 미체결 모두 취소 var num = Account1.GetTheNumberOfUnfills(); for (var i = 0; i < num; i++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) ) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유중인 수량만 청산 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.current, 0); } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { //매수진입 최초주문 if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; Main.SetTimer(1,30000); //1번 타이머셋팅 30초 } //매수진입 30초후 정정주문 if (OrderResponse.orderID == BID1) { BNum1 = OrderResponse.orderNum; Main.SetTimer(11,180000); //11번 타이머셋팅 180초 } //매수청산 최초주문 if (OrderResponse.orderID == BXID) { BXNum = OrderResponse.orderNum; Main.SetTimer(2,20000); //2번 타이머셋팅 20초 } //매수청산 취소주문 후 시장가 청산 if (OrderResponse.orderID == BXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Bid(2), 0); } } //매도진입 최초주문 if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; Main.SetTimer(3,30000); //3번 타이머셋팅 30초 } //매도진입 30초 후 정정주문 if (OrderResponse.orderID == SID1) { SNum1 = OrderResponse.orderNum; Main.SetTimer(33,180000); //33번 타이머셋팅 180초 } //매도청산 최초주문 if (OrderResponse.orderID == SXID) { SXNum = OrderResponse.orderNum; Main.SetTimer(4,20000); //4번 타이머셋팅 20초 } //매도청산 취소주문 후 시장가로 청산 if (OrderResponse.orderID == SXID1) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Ask(2), 0); } } } function Main_OnTimer(nEventID) { //매수진입주문 타이머 동작 if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID1 = Account1.OrderCancel(BNum); } } //매수청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 2) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BID2 = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, Bid(2), 0); } } //매도진입주문 타이머 동작 if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID1 = Account1.OrderCancel(SNum); } } //매도청산주문 타이머 동작 //20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문) if (nEventID == 4) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,Ask(2), 0); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMDD >= 150600) { //전체 보유 종목 수 Main.KillTimer(1); num = Account1.GetTheNumberOfBalances(); //전체 보유 종목을 하나씩 불러와 for(var i = 0; i < num; i++) { //잔고객체를 셋팅하고 Account1.SetBalanceIndex(i); // 해당 잔고가 매도이면 보유수량만큼 매수주문 if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,Ask(2), 0); } //해당 잔고가 매수이면 보유수량만큼 매도주문 if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Bid(2), 0); } } } }
프로필 이미지
지킴이
2018-01-09
2725
글번호 224302
답변완료

수식 문의 드립니다.

안녕하세요 새해 복많이 받으세요 질문 드립니다. 1. 차트객체를 불러오지 않고 1분선물차트와 동일한 시간 간격으로 종목 데이타를 불러와 차트와 동일한 효과를 볼 수 있나요? 2. 1분 선물 종목의 ATR(30) 및 Baseline = 0.5를 spot식으로 작성하려면 어떤 코딩을 해야되나요? 빠른 답변 부탁드립니다. 감사합니다.
프로필 이미지
삼룡이
2018-01-07
2587
글번호 224301
답변완료

질문드립니다.

제가 틱차트를 보고있고 100틱차트입니다. 틱은 1거래로 계산하여 화면에 띄워지는데, 그렇다면 현재 시스템이 적용되어있는 100틱 차트에서 100틱 캔들이 완성되기 바로직전 99틱을 카운트하여 99틱째 매수,매도 신호가 나오게 할 수 있나요? 시스템 예스랭귀지의 경우 현재캔들이 완성되었을때지만 그것보다 1틱정도 빠르게 하는것이죠
프로필 이미지
stockric
2018-01-04
2633
글번호 224297
답변완료

문의드립니다.

1. 예스트레이더 연결선물신호(이평선 매수매도)로 가장 거래대금이 많은 ELW사는 것(매수진입이면 KOSPI200콜, 매도진입이면 KOSPI200 풋) 예제 부탁드립니다. 아래는 선물 매수신호로 등가옵션 콜매수하는 예제인데요. 이거랑 많이 차이가 나나요? /*선물 매수신호시 등가옵션 콜매수 선물 매도 신호시 등가옵션 풋 매수 청산신호시 해당옵션 청산*/ //실행해야 할 모든 내용은 이벤트 안에 입력하셔야 합니다. //추가로 시그널종류(Signal.signalKind)는 이벤트 발생시 인지가 되고 휘발성입니다. //그러므로 OnRiseSignal시그널 발생시에 처리되는 내용이 아니라면 //변수에 최근 발생한 시그널종류를 저장하고 이용하셔야 합니다. var Start; var BuyC_Code; var BuyP_Code; var SellC_Code; var SellP_Code; var kind; function Main::[안내]태그제한으로등록되지않습니다-xx[안내]태그제한으로등록되지않습니다-xxOnStart() { Main.MessageLog("시작"); Start = 0; } function C1::OnRiseSignal(Signal) { Kind = Signal.signalKind Main.MessageLog("신호완성/"+Signal.signalKind); if (Signal.signalKind == 1)//선물챠트에서 매수신호발생하면 콜 매수 { Start = 1; BuyC_code = Option.GetATMCallRecent(0); var BuyC_price = Option.GetBidByCode(BuyC_Code, 2); A1.OrderBuy(BuyC_Code, vol, BuyC_price, 1); Main.MessageLog("등가콜매수"); } if (Signal.signalKind == 3)//선물챠트에서 매도신호발생하면 풋 매수 { Start = 1; BuyP_code = Option.GetATMPutRecent(0); var BuyP_price = Option.GetBidByCode(BuyP_Code, 2); A1.OrderSell(BuyP_Code, vol, BuyP_price, 1); Main.MessageLog("등가풋매수"); } if (Start = 1 && Signal.signalKind == 2) //선물챠트 매수 청산신호발생하면 콜 매수 청산 { var BxC_price = Option.GetBidByCode(BuyC_Code, 2); A1.OrderSell(BuyC_Code, vol, BxC_price, 1); Main.MessageLog("등가콜청산"); } if (Start = 1 && Signal.signalKind == 4) //선물챠트 매도청산신호발생하면 풋 매수 청산 { var BxP_price = Option.GetBidByCode(BuyP_Code, 2); A1.OrderSell(BuyP_Code, vol, BxP_price, 1); Main.MessageLog("등가풋청산"); } } [출처] [예스스팟] 선물차트참조 옵션매수 (시스메틱 트레이더) |작성자 시스메틱
프로필 이미지
잡다백수
2017-12-29
2634
글번호 224294
답변완료

예스신호도 이용할 수 있습니까?

예스스팟에서 예스신호를 받아 이용할 수 있나요?
프로필 이미지
다니엘87
2017-12-28
2579
글번호 224293
답변완료

예스트레이더 연결 끊어졌을 때 예스스팟에서 알 수 있는 방법

안녕하세요. 인터넷이 일시적으로 끊어졌다가 연결되더라도 예스트레이더는 연결이 끊어져서 "재접속"이 뜨는 것으로 알고 있습니다. 재접속해야 하는 상황을 예스스팟에서 알 수 있나요? 실제 재접속이 떠있는 상황에서도 예스스팟은 여전히 MarketData.current를 인식하고 있고, 대부분의 함수가 정상 동작합니다. 질문: 재접속이 뜨면 예스스팟에서 이를 알 수 있는 방법은 무엇인가요? 예를 들어, 시세 데이터를 가져올 때 MarketData.current 값이 null이 되거나 그런 것이 있는지요?
프로필 이미지
곰탈
2017-12-26
2715
글번호 224292

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
퀀텀프로
2017-12-24
18
글번호 224291
0