커뮤니티
예스스팟 Q&A
유로파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 외에 다른 콜백 함수명이나 수신 조건을 사용해야 하는 경우가 있는지 답변 바랍니다
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);}
2026-05-30
111
글번호 232222