커뮤니티

예스스팟 Q&A

유로파54 님에 의해서 삭제되었습니다.

프로필 이미지
유로파54
2026-06-26
7
글번호 232588
답변완료

ReqMarketData -> OnRcvMarketData 0틱 현상 문의

​안녕하세요. 예스스팟을 이용 중인 사용자입니다.​장중에 스크립트에서 Main.ReqMarketData(종목코드)로 실시간 시세를 등록하면, **리턴값은 정상(양수, -1 아님)**으로 나옵니다.​하지만 그 이후 **Main_OnRcvMarketData 이벤트가 단 한 번도 발생하지 않는 현상(0틱)**이 지속되고 있습니다.​동일한 시점에 일반 HTS 내장 주문창이나 관심종목 창에서는 해당 종목의 현재가가 실시간으로 정상 변동하는 것을 확인했습니다. 스크립트에서 30초마다 ReqMarketData를 재등록하도록 유도해도 마찬가지로 0틱 상태가 유지됩니다.​이와 관련하여 기술적 답변을 요청드립니다.​1. 추가적인 권한이나 설정이 필요한지:스크립트 영역에서 OnRcvMarketData로 실시간 시세를 받으려면, 일반 HTS 시세 외에 추가로 필요한 요건이 있습니까? (예: ① 실시간 시세 수신 권한/레벨 별도 신청, ② 계좌/시세 사용 설정에서 별도로 활성화해야 할 항목 등)​2. 종목 객체 보관(참조) 관련:ReqMarketData로 받아온 시세 객체(MarketData)를 전역 변수나 배열(예: MK.push(MarketData))에 명시적으로 보관해야만 이벤트가 유지되는 구조입니까? 전역 배열 보관 처리가 빠진 채 코드만 쓰면 가비지 컬렉션 등으로 인해 예스스팟 엔진이 콜백을 주지 않을 수도 있는지 확인 부탁드립니다.3. ​기타 원인:OnRcvMarketData 외에 다른 콜백 함수명이나 수신 조건을 사용해야 하는 경우가 있는지 답변 바랍니다
프로필 이미지
megapro
2026-06-19
36
글번호 232507

박새로이 님에 의해서 삭제되었습니다.

프로필 이미지
박새로이
2026-06-18
25
글번호 232498
답변완료

질문드립니다.

안녕하세요. 아래 수식의 문제점이 있을까요? 감사합니다. ------------------------------------------------------------/* 콜진입 */ if ( BuyCond == 11 && HHMMSS >= 090035 && HHMMSS <= 144055 ) { var CP = 0; var Callcode = ""; for ( var i = -Option1.lowersATM; i <= Option1.uppersATM; i++ ) { if ( Option1.GetAsk(0, i, 1) > 1.0 && Option1.GetAsk(0, i, 1) < 5.0 && ( CP == 0 || ( CP > 0 && Option1.GetAsk(0, i, 1) < CP ) ) ) { CP = Option1.GetAsk(0, i, 1); Callcode = Option1.GetATMCallRecent(i); if( Option1.GetAsk(0, i, 1) > 5.0 && BuyCond == 11 ) { BuyCond = -3; Main.MessageList("BuyCond:" ,BuyCond); } } }
프로필 이미지
지나리
2026-06-16
50
글번호 232459
답변완료

모의거래 장 운영

NH선물 계좌로 해외선물 시스템매매를 예스스스팟으로 모의 거래 중입니다.조만간 실 걸래를 할 예정 입니다만,24:00 이후는 모의 거래 써비스가 안 되고 있는것 같습니다.모의 거래는 각 증권사가 운영 하나요?아니면 예스스탁에서 직접 운영 중 인가요?해외 선물거래는 24:00 이 후에 본격적인 거래가 이뤄지는데,이를 적용해보지 못하는 것이 상당히 아쉽습니다.모의거래를 각 증권사에서 운영을 하든, 아니면, 예스스탁에서 직접 운영을 하든,실거래와 동일하게 적용해 볼 수 있도록 동일한 운영을 해 주셨으면 감사 하겠습니다.
프로필 이미지
너무조아
2026-06-11
49
글번호 232362
답변완료

예스스팟 활용, 주문 미체결시 자동 정정주문 방법 문의

안녕하세요!미니 KOSPI 200 선물연결을 거래할 떄, 호가가 널뛰듯이 움직여, 자동매매 셋팅하면서현재가 +- 5로 진입 청산 설정할 경우, 주문체결이 안되는 경우가 발생하고 있습니다.시장가 셋팅시에는 서킷브레이크 등 발동시 시장가 주문 자체가 들어가지를 않습니다.예스스팟에서 기본적으로 현재가 +-5로 진입 및 청산주문 미체결시, 2초이내 동일하게 현재가 +-5로정정 주문을 하는 스크립트 및 예스스팟 셋팅 방법을 문의드립니다.감사합니다.
프로필 이미지
태산정복
2026-06-10
68
글번호 232358
답변완료

트레일링스탑을 위한 최고가 유지

안녕하세요. 주식을 매수한 후 트레일링 스탑을 구현하는 프로그램을 구현하려고 합니다.예제를 보면 매수 이후 최소수익 이후 최고가 대비 하락비율로 처리하게 되던데,최고가 이후 2~3일 후에 해당 하락율에 도달한다면, 오버나이트하여 예스트레이더를 재시작하게 되는데 최고가를 어떻게 처리해야 하나요?
프로필 이미지
화성인
2026-06-09
53
글번호 232329
답변완료

질문드립니다.

안녕하세요. 아래 식은 현재가격 1.0 이하의 콜/풋 옵션 중 가장 높은 가격의 종목을 선정하는 식입니다. 그런데, 현재가격 1.0이하가 아니라 매도호가 1.0이하의 콜/풋 옵션 중에 가장 높은 가격의 종목을 선정하는 식도 가능한가요? 매번 큰 도움 주셔서 감사드립니다. /*스크립트시작-----------------------------------------------------*/var UNum; var LNum;var CallCode; var CallPrice;var PutCode; var PutPrice;var CC; var PP;var CallOrderCode; var PutOrderCode;//차트에서 신호가 발생하면function Chart1_OnRiseSignal(Signal){ //해당 신호가 매수신호이면 if (Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //1.0이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 UNum = Option.uppersATM; //ATM아래 행사가 갯수 LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 1.0이하이면 if (Option.GetCurrent(0, i) <= 1.0) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//1.0보다 크면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var ii = -UNum; ii <= LNum; ii++) { //ii단계 풋종목이 1.0이하이면 if (Option.GetCurrent(1, ii) <= 1.0 ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[ii+UNum] = Option.GetCurrent(1, ii); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else //1.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[ii+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[ii+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageList("--------------------------------------------"); Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC); Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP); //콜옵션종목 매수 Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 1);//콜옵션종목 매수 Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 1); }}
프로필 이미지
지나리
2026-06-05
57
글번호 232288

흰수염고래 님에 의해서 삭제되었습니다.

프로필 이미지
흰수염고래
2026-06-02
7
글번호 232251
답변완료

자동매매식 좀 부탁드립니다.

이거는 자동 매매식이고여........ 밑에 충족하는 종목을 매수 할수 있도록 좀 부탁드립니다.var timer5 = 2; //5초var 매수금 = 100000;var OrderList = [];var MKList = [];var req;function Main_OnStart(){ //1번 타이머, 1초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = [];}function Main_OnTimer(nEventID){ var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS > 090000 && HHMMSS < 151500) { //종목검색 수행 Main.ReqPowerSearch("최고") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvItemList(aItemList, nCount){ Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvMarketData(MarketData){ if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 Account1.OrderBuy(MarketData.code,1,0,1); //Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } }}function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환}--위에자동매매식에서 밑에 종목 검색에 일치하는 종목매수 자동매매식 좀 알려주세요 그리고 밑에식에 충족시 1분봉 100억이 들어오고 매도까지 다른 종목은 매수 안되게 부탁드립니다<밑에식은 3가지가 동시 돌파하는 종목 검색식입니다.>input : P(3);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate != Bdate[1] and(DayOfWeek(Bdate)< DayOfWeek(Bdate[1]) orDateToJulian(Bdate) >= DateToJulian(Bdate[1])+7) Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}2input : P(10);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate != Bdate[1] and(DayOfWeek(Bdate)< DayOfWeek(Bdate[1]) orDateToJulian(Bdate) >= DateToJulian(Bdate[1])+7) Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}3input : P(3);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate > Bdate[1]+30 Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}
프로필 이미지
wkri
2026-05-30
111
글번호 232222