커뮤니티

예스스팟 스크립트 질문 드립니다.

프로필 이미지
대봉코
2025-09-03 09:21:06
126
글번호 226384
답변완료
수고하십니다. 예스스팟 자동매도로 수익이 실현되고 나서 같은날 그 종목이 다시 자동매수되는 경우가 있습니다. 예스스팟 시작후 자동매도됐던 종목은 재매수 하지 않는 부분을 자바스크립트로 만들수 있을까요. 현재 쓰고 있는 자바스크립트에는 보유하고 있는 종목을 재매수 하지 않는 부분은 구현이 되어 있습니다. var timer5 = 3; // 3초 var 매수금 =100000 ; var 손절 = 0.95; var 익절 = 1.03; var OrderList = []; var MKList = []; 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<151500 ) { Main.ReqPowerSearch("필필필") // 종목검색수행 } if (nEventID==1) { var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수 if (nEventID==1 && HHMMSS>090000 && HHMMSS<151500 ) { // 9시 ~ 15시 15분 사이 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); } } } } } 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;} } 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; // 계좌에 같은 종목이 없으면 폴스 반환 }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-09-16 09:11:39

안녕하세요 예스스탁입니다. var timer5 = 3; // 3초 var 매수금 =100000 ; var 손절 = 0.95; var 익절 = 1.03; 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<151500 ) { Main.ReqPowerSearch("필필필") // 종목검색수행 } if (nEventID==1) { var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수 if (nEventID==1 && HHMMSS>090000 && HHMMSS<151500 ) { // 9시 ~ 15시 15분 사이 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; // 계좌에 같은 종목이 없으면 폴스 반환 } 즐거운 하루되세요 > 대봉코 님이 쓴 글입니다. > 제목 : 예스스팟 스크립트 질문 드립니다. > 수고하십니다. 예스스팟 자동매도로 수익이 실현되고 나서 같은날 그 종목이 다시 자동매수되는 경우가 있습니다. 예스스팟 시작후 자동매도됐던 종목은 재매수 하지 않는 부분을 자바스크립트로 만들수 있을까요. 현재 쓰고 있는 자바스크립트에는 보유하고 있는 종목을 재매수 하지 않는 부분은 구현이 되어 있습니다. var timer5 = 3; // 3초 var 매수금 =100000 ; var 손절 = 0.95; var 익절 = 1.03; var OrderList = []; var MKList = []; 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<151500 ) { Main.ReqPowerSearch("필필필") // 종목검색수행 } if (nEventID==1) { var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수 if (nEventID==1 && HHMMSS>090000 && HHMMSS<151500 ) { // 9시 ~ 15시 15분 사이 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); } } } } } 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;} } 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; // 계좌에 같은 종목이 없으면 폴스 반환 }