커뮤니티

예스스팟 Q&A

답변완료

수식에 오류가 없는지 점검부탁드립니다

아래 식은 선물 10개 진입 주문후 1. 일부만 체결되고 나머지 미체결된 후 청산신호발생한 경우 미체결분량은 취소하고 체결된 것만 청산주문함 2. 청산주문 중 일부만 체결되고 나머지 미체결시 미체결부분은 30초 경과시 우선 2호가 주문함 을 작성한 것입니다. 1) 스팟이 처음이라 이것저것 예제보고 붙여넣기해서 작성해보았는데요... 잘 작성된 것인지 점검부탁드립니다.^^ 2) 그리고, 청산주문 중 일부만 체결되고 나머지 미체결시 미체결부분은 30초 경과시 시장가주문하려면 어떻게 작성해야하는지 좀 알려주세요.... 3) 그리고, 예를 들어, 10계약 매수진입 후 매도신호 발생시 20개 매도 주문(10개는 청산, 10개는 신규 매도)이 들어갔을때 그 중 15개만 매도 체결된 경우 스팟에서는 우선 10개는 signalkind == 2로 잡고 나머지 5개만 signalkind == 3으로 잡히는거 맞나요? var EntryVol = 10; //진입수량 var BEid,BEnum,SEid,SEnum,BEidx,SEidx,BEnumx,SEnumx; function Main_OnStart() { Main.MessageList("스팟시작"); } function Chart1_OnRiseSignal(Signal) { //Buy신호 발생하면 10개약 매수1호가로 매수 if (T == 0 && Signal.signalKind == 1) { T = 1; BEid = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),EntryVol, MarketData1.Bid(1),0); } //Exitlong신호 발생하면 if (T == 1 && Signal.signalKind == 2) { T = 0; //매수진입의 주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BEnum); //미체결이 있으면 취소 if (Account1.Unfill.count > 0) { Account1.OrderCancel(BEnum) } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); //보유한 매수포지션이 있으면 매도1호가로 전량 매도(청산) if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { BEidx = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Ask(1),0); } } //Sell신호 발생하면 10개약 매도1호가로 매도 if (T == 0 && Signal.signalKind == 3) { T = -1; SEid = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),EntryVol, MarketData1.Ask(1),0); } if (T == -1 && Signal.signalKind == 4) { T = 0; //매도진입의 주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SEnum); //미체결이 있으면 취소 if (Account1.Unfill.count > 0) { Account1.OrderCancel(SEnum) } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); //보유한 매도포지션이 있으면 매수1호가로 전량 매수(청산) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { SEidx = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Bid(1),0); } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEid) { BEnum = OrderResponse.orderNum; } if (OrderResponse.orderID == SEid) { SEnum = OrderResponse.orderNum; } if (OrderResponse.orderID == BEidx) { BEnumx = OrderResponse.orderNum; Main.SetTimer(1,30000); } if (OrderResponse.orderID == SEidx) { SEnumx = OrderResponse.orderNum; Main.SetTimer(2,30000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Account1.SetUnfill(BEnumx); //매수포지션 청산주문후 미체결이 있으면 잔고셋팅 if (Account1.Unfill.count > 0) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); } // 30초 경과시 매수2호가 정정주문 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderReplacePrice(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Bid(2),0); Main.KillTimer(1); } } if (nEventID == 2) { Account1.SetUnfill(SEnumx); //매도포지션 청산주문후 미체결이 있으면 잔고셋팅 if (Account1.Unfill.count > 0) { Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); } // 30초 경과시 매도2호가 정정주문 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderReplacePrice(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Ask(2),0); Main.KillTimer(2); } } }
프로필 이미지
디톡스
2019-02-20
3097
글번호 224737
답변완료

스팟 미작동 문의입니다.

같은 수식으로 다른 증권사에 적용을 해보았더니 작동을 안합니다. 하이투자증권이 작동을 안하네요 아래 항목이 작동을 안합니다. 다른증권사는 시세가 업데이트 되면 메세지가 뜨는데 하이투자증권은 작동을 안합니다. 확인 부탁드립니다. //종목의 시세가 업데이터 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { if (sItemCode == Main.GetOrderCode(MarketData1.code) && lUp*dateID == 20001) { if (MarketData1.current > 1) { Main.MessageLog("갱신"); } } }
프로필 이미지
수다리
2019-02-15
2875
글번호 224736
답변완료

수식에 대하여

안녕하세요 늘 감사합니다 다름이 아니라 시스템트레이딩을 예스스팟에 적용하려고 합니다 매수 매도 신호시 30초내에 체결이 이루어지지 않으면 취소하고 환매 신호시 계좌 잔고를 파악하여 환매를 하고 환매 신호 후 30초 동안 매매가 이루어지지 않으면 시장가로 변경하여 매매를 하려고 하면 어떻게 해야 할지 잘 모르겠네요... 간단할것 같은데 전혀 모르겠네요.... 꼭 알고 싶습니다 이부분만 댓글로 힘들다면 직접 찾아가 배우고 싶습니다 감사합니다
프로필 이미지
돌아온스머프
2019-02-18
3075
글번호 224735
답변완료

질문있습니다

수고에 감사드립니다. 현재 저는 유진예스트레이더를 이용하여 지정가 매매를 하고 있습니다. 그런데, 지정가로 매매하다보니 미체결이 종종 발생하여 어려움이 있습니다. 이 미체결을 조금이나마 줄일수 있을까 해서 질문드립니다. 제가 사용하는 주문유형이 Atlimit, AtStop, Onclose 가 섞여 있는데, 예스트레이더는 Atlimit든 AtStop든 그 가격에 주가가 도달해야 비로소 주문이 발생하는데, AtStop과 Onclose은 미리 주문발생이 어렵다 하더라도 혹시 예스스팟을 이용하면 Atlimit는 미리 주문발생이 가능하지 않을까 해서요. Atlimit의 경우에는 예스트레이더에서 "[3030]시스템모니터"의 "예비신호"를 클릭해보면 "신호가격"이 나타나는데, 제가 원하는 것은... 예스스팟을 이용하여 이 Atlimit의 예비신호가격에 미리 주문을 발생시키고 한 봉이 경과할때까지 Atlimit 주문이 실행되지 않고 다음봉에서 Atlimit 예비신호가격이 바뀌면 그 가격으로 주문이 정정되도록 하고 싶습니다. 그리고, 예비신호가 Atlimit가 아니거나 다른유형의 주문(Atstop 또는 Onclose 주문)을 포함하여 다른 주문이 이뤄졌는데, 미체결주문이 남아있다면 미체결주문은 취소되기를 원합니다. 가능할까요? 가능하다면 방법을 알려주시면 고맙겠습니다. 제가 예스스팟에 대해서는 아는 것이 없는데 도움을 부탁드립니다.
프로필 이미지
기똥찬
2019-02-12
2967
글번호 224731
답변완료

종목검색수식문의

수고하십니다 다름이아니고 다바스박스수식을알고 싶습니다 제가구한수식에서는 종목검색이되지않네요 너무상식적이라고pass하시지마시고
프로필 이미지
bull7날개짓
2019-02-10
2966
글번호 224730
답변완료

수식부탁합니다

매수매도식 지금 시간 보다 10틱 오르면 매수 10틱 내리면 매도 지표 저점 대비 10틱 고점대비10틱
프로필 이미지
거암
2019-02-09
2946
글번호 224729

쥴리어스 님에 의해서 삭제되었습니다.

프로필 이미지
쥴리어스
2019-02-07
0
글번호 224728
답변완료

종목선정 문의

안녕하세요 한결같은 답변이 매우 큰 도움이 되고 있습니다. 아래 수식은 옵션 2.7에 가까운 콜, 풋 옵션종목을 찾는 수식입니다. 이것을 콜풋 내가 5단계, 등가, 외가5단계 범위안에서 델타값이 0.4에 가장 가까운 콜,풋 옵션종목을 찾는 수식으로 변경해주시면 대단히 감사하겠습니다. // 아래는 수식임 function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머 동작 if (nEventID == 1) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션중 2.7에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.7); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //풋종목 찾기 //풋옵션중 2.7에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.7); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //종목을 찾았으면 if (CC < 99999999 && PP < 99999999) { Start = 1; SC = CallOrderCode; SP = PutOrderCode; } } } // 답변 미리 감사드립니다.
프로필 이미지
탄젠트80
2019-02-17
3003
글번호 224727
답변완료

전략 매수 조건 문의 드립니다.

안녕하세요 어떤 전략의 매수 기준을 코스닥지수의 월봉과 코스닥지수 5일이평선으로 설정하려 합니다. 즉, 현재 코스닥지수의 종가가 당월 지수의 월봉상 양봉에 위치해 있거나 지수의 5일이평선 위에 있을 때에만 매수를 실행하게 하려면 어떤 식으로 설정해야 하는지요? 감사합니다.
프로필 이미지
끌레어주
2019-02-06
2857
글번호 224726
답변완료

전체 챠트에서의 MarketPosition값을 예스스팟에서 조회하는 방법 있나요?

Main.GetGlobalMarketPosition(MPobject) 및 Main_OnMarketPositionChanged(종목, 갯수) 등의 형태로 각 챠트별이 아닌 전체 챠트에서 종목별 OpenContract정보를 조회하는 방법이 있으면 좋겠습니다. 포트폴리오를 운영할때 각 챠트아이디별로 GetOpenContracts를 부르는 것에 비해 효율적인 방법이 아닐까 합니다. 아 그런데 혹시 챠트객체에서 GetOpenInterest와 GetOpenContracts의 차이가 하나는 예스랭귀지의 MarketPosition이랑 동일한 값을 반환하고 하나는 MarketPosition(i)와 같이 과거 봉에서의 MarketPosition값을 조회하는 것인지요? ps : Main_OnStart에서 Main.ClearMessages()와 같은 걸로 메시지로그창을 로직상에서 초기화 해줄 수 있는게 있으면 좋겠습니다.
프로필 이미지
온고지신
2019-02-02
2827
글번호 224725