커뮤니티

예스스팟 Q&A

답변완료

문의드립니다

안녕하세요 현재 예스스팟을 사용하여 시험주문을 넣어보고있습니다. 아래와 같은 코드로 주문을 넣고있는데 옵션종목 매도면 GetBidByCode 를 사용하고 옵션종목 매수면 GetAskByCode를 사용하고있습니다 예) var BxCallPrice = Option1.GetBidByCode(buycallcode,5); var BxPutPrice = Option1.GetAskByCode(buyputcode,5); Account1.OrderSell(buyputcode, putQuantity, BuyPutPrice, 1); 첨부파일에도 보시면 아시겠지만 주문가격이 모두 0.00으로 표기되고있고 주문상태는 오류발생으로 표기되고있습니다. 다른 곳에서는 주문상태는 시험적용으로 되어있는데 주문가격은 0.00으로 표기가 되고있습니다. 저함수를 써서 주문을 넣었는데 왜 주문상태에서는 0.00으로 표기되는지 궁금합니다 var Start var buycallcode var buyputcode var sellcallcode var sellputcode var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var callQuantity; var putQuantity; var buyQuantity = 3000000; var sellQuantity = 1; function Main_OnStart() { Main.MessageLog("시작"); Start = 1; } function Chart1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/" + Signal.signalKind); //매수진입 if(Signal.signalKind ==1) { UNum = Option1.uppersATM; LNum = Option1.lowersATM; CallPrice = new Array(UNum + LNum + 1); CallCode = new Array(UNum + LNum + 1); PutPrice = new Array(UNum + LNum + 1); PutCode = new Array(UNum + LNum + 1); for(var i = -LNum; i <= UNum; i++) { if(Option1.GetCurrent(0,i) <= 2.0) { CallPrice[i+LNum] = Option1.GetCurrent(0, i); CallCode[i+LNum] = Option1.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option1.GetCurrent(1, ii) <= 2.5) { PutPrice[ii+UNum] = Option1.GetCurrent(1, ii); PutCode[ii+UNum] = Option1.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } CC = -1; buycallcode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; buycallcode = CallCode[iii+LNum] } } PP = -1; buyputcode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; buyputcode = PutCode[iiii+UNum]; } } Start = 1; var BuyCallPrice = Option1.GetAskByCode(buycallcode,5); callQuantity = Math.round(buyQuantity / BuyCallPrice / 250000); Account1.OrderBuy(buycallcode, callQuantity, BuyCallPrice, 1); var BuyPutPrice = Option1.GetBidByCode(buyputcode,5); putQuantity = sellQuantity; Account1.OrderSell(buyputcode, putQuantity, BuyPutPrice, 1); Main.MessageLog("선물매수"); } //매수청산 if(Start == 1 && Signal.signalKind == 2) { var BxCallPrice = Option1.GetBidByCode(buycallcode,5); var BxPutPrice = Option1.GetAskByCode(buyputcode,5); Account1.OrderSell(buycallcode, callQuantity, BxCallPrice, 1); Account1.OrderBuy(buyputcode, putQuantity, BxPutPrice, 1); Main.MessageLog("선물매수청산"); } //매도진입 if(Signal.signalKind ==3) { UNum = Option1.uppersATM; LNum = Option1.lowersATM; CallPrice = new Array(UNum + LNum + 1); CallCode = new Array(UNum + LNum + 1); PutPrice = new Array(UNum + LNum + 1); PutCode = new Array(UNum + LNum + 1); for(var i = -LNum; i <= UNum; i++) { if(Option1.GetCurrent(0,i) <= 2.0) { CallPrice[i+LNum] = Option1.GetCurrent(0, i); CallCode[i+LNum] = Option1.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option1.GetCurrent(1, ii) <= 2.5) { PutPrice[ii+UNum] = Option1.GetCurrent(1, ii); PutCode[ii+UNum] = Option1.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } CC = -1; buycallcode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; buycallcode = CallCode[iii+LNum] } } PP = -1; buyputcode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; buyputcode = PutCode[iiii+UNum]; } } Start = 1; var BuyCallPrice = Option1.GetBidByCode(buycallcode,5); callQuantity = sellQuantity; Account1.OrderSell(buycallcode, callQuantity, BuyCallPrice, 1); var BuyPutPrice = Option1.GetAskByCode(buyputcode,5); putQuantity = Math.round(buyQuantity / BuyPutPrice / 250000); Account1.OrderBuy(buyputcode, putQuantity, BuyPutPrice, 1); Main.MessageLog("선물매도"); } //매도청산 if(Start == 1 && Signal.signalKind == 4) { var BxCallPrice = Option1.GetAskByCode(buycallcode, 5); Account1.OrderBuy(buycallcode, callQuantity, BxCallPrice, 1); var BxPutPrice = Option1.GetBidByCode(buyputcode,5); Account1.OrderSell(buyputcode, putQuantity, BxPutPrice, 1); Main.MessageLog("선물매도청산"); } }
프로필 이미지
feelkdn
2018-07-20
2016
글번호 224527
답변완료

문의

예를 들어,매수주문 발생으로 설정된 3계약이 체결되었고 2계약이 매도 익절된 상태에서 손절신호가 발생되었다고 할 때 현재 포지션인 매수 1계약이 청산되어 무포지션 상태가 되어야 되는데, 현재 포지션 잔량이 인식되지 않아 매수 3계약을 청산하여 포지션이 2계약 매도 상태가 됩니다 손절신호시 현재 포지션 수량에 대해서만 반대신호가 나가도록 하고 또 미체결 포지션을 취소하거나 정정하는 해결 방안 알려주시면 감사하겠읍니다.
프로필 이미지
파일럿
2018-07-19
2057
글번호 224525
답변완료

문의

function Main_OnStart() { Main.MessageLog("시작") ; Main.SetTimer(5, 3000); a1.Refresh() ; } function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { if (lUp*dateID == 30000) { OrderCode = Main.GetOrderCode(order1.code); a1.SetBalance(OrderCode, 0) ; if (a1.Balance.position != 1 && a1.Balance.position != 2 ) { Position = 0 ; cnt = 0 ; Main.MessageLog("무포지션"); } if (a1.Balance.position == 1 ) { Position = -1 ; cnt = 1 ; Main.MessageLog("매도포지션"); } if (a1.Balance.position == 2 ) { Position = 1 ; cnt = 1 ; Main.MessageLog("매수포지션"); } } } 위수식으로 하이투자증권과 nh선물에서 같이 사용하고 있는데 디버깅 내용이 틀리게 나오는 이유가 원지요 ? 위의 평션 메인업데이트어카운트 내용은 원래 평션 메인온스타트에 삽입하여 사용되었는데 에러 수정한 예스스탁의 회신된 내용으로 수정한 부분입니다. 원래식에서 매매식은 타이머로 작성해서 매매는 작동하였는데(계좌잔고수량 인신은 오류) 평션 메인업데이트어카운트로 수정한 다음부터는 매매식이 작동을 않하는 이유는 뭔가요 ? 그리고 스팟에서 종목명을 연결선물지수로 지정했는데 어떤경우에는 체결메세지에 kp200 f 1809로 표시되는 이유는 뭔지요 ? 추가 질문입니다. 온타이머 펑션으로 엑셀 셋데이타를 업로드해서 사용하는데 딜레이 없이 실시간으로 업데이트 하려면 어떤게 해야 하나요 ? 온타이머로 하니까 스팟은 작동하는데 키가 먹지 않더군요. 딜레이도 딜레이지만,,,,
프로필 이미지
파일럿
2018-07-25
2162
글번호 224524
답변완료

선물차트 적용 미니선물 거래 피라미딩 예스스팟 로직오류..

아까 전화로 문의드렸었습니다. 3개의 시스템 전부 선물에 적용하고 미니선물로 거래하는 피라미딩 로직입니다. 계좌명은 동일하게 설정하였습니다. 진입은 3개의 시스템 전부 멀쩡하게 들어갔는데, 청산이 되지 않았습니다. 예전에 1개의 시스템 가지로 테스트 했을 때에는 문제 없이 진행되는 것을 확인했었습니다. 코드 자체에 오류가 있는건가요? 한번봐주시길 부탁드립니다. 날씨가 더운데 수고하세요. var Position; var OrderCode; var BID; var SID; var Bnum; var Snum; var BuyCnt; var SellCnt; function Main_OnStart() {A1.Balance Main.MessageLog("시작"); Position = 0; BuyCnt = 0; SellCnt = 0; OrderCode = Main.GetOrderCode(miniKP.code) } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/" + Signal.signalKind); if (Signal.signalKind == 1) { Position = 1; BID = A1.OrderBuy(OrderCode, Signal.count, miniKP.Ask(5), 0) Main.MessageLog("미니선물 매수"); } if (Position==1 && Signal.signalKind == 2) { if (BuyCnt>0) { A1.OrderSell(OrderCode, BuyCnt, miniKP.Bid(5), 0) Main.MessageLog("미니선물 매수 청산"); BuyCnt = 0; } } if (Signal.signalKind == 3) { Position=-1; A1.OrderSell(OrderCode, Signal.count, miniKP.Bid(5), 0) Main.MessageLog("미니선물 매도"); } if (Position==-1 && Signal.signalKind == 4) { if (SellCnt>0) { A1.OrderBuy(OrderCode, SellCnt, miniKP.Ask(5), 0) Main.MessageLog("미니선물 매도 청산"); SellCnt = 0; } } } function Main_OnOrderResponse(OrderResponse) { if (Position == 1 && OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (Position == -1 && OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnNotifyFill(NotifyFill) { if (Position == 1 && NotifyFill.orderNum == BNum) { BuyCnt = BuyCnt + 1; } if (Position == -1 && NotifyFill.orderNum == SNum) { SellCnt = SellCnt + 1; } }
프로필 이미지
ktemu10k
2018-07-17
2230
글번호 224520

파일럿 님에 의해서 삭제되었습니다.

프로필 이미지
파일럿
2018-07-18
11
글번호 224519
답변완료

문의 드립니다.

예스스팟으로 개별종목을 검색한 후 일정시간동안 일정수량을 일정 간격으로 매수 후 매도하는 로직을 돌리려고 합니다. 예를들어 10시에 조건에 맞는 어떤종목이 검색되어 10시부터 11시까지 1시간동안 2분(120초) 간격으로 10주씩 매수한다고 했을때 매수 간격을 정확히 120초가 아닌 110초~130초 간격으로 매회 랜덤하게 변화를 주고 싶습니다. 그냥 타이머로는 매수간격 변화를 줄 수 없어 고민중입니다. 스팟에서 특정범위(위의 경우 110~130초)내에서 랜덤한 매수간격 구현이 가능한지 도움요청 드립니다.
프로필 이미지
흰수염고래
2018-07-15
2279
글번호 224518
답변완료

스팟식 문의

초보단계임을&#160;감안해주시기&#160;바라며&#160;문의드립니다. 매수&#160;3개를&#160;주문했는데&#160;2개가&#160;체결되고&#160;1개가&#160;미체결&#160;상태라면&#160;신규&#160;매수는&#160;않되도록&#160;하고&#160;나머지&#160;1개가&#160;매수조건에&#160;만족하면&#160;체결되거나,&#160;매도&#160;조건이&#160;되면&#160;매도&#160;조건에&#160;따라&#160;지정한&#160;수량으로&#160;매수된&#160;수량한도내에서&#160;청산되도록&#160;하고,다른&#160;예로&#160;매도&#160;3개&#160;체결된&#160;상태에서&#160;청산조건이&#160;되어&#160;2개는&#160;매수청산되고&#160;1개는&#160;매수&#160;청산대기&#160;상태에서&#160;신규&#160;매수조건에&#160;만족되더라도&#160;매수대기상태&#160;즉&#160;미체결&#160;주문이&#160;있다면&#160;신규&#160;매수주문이&#160;않되도톡&#160;하는&#160;참조수식&#160;부탁드립니다
프로필 이미지
파일럿
2018-07-13
2179
글번호 224517
답변완료

사용자 정의 모듈 작성 화면 크기 좀 늘려주세요

창이 너무 작아서 코드가 조금만 길어져도 코드 보기가 너무 불편합니다 창크기 조절 기능이나 전체화면 기능 추가해주시면 감사하겠습니다
프로필 이미지
훈sys
2018-07-11
2368
글번호 224513
답변완료

전종목 백테스팅 방법 문의드립니다

전략A를 만들고 전체 종목에 차례대로 백테스트하고 각 종목 수익률을 뽑고자합니다. 수식을 어떻게 짜야하는지 문의드립니다.
프로필 이미지
2ndbus
2018-07-11
2240
글번호 224512
답변완료

수식에 오류가 발생했습니다. 수정 부탁합니다.

안녕하세요. 고생이 많습니다. 문의번호 1722번 문의 관련입니다. 보내주신 수식을 예스트레이드로 돌려보니 아래와 같은 에러가 발생되네요. 수정부탁 드립니다. <에러발생내역> 1. 줄번호 193 ReferenceError: count5 is not defined ->첨부파일1 2. 종목1(코스닥150인버스)첫매도시간을 외부변수에 지정된 시간(15:00시)에 매도가 되어야 하는데 매도가 되지않고 매수가됨 -> 첨부파일 2 3. 분활매수 횟수 및 매도횟수는 외부변로 지정하여 초기값이 3회분할매수 및 분할매도 하게끔되어 있으나 1또는 2회만 분할 매수 및 분할매도가 실행됨 -> 첨부파일2, 3 4. 첨부파일4는 보내주신 스팟코딩 자료입니다. 수정부탁합니다 <전략> 1. 장시작과 동시에 코덱스코스닥150선물 인버스 매수(251340) --> 인버스매수시간 외부변수로 지정, 인버스 분할매수횟수 외부변수로 지정 2. 매수한 코스닥150선물인버스를 15:00 에 매도 -> 매도시간 외부변수로 지정, 매도시 분할매도횟수 외부변수로 지정 3. 코덱스코스닥150레버리지(233740) 15:01에 매수 -> 코덱스코스닥150레버리지 매수시간 외부 변수로 지정, 분할매수횟수 외부변수로 지정 4. 매수한 코스닥150 레버리지 익일 시가에 매도 -> 매도시간 외부변수로 지정, 분할매도횟수 외부변수로 지정 5. 주식계좌에서 etf 매매비중(%)을 외부변수로 지정-> 예) 주식계좌에 1000만원 있을 때 500만원만 etf로 매매시의 비중
프로필 이미지
택군아
2018-07-09
2356
글번호 224509