예스스탁
예스스탁 답변
2013-10-11 14:23:51
안녕하세요
예스스탁입니다.
답변이 늦어 죄송합니다.
시세 업데이트할때 for문에 i가 Nth보다 작을때 까지만 진행되어야 하는데
같을때 까지 진행되서 객체가 없는 배열에서 code를 호출하니 해당 메세지가 발생했습니다.
수정한 식입니다. Up*date에서 * 삭제하시고 적용하셔야 합니다.
var Nth = 0;
var ItemCode = new Array(200);
var ItemObject = new Array(200);
var ItemHigh = new Array(200);
var Bnum;
function Main_OnStart()
{
Nth = 0;
Bnum = Account1.GetTheNumberOfBalances()
Main.MessageList("잔고종목수",Bnum);
if (Bnum > 0)
{
//계좌의 잔고리스트에서 첫번째 잔고 셋팅
Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//1번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
//요청한 종목객체 수신되면
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체수신",MarketData.code);
//수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에
if (MarketData.code == ItemCode[Nth])
{
ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장
ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수)
Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemObject[Nth].code);
//순번은 1 증가
Nth = Nth+1;
//종목객체 수신완료되면 다음 종목 종목객체 요청
if (Bnum > 0)
{
//계좌의 잔고리스트에서 다음 순번 잔고 셋팅
Account1.SetBalanceIndex(Nth);
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//Nth번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
}
//잔고에 종목이 추가된다면
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) //*삭제
{
if (sAccntNum == Account1.number && lUp*dateID == 30001) //*삭제
{
Nth = Nth+1;
//1번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
//종목객체 시세 업데이트
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)// *제거
{
//편입된 종목수 만킄만 수행
for (var i = 0; i < Nth; i++)
{
if (ItemObject[i].code == sItemCode && lUp*dateID == 20001)// *제거
{
Main.MessageList("-----------------------------------------------");
Main.MessageList(ItemObject[i].code,"업데이트");
//잔고셋팅
Account1.SetBalanceItem(ItemObject[i].code,0);
//종목편입 이후의 최고가 계산
if (ItemObject[i].current > ItemHigh[i])
{
ItemHigh[i] = ItemObject[i].current;
}
//매수잔고
if (Account1.Balance.position == 2)
{
//현재가가 평균단가 대비 10%이상 상승하면 목표이익 매도
if (ItemObject[i].current >= Account1.Balance.avgUnitCost*1.10)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제");
}
// 현재가가 평균단가 대비 5%이상 하락하면 손절매도
if (ItemObject[i].current <= Account1.Balance.avgUnitCost*0.95)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제");
}
//현재가가 평균단가 대비 7% 이상 상승후 평균단가+5%까지 하락하면 매도주문
if (ItemHigh[i] >= Account1.Balance.avgUnitCost*1.07 &&
ItemObject[i].current <= Account1.Balance.avgUnitCost*1.05)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1);
//주문 후 해당 종목객체 삭제
Main.RemoveMarketData(ItemObject[i]);
Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제");
}
}
Main.MessageList("-----------------------------------------------");
Main.MessageList("종 목 : ",ItemObject[i].code);
Main.MessageList("평균단가 : ",Account1.Balance.avgUnitCost);
Main.MessageList("현 재 가 : ",ItemObject[i].current);
Main.MessageList("진입최고 : ",ItemHigh[i]);
}
}
}
즐거운 하루되세요
> 오토 님이 쓴 글입니다.
> 제목 : [주식]트레일링 다시 질문드립니다. ^^;;
> 올려주신 파일로 이리저리 해봐도.. ㅠㅠ
같은 에러만 나네요. ㅠㅠ
종목은 보유중인 상태입니다.
줄번호 77
메세지 ReferenceErroe:IUp is not defined
올려주신 파일의 lUp*dateID 이부분은 수정하니..
위 메세지는
줄번호 77
메세지 TypeError: Cannot read propety 'code' of undefined
잠시 종목코드가 나오지만... 위 같은 에러가 계속 발생됩니다. ㅡㅡ;;
#주식