예스스탁
예스스탁 답변
2019-10-02 16:44:00
안녕하세요
예스스탁입니다.
var list = [];
//차트객체 순서대로 저장할 변수
var ct = [];
//스파시작
function Main_OnStart()
{
var num = Main.GetItemCountOfInterest("관심그룹명");
if (num > 0)
{
for (var i = 0; i < num; i++)
{
list.push(Main.GetItemCodeInInterest("관심그룹명",i));
}
//요청카운트 (첫종목 0으로 시작)
req = 0;
//차트설정, 시스템 설정
var ChartSet = new ReqChartItem(list[req],1,CHART_PERIOD_MINUTE,100,CHART_REQCOUNT_BAR,false,false);
var SystemSet = new SystemInfo("시스템이름", YL_TYPE_NORMAL, null, null, null);
//차트객체 요청
Main.ReqChartEx(ChartSet,SystemSet);
}
}
//차트객체 생성완료
function Main_OnRcvChartEx(ChartEx)
{
//ct배열에 차트객체 저장
ct[req] = ChartEx;
Main.MessageList(req,ct[req].GetCode(1));
//요청횟수 1 증가
req = req+1;
//요청횟수가 검색된 종목수 보다 작으면
//다음종목 요청
if (req < list.length)
{
//차트설정, 시스템 설정
var ChartSet = new ReqChartItem(list[req],1,CHART_PERIOD_MINUTE,100,CHART_REQCOUNT_BAR,false,false);
var SystemSet = new SystemInfo("시스템이름", YL_TYPE_NORMAL, null, null, null);
//차트객체 요청
Main.ReqChartEx(ChartSet,SystemSet);
}
else //요청횟수가 검색된 종목수 이상이면 모두 요청했으므로 끝
{
Main.MessageList("차트객체 생성끝");
}
}
//차트에서 신호가 발생하면
function Main_OnRiseSignal(ChartEx, Signal)
{
Main.MessageList("신호발생 : ",Signal.code,Signal.signalKind);
for (var i = 0; i < ct.length; i++)
{
//전체 차트 객체 중 신호발생된 객체를 찾고
if (ChartEx.GetCode(1) == ct[i].GetCode(1))
{
//매수신호이면 신호가격으로 10주 주문
if (Signal.signalKind == 1)
{
Main.MessageList("매수주문 : ",i,ct[i].GetCode(1));
Account1.OrderBuy(ct[i].GetCode(1), 10, Signal.price,0);
//타이머를 차트객체 배열방 번호와 동일번호로 지정
Main.SetTimer(i, 10000);//10초 타이머
}
//매도신호이면
if (Signal.signalKind == 2)
{
//전체 미체결 갯수
var num = Account1.GetTheNumberOfUnfills();
//전체미체결 중 신호발생 종목과 같은 종목의 미체결은 모두 취소
for (var z = 0; z < num; z++)
{
Account1.SetUnfill(z);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1))
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고셋팅
Account1.SetBalance(ct[i].GetCode(1), 0);
//잔고수량이 있으면 신호가격으로 전량청산
if (Account1.Balance.count > 0)
{
Main.MessageList("매도주문 : ",i,ct[i].GetCode(1));
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Signal.price, 0);
//타이머를 차트객체 배열방 번호와 동일번호로 지정
Main.SetTimer(i, 10000);//10초 타이머
}
}
break;
}
}
}
//타이머가 동작하면
function Main_OnTimer(nEventID)
{
Main.MessageList("타이머 : ",nEventID);
//동작된 타이머 번호의 차트객체에서 종목코드 가져와 종목객체생성
Main.ReqMarketData(ct[nEventID].GetCode(1));
//1회 동작 후 타이머 종료
Main.KillTimer(nEventID);
}
//종목객체 생성되면
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체생성 : ",MarketData.code);
//종목객체 MD변수에 저장
var MD = MarketData;
//전체 미체결 갯수
var num = Account1.GetTheNumberOfUnfills();
//전체미체결 중 신호발생 종목과 같은 종목의 미체결을 찾아
for (var z = 0; z < num; i++)
{
Account1.SetUnfill(z);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == MD.code)
{
//매수주문이면
if (Account1.Unfill.orderKind == 2)
{
//정정할 가격 매도1호가
var ReplacePrice = MD.Ask(1);
//정정할 가격이 주문가겨과 다르면
if (ReplacePrice > 0 && ReplacePrice != Account1.Unfill.price)
{
//정정주문
Account1.OrderReplacePrice(Account1.Unfill.orderNum,ReplacePrice);
}
}
//매도주문이면
if (Account1.Unfill.orderKind == 1)
{
//정정할 가격 매수 1호가
var ReplacePrice = MD.Bid(1);
//정정할 가격이 주문가격과 다르면
if (ReplacePrice > 0 && ReplacePrice != Account1.Unfill.price)
{
//정정주문
Account1.OrderReplacePrice(Account1.Unfill.orderNum,ReplacePrice);
}
}
}
break;
}
//종목객체 삭제
Main.RemoveObject(MD);
}
즐거운 하루되세요
> cs아빠 님이 쓴 글입니다.
> 제목 : 1928 답글에 대한 추가 질문
> 답변으로 작성해 주신 코드 감사드립니다.
1928번의 내용은 검색된 종목으로 하는 방식인 것 같습니다.
종목검색 대신 관심종목에 있는 종목을 이용하는 방식으로 변형 부탁드리겠습니다.
감사합니다.