커뮤니티

예스스팟 Q&A

동시호가 지정가 주문관련 문의드립니다.

function Main_OnStart(){ Main.SetTimer(1, 5000); //무슨 뜻인가요?}function Main_OnTimer(nEventID){ var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 153505 && HHMMSS <= 153605 ) { Main.KillTimer(1); var num = Account1.GetTheNumberOfBalances(); if (num > 0) { for (var i = 0; i < num; i++) { Account1.SetBalance(i); if (Option1.GetCurrent(Account1.Balance.code) > 0) { if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1) } } else { if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } }}안녕하세요.옵션 매수잔고가 있으면 마감동시호가에 시장가 청산주문 발생하게 하는 로직입니다.(예스스탁에서 도움주셔서 잘 사용하고 있습니다.^^)최근에 변동성이 커지다보니 실시간 가격제한이 적용되는 종목인지 여부에 따라 시장가청산주문이 주문거부되는 경우가 발생합니다.(yt)그래서,동시호가 시장가 exitlong주문을 지정가 0.5pt가격에 주문을 내고 싶습니다.(옵션매도는 진입을 안하니 exitshort부분은 상관없습니다.)수고스러우시겠지만, 수정 부탁드립니다. 감사합니다.
프로필 이미지
ujm
2026-03-03
4
글번호 230868

동시호가 주문 오류 문의

안녕하세요.오전 8시50분~9시 사이 동시호가 주문시, 아래와 같은 주문에서 "주문단가가 하한가보다 낮습니다"라는 오류메세지가 뜹니다.아마도 호가 정보를 받아오지 못하는 것 같은데, 어떤 부분에 오류가 있는지 확인 부탁드립니다.<주식객체 수신>Main.ReqMarketData({code:StockList[rcv], exchangeKind:1});<오전 NXT거래 - 오류없이 주문 완료>A1.OrderBuy({exchangeKind :4, code:codex, count:buyN, orderPrice:Stock[codex].Ask(3), priceKind:0});<오전 동시호가 주문 - 오류 발생>A1.OrderBuy({exchangeKind :2, code:codex, count:buyN, orderPrice:Stock[codex].Ask(5), priceKind:0});
프로필 이미지
shining9
2026-03-03
206
글번호 230829

안녕하세요. 문의 드립니다.

예스스팟 스크립트에서 KP200 선물 매수호가건수, 매도호가건수를 가져오려면 어떤 객체와 속성명을 써야 하나요? MarketData는 주식 전용이라 안 된다고 나옵니다
프로필 이미지
오늘도수익
2026-02-27
1459
글번호 230809

계좌객체 관련 몇가지 문의드립니다.

next증권해외선물, im국내선물 예스트레이더를 이용하고 있습니다.계좌객체를 A1이라고 했을때1. A1.Refresh();를 실행할수 있는 시간당 횟수 제한이 있는지 문의드립니다. (next증권 예스스팟에서 10초마다 refresh 실행하도록 잠깐 테스트 했는데 3번요청하면 응답이 1번만 오는것 같아 문의드립니다.)2. A1.GetTotalCount(0,0)와 같이 Get0000을 실행하면 업데이트 없이 local의 A1 객체에 저장된 값을 불러오는것인지 서버에서 최신정보를 불러오는것인지 궁금합니다.
프로필 이미지
dons
2026-02-26
1060
글번호 230794

문의드립니다.

매수 조건주가가 20이평선을 아래서 위로 돌파 하고 난 후에 (주가가 20이평선을 닿아 있을 때는 적용 되지 않습니다. 꼭 20이평선 위에 있을 때)TRIX 14 9 기준선0 아래 부분에서 TRIX선이 시그널선을 골든크로스 할 때 매수청산 또는 손절은 주가가 20이평선을 아래로 깨고 이탈 할 때 매도 청산완료-----------------------------------------------------------------------------매도 조건주가가 20이평선을 위에서 아래로 돌파 하고 난 후에 (주가가 20이평선을 닿아 있을 때는 적용 되지 않습니다.꼭 20이평선 아래에 있을 때)TRIX 14 9 기준선0 위 부분에서 TRIX선이 시그널선을 데드크로스 할 때 매도청산 또는 손절은 주가가 20이평선을 위로 돌파 할 때 매수 청산완료그리고 수량을 입력할 수 있도록 추가 부탁드립니다.감사합니다^.^
프로필 이미지
선물대장
2026-02-25
866
글번호 230788

안녕하세요. 문의 드립니다.

안녕하세요, 예스스팟 스크립트에서 삼성전자 수급(매수잔량-매도잔량)을 가져오려고 합니다.MarketData1 객체에 삼성전자(005930)를 연결하고수급데이터 '사용'으로 설정했는데MarketData1.BidQtyMarketData1.AskQty두 프로퍼티가 모두 undefined로 나옵니다.질문1) MarketData1에서 매수잔량, 매도잔량을 가져오는 정확한 프로퍼티명이 무엇인가요?질문2) MarketData1_OnReceive() 이벤트 함수를 작성했는데 호출이 안 됩니다. 예스스팟에서 실시간 수급 이벤트 함수명이 무엇인가요?사용 환경: 예스스팟, 스크립트 JavaScript
프로필 이미지
오늘도수익
2026-02-25
44
글번호 230773

글번호 229548 답변 건

글번호 229548 답변 수식으로 2월20일 금요일밤에 위클리월요일만기 상품을 테스트 해보았습니다.야간선물 거래시간에 모의투자로 돌려보았는데 옵션 양매수 주문이 나가지 않았습니다.모의투자라 주문이 안나간 건지.매수주문 시 매도5호가 주문인데 매도호가 간격이 주간장처럼 조밀하지 않고 듬성듬성 있어선지.거래시간이 금일야간에서 다음날 오전에 걸쳐있어서 날짜변경에 오류가 있어선지 .무슨 이유인지 모르겠습니다.수정 전 수식은 주간 거래시 양매수 주문과 청산이 정상적으로 작동하는 코딩입니다.야간옵션 양매수는 금일 오후와 다음날 오전까지 이틀에 걸친 거래이므로 날짜가 바뀌는 것과 거래시간 설정에서 오류가 있을 것 같습니다.항상 고맙습니다.
프로필 이미지
좌오비우오비
2026-02-21
114
글번호 230673

shining9 님에 의해서 삭제되었습니다.

프로필 이미지
shining9
2026-02-21
100
글번호 230671

문의드립니다

아래와 같이 이용중인데요하루 매수 하는 종목수를 3개이하로 제한하려면 뭘 추가해야 할까요?var DailyMaxStocks = 3;를 추가 했는데 안되서 문의드립니다var timer5 = 2; // 2초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 < 100000) {// 종목검색 수행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.slice(0, 종목제한수); // 한정된 수만 가져오기} 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]);// 제한 수를 넘는 경우 breakif (OrderList.length >= 종목제한수) {break;}}}}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 반환}
프로필 이미지
열심히하는
2026-02-20
103
글번호 230644

예스스팟 옵션 챠트 자동 갱신 및 데이터 추출 관련 문의 입니다.

앞전에 주신 소스 입니다.var ATM변경 = 2; //2행사가 변경var OP,ATM,CT;var F;var C1,C2,C3,C4,C5;var P1,P2,P3,P4,P5;function Main_OnStart(){ var D1 = Option1.GetRemainDays(0, 0); var D2 = Option2.GetRemainDays(0, 0); var D3 = Option3.GetRemainDays(0, 0); Main.MessageList("Month",D1); Main.MessageList("Week월",D2); Main.MessageList("Week목",D3); OP = 1; if (D2 < D1) OP = 2; if (D3 < D1) OP = 3; ATM = 0; Main.MessageList("OP",OP); Main.SetTimer(1,5000);}function Main_OnTimer(nEventID){ if (nEventID == 1) { var Change = false; if (OP == 1) { curATM = Option1.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option1.GetCodeByExercisePrice(0,ATM); C2 = Option1.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option1.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option1.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option1.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option1.GetCodeByExercisePrice(1,ATM); P2 = Option1.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option1.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option1.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option1.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP1",C1,C2,C3,C4,C5); Main.MessageList("OP1",P1,P2,P3,P4,P5); } } if (OP == 2) { curATM = Option2.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM,ATM+2.5,ATM+5.0,ATM+7.5); ATM = curATM; Change = true; F = "00000000"; C1 = Option2.GetCodeByExercisePrice(0,ATM); C2 = Option2.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option2.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option2.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option2.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option2.GetCodeByExercisePrice(1,ATM); P2 = Option2.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option2.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option2.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option2.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP2",C1,C2,C3,C4,C5); Main.MessageList("OP2",P1,P2,P3,P4,P5); } } if (OP == 3) { curATM = Option3.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option3.GetCodeByExercisePrice(0,ATM); C2 = Option3.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option3.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option3.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option3.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option3.GetCodeByExercisePrice(1,ATM); P2 = Option3.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option3.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option3.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option3.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP3",C1,C2,C3,C4,C5); Main.MessageList("OP3",P1,P2,P3,P4,P5); } } if (Change == true) { if (CT != null) { var a = Main.RemoveObject(CT); Main.MessageList("차트삭제:",a); } Main.MessageList(C1,C2,C3,C4,C5); Main.MessageList(P1,P2,P3,P4,P5); //기본종목셋팅(연결선물 주간장,5분 5000개, 갭보정안함, 수정주가처리 안함) var data1 = new ReqChartItem(F,5,CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //참조데이터 셋팅(ReqChartItem를 이용해 종목과 주기등지정) //data2종목 var Data2 = new ReqChartItem(C1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data3 = new ReqChartItem(C2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data4 = new ReqChartItem(C3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data4종목 var Data5 = new ReqChartItem(C4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data5종목 var Data6 = new ReqChartItem(C5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data6종목 var Data7 = new ReqChartItem(P1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data7종목 var Data8 = new ReqChartItem(P2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data8종목 var Data9 = new ReqChartItem(P3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data9종목 var Data10 = new ReqChartItem(P4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data10종목 var Data11 = new ReqChartItem(P5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //참조 데이터는 복수로 지정이 가능하므로 Array에 담아 지정 var RefSet = new Array(Data2,Data3,Data4,Data5,Data6,Data7,Data8,Data9,Data10,Data11); //차트 셋팅 제외하고 시스템,자표, 참조데이터는 생략가능, 생략하면 null로 지정 var A = Main.ReqChartEx(data1, null, null, RefSet); Main.MessageList("차트재생성",A); } }}function Main_OnRcvChartEx(ChartEx){ CT = ChartEx;}안녕하세요, 공유해 주신 소스 코드를 공부하고 있는 사용자입니다. 올려주신 로직이 매우 훌륭하여 제 시스템에 적용해 보려는데, 몇 가지 기술적인 확신을 얻고 싶어 질문을 남깁니다.1. 선물 및 옵션 차트의 독립적 운용 가능 여부현재 소스에서 ReqChartEx를 통해 하나의 확장 차트에 선물과 옵션 10종목을 모두 담고 있습니다. 제가 필요한 것은 선물 차트와 옵션 차트를 각각 별도로(또는 특정 목적에 맞게) 활용하는 것인데, 이 소스 구조 내에서 옵션 종목이 교체될 때 각각의 차트 데이터가 독립적으로 갱신되도록 제어하는 것이 가능한가요?2. 차트 갱신 시 기존 데이터 유지 문제등가격(ATM)이 변경되어 Main.RemoveObject(CT)로 기존 차트를 삭제하고 ReqChartEx로 새로 만들 때, 이전 차트에서 수집하던 실시간 데이터나 지표 값들이 초기화되지 않고 연속성을 가질 수 있는 방법이 소스 내에 고려되어 있는지 궁금합니다.3. 시세 업데이트(OnUpdateTick) 활용차트가 자동으로 변경된 이후, Main_OnUpdateTick 같은 핸들러를 통해 새로 교체된 옵션 종목들의 시세 데이터를 실시간으로 가로채서 외부 파일로 저장하거나 계산에 활용하는 데 최적화된 구조인지 조언 부탁드립니다.
프로필 이미지
오늘도수익
2026-02-19
44
글번호 230617