커뮤니티
예스스팟 Q&A
답변완료
스팟전략 적용시 "시험 적용"의 효과 문의
시험적용이 선택되면, 어떤 제약이 있는 건지, 정확히 알고 싶습니다. 어디 정리된 자료 없나요?
2026-05-19
165
글번호 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;}
2026-05-14
279
글번호 232034
답변완료
자동 매도 문의드립니다.
안녕하세요.국내 주식 주문을 예스랭귀지와 예스스팟으로 자동 매수,매도를 할려고 합니다.(IM증권)매수용 랭귀지와 스팟은 만들었는데자동 매도 주문 작성을 문의하고자 합니다.예스스팟으로 자동 매수를 하고(매수용 스팟은 작성하였습니다.)[[[손절2%, 상승 3%에 익절 50%, 나머지는 추가 상승이나 익절한 상태에서 3% 하락시 전량 매도.]]]입니다.국내 주식 주문용 입니다.감사합니다.
2026-05-07
283
글번호 231941
민리 님에 의해서 삭제되었습니다.
2026-05-04
2
글번호 231867
답변완료
스팟에서 fillcount는..
스팟에서 fillcount는..단일값을 가져오는건가요? 누적값을 가져오는건가요?
2026-05-02
213
글번호 231860
답변완료
문의 드립니다
이 설정이 잔고에 동일 종목이 있는 경우 재매수가 안되도록 설정이 되어 있는 상태인가요?재매수가 계속 가능하도록 수정을 하고 싶습니다.var timer5 = 5; //5초var 매수금 = 100000;var OrderList = [];var MKList = [];var req;function Main_OnStart(){// 타이머 간격 설정Main.SetTimer(1, timer5*1000);}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 >= 90300 && HHMMSS < 151500){//종목검색 수행Main.ReqPowerSearch("급 100 P"); //파워종목검색명Main.MessageList("전고점돌파 종목 검색");}if (nEventID == 2){Main.ReqMarketData(Orderlist[req]);}}function Main_OnRcvItemList(aItemList, nCount, aValues){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){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);Account1.OrderBuy(MarketData.code,1,0,1); // 1주 시장가 주문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);}}}
2026-04-29
241
글번호 231817
답변완료
스팟 코딩 관련 문의 드립니다.
예스트레이더를 공부하고 싶어 이것저것 해보고 있습니다. 스크립트 메세지예스스팟에서 동작하는 프로그램을 만들려 하는데 예스트레이더 차트의 신호를 받야셔예스스팟에서 위와 같이 매매 동작하는 스팟 코드를 작성하려 하는데 작성 부탁 드립니다. (예시 종목 : 삼성전자 005930)
2026-04-24
241
글번호 231769
답변완료
다운로드가 안됩니다.(DMLib-Sample.zip, DMLib.zip)
https://help.yesstock.com/23fd121b-e719-8098-b87f-c4df04d52a8c링크에 들어가서 샘플예제보기와 프로그램 DLL을 다운로드하려고하는데 에러가 납니다.다운로드되게 확인 좀 해주세요.https://www.yesstock.com/Download/DMLib-Sample.zip,https://www.yesstock.com/Download/DMLib.zip
2026-04-23
222
글번호 231746
cjfdk 님에 의해서 삭제되었습니다.
2026-04-21
21
글번호 231703
답변완료
예스스팟 편집기의 글꼴크기나 화면크기를 조정할수 있는지요?
안녕하세요? 나이들어 공부하려니 힘든점이 하나둘이 아니더 군요.노안이라 그래서 인지 여스스팟 편집기에서 코딩들을 좀 해보려고 하는데글씨가 작아서 많이 힘이 듭니다. ㅎ방법이 있을까요?
2026-04-18
227
글번호 231669