예스스탁
예스스탁 답변
2017-12-06 15:30:19
안녕하세요
예스스탁입니다.
종목객체를 요청하고 객체가 수신된것을 확인후 값을 사용해야 합니다.
작성하신 내용은 요청후 확인없이 주문이 집행됩니다.
아래 내용 참고하시기 바랍니다.
한번에 for문으로 보유종목에 대해 모두 종목 요청하는 것이 아니고
계좌 잔고리스트상 마지막종목부터 시작해서 젤 위종목까지
순차적으로 한종목씩 종목객체요청 --> 종목객체수신 --> 주문을 반복하게 하는 식입니다.
var DayX,Xnum,req,Xcode;
function Main_OnStart()
{
Main.SetTimer(1, 5000);
DayX = false;
}
//15시 25분에 잔고에 있는 종목 전량 청산(당일청산)
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && DayX == false && HHMMSS >= 152500)
{
DayX = true;
Main.KillTimer(1);
Main.MessageList("동시호가 잔고청산 주문실행",EntryItem);
//보유종목수
Xnum = Account1.GetTheNumberOfBalances();
//보유종목의 리스트상 가장 마지막순위 종목부터 잔고셋팅하고 종목객체를 요청
//Xnum이 5이면 0,1,2,3,4 순위가 있고 4 종목에 대해 잔고 셋팅
//종목객체 생성해서 주문하고 바로 체결되면 잔고에서 해당 종목이 삭제되고
//잔고 순위가 변경되므로 리스트의 하위부터 주문을 집행하게 함
req = Xnum-1;
Account1.SetBalanceIndex(req);
Xcode = Account1.Balance.code;
//종목객체 요청
Main.ReqMarketData(Xcode,0,0);
}
}
function Main_OnRcvMarketData(MarketData)
{
//요청된 종목객체가 맞는지 확인하고
if (DayX == true && MarketData.code == Xcode)
{
//종목객체에서 가격 셋팅해서 주문
var RemainObject = MarketData;
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, RemainObject.Bid(10),0); //잔고 매수10호가 전량청산
//주문후 필요없으므로 종목객체 삭제
Main.RemoveMarketData(RemainObject);
//주문후 req값을 1차감
req = req-1;
//req가 0이상 일때만 다음순위 잔고셋팅하고 종목코드 확인 후 종목객체 요청
if (req >= 0)
{
Account1.SetBalanceIndex(req);
Xcode = Account1.Balance.code;
Main.ReqMarketData(Xcode,0,0);
}
}
}
즐거운 하루되세요
> 체로키 님이 쓴 글입니다.
> 제목 : 검토부탁드립니다.
> 수고 많으십니다.
당일 15시 25분에 잔고에 있는 종목전체를 불러와, 매수10호가로 청산하고자 할때
Main.ReqMarketData(RemainObject[i], 0, 0)로 불러와
매도호가에 RemainObject[i].Bid(10)로 작성해봤는데...
ReferenceError메세지가 뜨며 실행이 안되네요....
도움 부탁드립니다.
//15시 25분에 잔고에 있는 종목 전량 청산(당일청산)
if (DayX == false && HHMMSS >= 152500 && RcvData >= 1)
{
DayX = true;
Main.KillTimer(1);
Main.MessageList("동시호가 잔고청산 주문실행",EntryItem);
var num = Account1.GetTheNumberOfBalances();
for(var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
var RemainObject = []; //종목객체 설정
Main.ReqMarketData(RemainObject[i], 0, 0);
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, RemainObject[i].Bid(10),0); //잔고 매수10호가 전량청산
// Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); //시장가
Main.MessageList("동시호가 청산매도: ", Account1.Balance.code);
}
}