예스스탁
예스스탁 답변
2022-08-24 15:56:41.0
안녕하세요
예스스탁입니다.
1
스팟답변은 가이드 정도만 작성해 드립니다.
아래 가이스 수식을 참고하시기 바랍니다.
계좌객체의 GetBalanceETCinfo함수로 예수금을 가져올수 있는데
증권사마다 필드번호가 다릅니다.
예스스팟 도움말의 계좌객체에서 해당 함수설명 참고하시기 바랍니다.
아래는 하이투자증권 기준으로 예수금을 지정해 드립니다.
2
일정금액으로 주문내기위해서는 주문낼 가격을 지정해야 합니다.
그러므로 종목검색 후 각 주문낼 종목에 대해 종목객체 생성하고
해당 종목객체에서 현재가나 호가를 가져와 금액을 나누어 산정하셔야 합니다.
3
var MKList = [];
var MK = [];
var req;
var 최대매수종목수 = 20;
var AA, M1;
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 6000);
//예수금
AA = account1.GetBalanceETCinfo(0);
//1종목당 금액
M1 = AA/최대매수종목수;
}
//타이머 동작
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//1번 타이머 동작하고 9시 이후
if (nEventID == 1 && HHMMSS >= 90000)
{
//타이머 종료
Main.KillTimer(1);
//종목검색 수행
Main.ReqPowerSearch("1");
}
if (nEventID == 2)
{
Main.KillTimer(2);
//재요청
Main.ReqMarketData(MKList[req]);
}
}
//종목검색완료
function Main_OnRcvItemList(aItemList, nCount)
{
Main.MessageList("검색된종목수",nCount);
//검색된 종목이 한종목 이상
if (nCount >= 1)
{
MKList = [];
if (MK.length == 0)
{
for (var a = 0; a < nCount; a++)
{
account1.SetBalance(aItemList[a],0);
if (account1.Balance.count == 0 && MKList.length < 최대매수종목수)
{
MKList.push(aItemList[a]);
}
}
}
else
{
if (MK.length < 최대매수종목수)
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MK.length; b++)
{
if (aItemList[a] == MK[b].code)
{
Add = false;
}
}
account1.SetBalance(aItemList[a],0);
if (account1.Balance.count > 0)
Add = false;
if (Add == true && MKList.length < 최대매수종목수-MK.length)
{
MKList.push(aItemList[a]);
}
}
}
}
Main.MessageList("주문할 종목수:",MKList.length);
if (MKList.length == 0)
{
if (MK.length < 최대매수종목수)
{
//1번 타이머, 60초
Main.SetTimer(1, 6000);
}
else
{
Main.MessageList("최대종목수 도달 검색종료");
}
}
else
{
req = 0;
Main.MessageList(req,"종목객체요청",MKList[req]);
Main.ReqMarketData(MKList[req]);
}
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == MKList[req])
{
Main.MessageList(req,"종목객체생성",MarketData.code);
MK.push(MarketData);
//매수주문가격
var OP = MarketData.Ask(1);
//수량
var OV = Math.floor(M1/OP);
account1.OrderBuy(MarketData.code,OV,OP,0);
Main.MessageList(req,"매수주문",MarketData.code,OV,OP);
req = req+1;
if (req < MKList.length)
{
Main.MessageList(req,"종목객체요청",MKList[req]);
var XX = Main.ReqMarketData(MKList[req]);
//종목객체 생성제한
if (XX == -1)
{
//2번 타이머 15초
Main.SetTimer(2,15000);
}
}
else
{
Main.MessageList(req,"종목객체생성끝");
if (MK.length < 최대매수종목수)
{
Main.SetTimer(1,6000);
}
else
{
Main.MessageList("최대종목수 도달 검색종료");
}
}
}
}
즐거운 하루되세요
> 아무다 님이 쓴 글입니다.
> 제목 : 수식 변경부탁드려요
> 종목 20개 설정해서 예수금/종목수로 매수 금액 설정하고 싶어요
그리고 주문이 들어가 있고 사지지 않으면 매수 금지 설정 부탁드려요( 예로 VI 걸렸을때 계속 주문이 들어가는 현상을 막고 싶어요)
//스팟 첫 실행시
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 10000);
}
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
//종목검색 수행
Main.ReqPowerSearch("1")
}
}
//종목검색 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//1종목 이상 검색되면
if (nCount >= 1)
{
//리스트 첫종목부터 마지막종목까지 순차적으로
for (var i = 0; i < nCount; i++)
{
//잔고를 셋팅
account1.SetBalance(aItemList[i],0);
//보유수량이 없으면
if (account1.Balance.count == 0)
{
//매수주문
account1.OrderBuy(aItemList[i], 1,0,1);
}
}
}
}