커뮤니티

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

프로필 이미지
대봉코
2025-09-22 13:38:53.0
48
글번호 226401
답변완료
안녕하세요. 항상 감사드립니다. 현재 쓰고 있는 스크립트에는 예스스팟 시작시의 평가금액대비 +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; i0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); } } } else { for (var i=0; i= 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 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
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-10-01 10:51:23.0

안녕하세요 예스스탁입니다. //보유종목의 평가금액합과 투자원금합을 계산 평가금액합 = 0; 투자원금합 = 0; for (var i=0; i 0) { //보유종목의 수량*현재가의 합 평가금액합 = 평가금액합 + (Account1.Balance.count*Account1.Balance.current); //보유종목의 수량*평단가의 합 투자원금합 = 투자원금합 + (Account1.Balance.count*Account1.Balance.avgUnitCost); } } 기존 정산가 기준 비교해서 전체 매도하는 부분만 먼저 전체잔고 루프해서 현재가와 평단가 기준으로 합산값을 만들고 비교하게 하시면 됩니다. 아래 내용 참고하시기 바랍니다. 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(); // 계좌보유종수 // 9시 ~ 15시 30분 사이 if (nEventID==1 && HHMMSS>090000 && HHMMSS<153000 ) { // 보유종목이 1개 이상 if(num >= 1) { //보유종목의 평가금액합과 투자원금합을 계산 평가금액합 = 0; 투자원금합 = 0; for (var i=0; i 0) { //보유종목의 수량*현재가의 합 평가금액합 = 평가금액합 + (Account1.Balance.count*Account1.Balance.current); //보유종목의 수량*평단가의 합 투자원금합 = 투자원금합 + (Account1.Balance.count*Account1.Balance.avgUnitCost); } } //평가금액합이 투자원급합 대비 4% 이상 if(평가금액합 >= 투자원금합*1.04) { // 1번 타이머 종료 Main.KillTimer(1); //보유 종목 전량 매도 for (var i=0; i0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); } } } else { for (var i=0; i= 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 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 대봉코 님이 쓴 글입니다. > 제목 : 항상 감사드립니다. 또 예스스팟 스크립트 질문입니다. > 안녕하세요. 항상 감사드립니다. 현재 쓰고 있는 스크립트에는 예스스팟 시작시의 평가금액대비 +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; i0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); } } } else { for (var i=0; i= 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 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