커뮤니티

예스스팟 Q&A

관리자 님에 의해서 삭제되었습니다.

프로필 이미지
오아시스3
2025-10-01
4
글번호 226410

모라리 님에 의해서 삭제되었습니다.

프로필 이미지
모라리
2025-09-29
0
글번호 226408
답변완료

MarketData.Ask(1),0); 에서 0의 의미가 궁금합니다.

::::0의 의미:::: Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); 위 코드에서 마지막 0은 잘못된 것인가요? 1:신규주문 2:청산주문 3:정정주문 4:취소주문 으로 알고 있습니다. 아니면 예스스팟 고유의 다는 의미인가요?
프로필 이미지
쪼꼬아빠
2025-09-25
182
글번호 226406
답변완료

매도질문

가격이 갑자기 내려갈때요 2101 창에서 일괄청산해서 청산하려고 하는데 거래가 안되서 못팔았거든요. 시장가에 빠르게 매도할려면 어느 창에서 해야 하나요? 그냥 버튼만 한번 누르면 바로 시장가든 뭐든 좋으니까 빠르게 팔려면요. 자세히 좀 알려주세요. 그리고 2103 스탑로스 걸었는데 매도하시겠습니까? 창 뜨는거 없이 바로 매도되게 해주려면 뭘 눌러줘야해요?
프로필 이미지
미카다
2025-09-23
157
글번호 226402
답변완료

항상 감사드립니다. 또 예스스팟 스크립트 질문입니다.

안녕하세요. 항상 감사드립니다. 현재 쓰고 있는 스크립트에는 예스스팟 시작시의 평가금액대비 +4%가 되면 모든 종목들이 자동매도 되도록 설정이 되어 있습니다. 이 부분을 예스스팟 시작시의 평가금액대비 +4%가 아닌, 현재 계좌에 보유중인 모든 종목들의 손익의 총합의 평가금액이 투자원금대비 +4%가 되면 전부 자동매도 되도록 스크립트 설정이 가능할까요? (손실이 난 종목들을 바로 그날 정리하지 않고 가져가면서 기간이 얼마가 걸리든 상관없이 다른 종목에서 난 이익으로 전체 투자 원금의 +4%를 목표로 하는 전략입니다.) 다음은 현재쓰고 있는 스크립트 입니다. var timer5 = 3; // 3초 var 매수금 =100000 ; var 익절 = 1.09; var OrderList = []; var MKList = []; var SellList = []; var req; function Main_OnStart() { Main.SetTimer(1, timer5*1000); // 1번 타이머 , 3초 MKList = []; //오늘 매수한 종목관리 배열 초기화 V1 =Account1.GetBalanceETCinfo(100); // 시작시 잔고 평가 금액 } 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<153000 ) { Main.ReqPowerSearch("필필필") // 종목검색수행 } if (nEventID==1) { var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수 if (nEventID==1 && HHMMSS>090000 && HHMMSS<153000 ) { // 9시 ~ 15시 30분 사이 if(num >= 1) { // 보유종목이 1개 이상 if(Account1.GetBalanceETCinfo(100) >=V1*1.04) { //계좌평가금액이 스팟시작시 평가금액대비 Main.KillTimer(1); // 1번 타이머 종료 for (var i=0; i<num; i++) { //계좌리스트의 순서대로 Account1.SetBalance(i); //잔고를 세팅 if(Account1.Balance.count >0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); } } } else { for (var i=0; i<num; i++) { Account1.SetBalance(i); if(Account1.Balance.current >= Account1.Balance.avgUnitCost*익절) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); //익절매도 종목들의 종목코드 저장 SellList.push(Account1.Balance.code); } } } } } /** if (HHMMSS >= 151500) { Main.KillTimer(1); for(var i=0; i <num; i++) { Account1.SetBalance(i); if(Account1.Balance.count>0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0,1); } } } */ } 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; } } //매도종목인지 확인 for (var b=0; b<SellList.length; b++) { if(aItemList[a]==SellList[b]) { 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;} // 계좌에 같은 종목이 있으면 트루 반환 } return false; // 계좌에 같은 종목이 없으면 폴스 반환 }
프로필 이미지
대봉코
2025-09-22
223
글번호 226401
답변완료

예스스팟으로 종목을 매수하고 있습미다

종목매수를 자동으로 하고나서 파워종목에서 만든 다른 조건검색식으로 오늘 매수한 종목을 매도 하고 싶습미다 예스스팟 자동매수 수식은 다음과 같습미다.. var timer2 = 2; // 2초 var 매수금 = 17000000; var 손절 = 0.80; var 익절 = 1.20; var OrderList = []; var MKList = []; var req; var 종목수 = 1, BuyCount; function Main_OnStart() { //1번 타이머, 1초 Main.SetTimer(1, timer2*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); BuyCount = 0; } 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 >= 090005 && HHMMSS < 140010 && BuyCount < 종목수) { //종목검색 수행 Main.ReqPowerSearch("테스트") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~11시 15분 사이 if (HHMMSS >= 090006 && HHMMSS < 151900) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 3% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.20) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 3%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*익절 || Account1.Balance.current <= Account1.Balance.avgUnitCost*손절)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //오후10시 00분이후이면 모든 종목 전량 수익에 상관없이 매도 if (HHMMSS >= 152900) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } 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, timer2*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { if (BuyCount < 종목수) { // 계좌에 없는 경우에만 매수 //Account1.OrderBuy(MarketData.code,1,0,1); 밑에 한번에 17000000 시장가에 매수 Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); //Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(4)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); BuyCount = BuyCount+1; } } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length && BuyCount < 종목수) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer2*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 반환 } 오늘 매수한 종목을 파워종목 조건검색식 만족할때 시장가로 매도할수 있게 예스스팟 자바 부탁드림미다.
프로필 이미지
뽀스뽀스
2025-09-27
266
글번호 226399
답변완료

예스스팟 초보자의 수정요청

아래 수식을 - 매수금 10만원 매수---> 종가 천원이상 5만원 이하종목에 한해서 1주만 시장가로 매수로 변경 - 손절은 매수가의 -10%로 변경 - 익절은 매수가의 20%로 변경 - 09시~10시까지만 작동(매수,손절,익절) - 10시기준 자동매도(손절/익절)되지 않은 종목은 보유(수동매도 가능 ?) - 예스스팟에 잔존종목(익절/손절이나 수동매도 후 남은 종목수)은 10개까지로 제한하여 부족한 종목 수만큼만 매수. 등의 조건들, 기타 합리적인 사항으로 추가할만한 것이 있다면 그를 반영한 수식으로 수정 부탁드립니다. ========================================================================== var timer5 = 2; // 2초 var 매수금 = 100000; var 손절 = 0.9; var 익절 = 1.2; var OrderList = []; var MKList = []; var req; var 종목제한수 = 10; function Main_OnStart() { // 1번 타이머, 2초 Main.SetTimer(1, timer5 * 1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090000 && HHMMSS < 100000) { // 종목검색 수행 Main.ReqPowerSearch("변동성 돌파전략"); } else if (nEventID == 1 && HHMMSS >= 100000) { // 10:00 이후 모든 보유 종목 매도 for (var i = 0; i < MKList.length; i++) { Account1.OrderSell(MKList[i].code, MKList[i].quantity, 0, 1); Main.MessageList(MKList[i].code + " 시간 종료로 매도"); } MKList = []; Main.KillTimer(1); // 타이머 종료 } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } // 손절/익절 확인 (타이머 3번으로 주기적 실행) if (nEventID == 3) { CheckStopLossTakeProfit(); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList.slice(0, Math.min(nCount, 종목제한수)); } 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 && !IsStockInAccount(aItemList[a]) && OrderList.length < 종목제한수 - MKList.length) { OrderList.push(aItemList[a]); } } } Main.MessageList("OrderList: " + JSON.stringify(OrderList)); if (OrderList.length == 0) { Main.SetTimer(1, timer5 * 1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } } function Main_OnRcvMarketData(MarketData) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (MarketData.code == OrderList[req]) { if (HHMMSS >= 100000) { Main.MessageList("매수 시간(09:00~10:00) 종료로 매수 중지"); Main.SetTimer(1, timer5 * 1000); return; } if (MKList.length >= 종목제한수) { Main.MessageList("종목 제한 수 초과로 매수 중지"); Main.SetTimer(1, timer5 * 1000); return; } if (!IsStockInAccount(MarketData.code)) { var quantity = Math.floor(매수금 / MarketData.Ask(1)); if (quantity > 0) { // 계좌에 없는 경우에만 매수 Account1.OrderBuy(MarketData.code, quantity, 0, 1); //Account1.OrderBuy(MarketData.code, 1, 0, 1); // 고정 1주 매수 //Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(1)), MarketData.Ask(1), 0); // 지정가 매수 // 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. MKList.push({ code: MarketData.code, buyPrice: MarketData.Ask(1), quantity: quantity }); Main.MessageList(MarketData.code + " 주식을 " + quantity + "주 매수, 매수가: " + MarketData.Ask(1)); } else { Main.MessageList(MarketData.code + " 매수 수량 0, 매수 실패"); } } 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 { // 손절/익절 체크를 위한 타이머 시작 (10초마다 확인) Main.SetTimer(3, 10000); Main.SetTimer(1, timer5 * 1000); } } } function CheckStopLossTakeProfit() { for (var i = 0; i < MKList.length; i++) { var stock = MKList[i]; var marketData = Main.GetMarketData(stock.code); if (!marketData) continue; var currentPrice = marketData.currentPrice; if (currentPrice <= stock.buyPrice * 손절) { Account1.OrderSell(stock.code, stock.quantity, 0, 1); Main.MessageList(stock.code + " 손절(-5%)로 " + stock.quantity + "주 매도, 현재가: " + currentPrice); MKList.splice(i, 1); i--; } else if (currentPrice >= stock.buyPrice * 익절) { Account1.OrderSell(stock.code, stock.quantity, 0, 1); Main.MessageList(stock.code + " 익절(+5%)로 " + stock.quantity + "주 매도, 현재가: " + currentPrice); MKList.splice(i, 1); i--; } } } function IsStockInAccount(stockCode) { var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; } } return false; }
프로필 이미지
ksks
2025-09-21
234
글번호 226398

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

프로필 이미지
서울의봄
2025-09-14
22
글번호 226393
답변완료

전략실행 차트 신호 관련

안녕하세요. 예스스팟에 차트를 추가하고 해당 차트에 특정 신호(예스랭귀지로 작성)를 적용시 해당 신호는 완성봉인 경우 예스스팟으로 신호를 발생해 주나요? 아니면 미완성 봉이더라도 신호가 발생하는 즉시 예스스팟으로 신호를 보내주나요? 가격의 움직임에 따라 신호가 차트 상에 보여 졌다 사라졌다를 반복할 수도있는데요. 어떤 방식으로 작동되는지 알고 싶습니다.
프로필 이미지
멍거
2025-09-13
180
글번호 226392
답변완료

옵션객체 관련

안녕하세요. 현재 옵션종목이 월물옵션, 위클리 월요일, 위클리 목요일 이렇게 3개 거래가능한데요. 제 진입 및 청산 로직상 만기가 가장 근접한 옵션종목을 선택하여 거래하고자 합니다. 즉, 월물옵션 만기가 1주일 넘게 남은경우 - 화~목까지는 위클리 목요일 옵션을 진입 - 금~월까지는 위클리 월요일 옵션을 진입 - 월물옵션 만기가 1주일 이내인 경우 화요일부터 월물 옵션 진입 이렇게 옵션객체를 선택하여 거래 및 청산을 하고자 하는데, 간단하게 로직을 예시로 기재해주실수 있을까요? 매번 도움주셔서 진심으로 감사드립니다. 추가질문으로, 예스트레이더(im증권) 사용 중인데, 정상 로그인이 되면 문자 수신이 가능한가요? 그리고 장중에 비정상적으로 hts가 꺼졌을때 문자 수신이 가능한지도 여쭈어 봅니다. 감사합니다.
프로필 이미지
지나리
2025-09-15
149
글번호 226391