커뮤니티

예스스팟 Q&A

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

프로필 이미지
흰수염고래
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
24
글번호 232222

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

프로필 이미지
wkri
2026-05-28
25
글번호 232182
답변완료

글번호 232034 관련해서

안녕하세요.일전에 글번호 232034 관련해서 코딩자료 수정해 주셨는 데 매수가 되지 않네요. 수고스럽겠지만 다시 한번 수고 좀 부탁 드립니다.늘 수고에 감사드립니다.
프로필 이미지
victor
2026-05-27
40
글번호 232162

아미고 님에 의해서 삭제되었습니다.

프로필 이미지
아미고
2026-05-22
43
글번호 232137

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

프로필 이미지
victor
2026-05-22
13
글번호 232136
답변완료

여러종목 주문시 오류(연결끊김)

안녕하세요. Spot으로 거래시, 특정시간에 보유 주식비중이 너무 높으면 보유주식의 일정 %를 일괄매도 하는 logic을 사용하고 있습니다.아래와 같이 for문을 사용하여 보유주식을 매도 중인데,보유종목이 많은 경우(현재 보유종목 약 30개) 주문도중 접속이 끊기면서 매도가 되지 않는 경우가 종종 있습니다.(특히 오늘처럼 지수가 크게 올라가거나, 내려가는 경우 접속이 끊기는 것 같습니다.)for (var i=0; i<List.length; i ++) var orderN = 매각수량; A1.OrderSell(종목, orderN, 0, 1);위와 같이 여러종목 일괄 매도시 오류가 나지 않기 위해서는 어떻게 수식을 조정해야 할지요?만약, 매도 주문 중간에 1초 정도 pause하는 경우 주문 안정성이 증가한다면 해당 방법 안내 부탁드립니다.
프로필 이미지
shining9
2026-05-21
70
글번호 232127
답변완료

건의 사항입니다.

몇년동안 유진 예스트레이더을 이용중인 유저입니다.사용하면서 불편한 점을 말씀드려 앞으로의 예스스팟이 좀 더 많은 사랑을 받는 프로그램이 되었으면 합니다.1. 틱차트 오류 문제- 1년 안에 최근들어 틱차트를 통한 전략을 실행시키면 종종 차트 오류 안내 메세지(메세지 내용은 '지정되지 않은 오류' 라고 뜸)가 뜨면서 프로그램이 종료됩니다. 이는 껐다가 켜도 마찬가지이며 프로그램을 다시 지우고 실행시켜 틱차트 전략을 실행시키지 말아야 프로그램이 작동됩니다. 이러한 부분은 예외처리나 오류 처리를 예외 처리를 해주어 프로그램이 닫히지 않도록 처리해주면 좋을 것 같습니다.2. 예스 스팟 지표 문제- 윈도우 10 환경에서 예스스팟 전략중 확장차트의 지표를 설정할 때 바로 적용이 되지 않고 다시 지표설정을 눌러야 변경되는 버그가 아직도 해결되지 않고 있습니다. 한번에 할 수 있는 일을 두번해야하니 불변함을 느껴 꼭 개선해 주었으면 합니다.분명 일이 많고 고생많으시지만 이러한 부분은 저만 느끼는 부분이 아닐 것 같아 이렇게 글을 올립니다.
프로필 이미지
dean
2026-05-21
63
글번호 232109
답변완료

스팟전략 적용시 "시험 적용"의 효과 문의

시험적용이 선택되면, 어떤 제약이 있는 건지, 정확히 알고 싶습니다. 어디 정리된 자료 없나요?
프로필 이미지
개똥이
2026-05-19
59
글번호 232102
답변완료

예스스팟 관련해서

안녕하세요.일전에 도움을 받아서 매도 조건를 수정 했었는 데 손실이 너무 커서아래와 같이 매도를 수정 하려고 합니다.1. 이익보존 3.5 % 에 익절 하기전에 3분봉 기준 볼린저밴드(a,a)상한선 이탈 하지 않았으면 익절 하지 않고 보류 하고 있다가 볼린저밴드( a,a )상한선 이탈 하면 익절 합니다.이익보존 3. 5%에 도달 했을 때 3분봉 기준 볼린저밴드(a,a)상한선 이탈 했으면 익절 합니다.2 이익실현 7%이 익절 하기전 3분봉 기준 볼린저밴드(a,a) 상한선 이탈 하지 않았으면 익절 하지 않고 있다가 3분봉 기준 볼린저밴드( a,a) 상한선 이탈하면 익절한다.이익실현 7%에 도달 했을 때 3분봉 기준 볼린저밴드(a,a) 상한선 이탈 했으면 익절한다.AI 도움으로 아래와 같이 만들었는 데, 수고스럽지만 확인 좀 부탁 드립니다.늘 수고 해주심에 머리 숙여 감사함을 전 합니다.var timer5 = 5; // 5초 간격 종목검색var 매수금 = 50000;var OrderList = [];var MKList = [];var ChartList = []; // 3분봉 차트 객체 저장 배열var req;// 매도 조건 설정var SELL_GAIN = 7.0; // 이익실현 기준 7%var SELL_BREAK = 3.5; // 이익보존 기준 3.5%var SELL_LOSS = -2.0; // 손절 -2%// 볼린저밴드 변수var BB_PERIOD = a; // 볼린저밴드 기간var BB_D = a; // 볼린저밴드 승수function Main_OnStart(){ // 1번 타이머: 종목 검색용 (5초) Main.SetTimer(1, timer5 * 1000); // 3번 타이머: 실시간 잔고 수익률 감시용 (2초마다 체크) Main.SetTimer(3, 2000); MKList = []; ChartList = []; Main.MessageList("자동매매 시작 (익절/보존: 볼린저밴드 3분 a,a 연동)"); // 기존 계좌에 있는 종목들에 대해서도 3분봉 차트를 요청 var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); RequestChartEx(Account1.Balance.code); }}function Main_OnTimer(nEventID){ var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // 1. 매수 종목 검색 (09:00 ~ 15:20) if (nEventID == 1 && HHMMSS > 090000 && HHMMSS < 152000) { Main.ReqPowerSearch("기본전략"); } // 2. 종목 객체 요청 지연 처리 if (nEventID == 2) { Main.KillTimer(2); Main.ReqMarketData(OrderList[req]); } // 3. 매도 감시 로직 (수익률 + 볼린저밴드 체크) if (nEventID == 3) { var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); var code = Account1.Balance.code; var currentRate = (Account1.Balance.current / Account1.Balance.avgUnitCost - 1) * 100; var currentPrice = Account1.Balance.current; // 손절 처리 (볼밴 무관하게 -2% 도달 시 즉시 매도) if (currentRate <= SELL_LOSS) { Account1.OrderSell(code, Account1.Balance.count, 0, 1); Main.MessageList("▼손절(-2%) 매도:", code, "수익률:", currentRate.toFixed(2)); continue; // 손절했으므로 다음 종목으로 넘어감 } // 수익권(3.5% 이상)일 때 볼린저밴드 상한선 계산 및 이탈 확인 if (currentRate >= SELL_BREAK) { var myChart = GetChartObj(code); // 해당 종목의 3분봉 차트 객체 찾기 if (myChart != null && myChart.GetReqCount() >= BB_PERIOD) { // 볼린저밴드 상한선 계산 로직 (MA + D * StdDev) var sum = 0; for (var k = 0; k < BB_PERIOD; k++) { sum += myChart.GetClose(1, k); } var ma = sum / BB_PERIOD; var sumVar = 0; for (var k = 0; k < BB_PERIOD; k++) { var diff = myChart.GetClose(1, k) - ma; sumVar += (diff * diff); } var stddev = Math.sqrt(sumVar / BB_PERIOD); var bbUp = ma + (BB_D * stddev); // 볼린저밴드 상한선 // 이탈 조건: 현재가가 상한선 아래에 있을 때 매도 if (currentPrice < bbUp) { if (currentRate >= SELL_GAIN) { Account1.OrderSell(code, Account1.Balance.count, 0, 1); Main.MessageList("★이익실현(7%이상) 매도 - 상한선 이탈:", code, "수익률:", currentRate.toFixed(2)); } else if (currentRate >= SELL_BREAK && currentRate < SELL_GAIN) { Account1.OrderSell(code, Account1.Balance.count, 0, 1); Main.MessageList("●이익보존(3.5%이상) 매도 - 상한선 이탈:", code, "수익률:", currentRate.toFixed(2)); } } // 주가가 상한선보다 크거나 같으면 (currentPrice >= bbUp) 홀딩! } } } }}function Main_OnRcvItemList(aItemList, nCount){ Main.KillTimer(1); OrderList = []; if (nCount >= 1) { 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, Math.floor(매수금 / MarketData.Ask(1)), 0, 1); Main.MessageList(MarketData.code + " 매수 수행"); // 매수와 동시에 3분봉 차트 객체 요청 (볼밴 감시용) RequestChartEx(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); } }}// ---------------------- 차트 객체 관련 함수 ---------------------- //// 3분봉 차트 요청 함수function RequestChartEx(code) { // 중복 요청 방지 for (var i = 0; i < ChartList.length; i++) { if (ChartList[i].GetCode(1) == code) return; } // ReqChartItem(종목코드, 주기, 주기구분, 조회건수, 조회건수구분, 수정주가여부, 갭보정여부) var reqChart = new ReqChartItem(code, 3, CHART_PERIOD_MINUTE, 50, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(reqChart);}// 요청한 차트 객체 수신 시 배열에 저장function Main_OnRcvChartEx(ChartEx){ ChartList.push(ChartEx);}// 배열에서 특정 종목의 차트 객체 찾기function GetChartObj(code) { for (var i = 0; i < ChartList.length; i++) { if (ChartList[i].GetCode(1) == code) { return ChartList[i]; } } return null;}// ----------------------------------------------------------------- //function IsStockInAccount(stockCode) { var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalanceIndex(i); if (stockCode == Account1.Balance.code) { return true; } } return false;}
프로필 이미지
victor
2026-05-14
137
글번호 232034