커뮤니티
관심종목만 검색
2026-07-01 11:19:02
137
글번호 232637
장전 08:50에 관심그룹을 한번 검색하고 그룹안에 있는 종목만 예스랭귀지에서 만들어 놓은 조건에 맞으면 매수하는 조건식 부탁드립니다.
감사합니다.
답변 1
예스스탁 예스스탁 답변
2026-07-09 15:59:36
안녕하세요
예스스탁입니다.
아래식 참고하시기 바랍니다.
검색된 종목이 지정한 관심그룹내에 있는 종목만을 매수하는 식입니다.
var iName = "관심그룹명";
var iCheck, iList = [];
var userSearchName = "사용자조건검색명";
var 검색주기 = 10; //10초
var MKList = []; //종목검색 후 종목객체 요청할 종목의 종목코드를 리스트할 배열변수
var MK = []; //종목객체를 저장할 배열변수
var req; //종목객체 요청 횟수를 저장할 변수
var 매수금 = 1000000; //종목당 매수금
//스팟 시작
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 검색주기*1000);
iCheck = false;
}
//타이머 동작
function Main_OnTimer(nEventID)
{
//자바스크립트 날짜시간 객체에서 값을 가져와 HHMMSS형식으로 시간 계산
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && iCheck == false && HHMMSS >= 85000)
{
var num = Main.GetItemCountOfInterest(iName);
if (num > 0)
{
iCheck = true;
for (var i = 0; i < num; i++)
{
iList.push(Main.GetItemCodeInInterest(iName, i));
}
Main.MessageList("iList",iList)
}
else
{
Main.MessageList("지정한 관심그룹이 없거나 포함된 종목이 없습니다.")
}
}
//1번 타이머 동작하고 9시~15시 사이이면
if (nEventID == 1 && iCheck == true && HHMMSS >= 90000 && HHMMSS <= 170000)
{
//타이머 종료
Main.KillTimer(1);
//지정한 이름의 사용자조건검색을 실행
Main.ReqPowerSearch(userSearchName);
}
if (nEventID == 2)
{
Main.KillTimer(2);
//재요청
Main.ReqMarketData(MKList[req]);
}
}
//종목검색완료
function Main_OnRcvItemList(aItemList, nCount, aValues)
{
Main.MessageList("검색된종목수",nCount);
//검색된 종목이 한종목 이상
if (nCount >= 1)
{
//종목객체 요청리스트를 초기화
MKList = [];
//처음 종목이 검색이 될 떄는
if (MK.length == 0)
{
//검색된 종목 중 잔고에 없는 종목으로 최대20개만 MKList에 저장
for (var a = 0; a < nCount; a++)
{
var add = false;
for (var b = 0; b < iList.length; b++)
{
if (aItemList[a] == iList[b])
{
add = true;
}
}
Account1.SetBalance(aItemList[a],0);
if (add == true && Account1.Balance.count == 0)
{
MKList.push(aItemList[a]);
}
}
}
else
{
for (var a = 0; a < nCount; a++)
{
var add = false;
for (var b = 0; b < iList.length; b++)
{
if (aItemList[a] == iList[b])
{
add = true;
}
}
for (var c = 0; c < MK.length; c++)
{
if (aItemList[c] == MK[c].code)
{
Add = false;
}
}
//계좌 잔고에 보유중인 종목 제외
Account1.SetBalance(aItemList[a],0);
if (Account1.Balance.count > 0)
Add = false;
//요청리스트에 저장
if (Add == true)
{
MKList.push(aItemList[a]);
}
}
}
Main.MessageList("주문할 종목수:",MKList.length);
//요청할 종목이 없고
if (MKList.length == 0)
{
Main.SetTimer(1, 검색주기*1000);
}
else //요청할 종목이 있으면
{
//요청리스트의 첫종목 부터 종목객체 요청(배열이므로 종목코드가 0번방 부터 존재)
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에 추가하고
MK.push(MarketData);
//매수주문가격
var OP = MarketData.Ask(1);
//수량
var OV = Math.floor(매수금/OP);
//지정한 가격, 지정한 수량으로 매수주문
Account1.OrderBuy(MarketData.code,OV,OP,0);
Main.MessageList(req,"매수주문",MarketData.code,OV,OP);
//요청횟수 1증가
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,"종목객체생성끝");
Main.SetTimer(1,검색주기*1000);
}
}
}
즐거운 하루되세요
다음글
이전글