커뮤니티
항상 감사드립니다. 또 예스스팟 스크립트 질문입니다.
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
다음글