커뮤니티

예스스팟 Q&A

입문자 - 예스 스팟,트레이딩 기능 구현 질문

안녕하세요.처음으로 예스 스탁(트레이딩,스팟)을 알아보고 있습니다질문은 예스 스팟으로1. 선물 데이터를 참조로 주식 실시간 자동매매 기능 구현 가능한가요?2. 만약 1번이 가능하다면 백테스팅(선물 참조 주식매매)기능도 가능할까요?3. 혹시 1~2가 예스스팟으로 안된다면 가능 방법은 있을까요?
프로필 이미지
쭈니 서울
2026-06-28
2
글번호 232595

유로파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
37
글번호 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
51
글번호 232459
답변완료

모의거래 장 운영

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

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

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

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

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

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

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