수고많으십니다.
Main.MessageList("na2=",Account7);
Main.MessageList("na1=",woo,"계좌=",num);
var num = Account7.Balance.number;
질문입니다.
na2에서 Account7은 계좌번호가 표시가 되는데
na1에서 계좌번호를 변수로 저장한 num으로 넣으면 undefined 에러가 발생합니다.
수식검토 부탁드립니다.
// 전역변수선언
var exit7;
var Position7;
var Snum7;
var Bnum7;
var BuyFill7;
var SellFill7;
var ID7,ID8,Num7,Num8;
var Xcode7,Xpst7,Xvo7,XID7;
var Xcode8,Xpst8,Xvo8,XID8;
//스팟 시작
function Main_OnStart()
{
Main.SetTimer(1, 10000);
exit7 = false;
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
if (exit7 == false)
{
Account7.SetBalanceItem(MD7, 0);
var vo7 = Account7.Balance.count; //수량
var po7 = Account7.Balance.position; //포지션방향(매도1, 매수2)
var cu7 = Account7.Balance.current; //현재가
var num = Account7.Balance.number;
var woo = C7.GetIndicatorData("진입1", 1, 0);
Main.MessageList("na2=",Account7);
Main.MessageList("na1=",woo,"계좌=",num);
}
}
if ( po7 == 1 && Cu7 >=woo) //매도포지션이고 현재가격이 지표 "진입" 값과 같으면
{
exit7 = true; //첫번째 SetTimer 시작
//전량 시장가로 매수주문(청산) 및 ID7에 주문아이디 저장
ID7 = Account7.OrderBuy(MD7,vo7, 0, 1);
}
if (po7 == 2 && Cu7 <= woo) //매수포지션이고 현재가격이 지표"진입" 값과 같거나 작으면
{
//전량 시장가로 매도주문(청산) 및 ID7에 주문아이디 저장
ID7 = Account7.OrderSell(MD7,vo7, 0, 1);
}
//2번 타이머
if (nEventID == 2) //두번째 SetTimer 시작
{
Main.KillTimer(2);
//Num7주문번호의 미체결 객체 셋팅
Account7.SetUnfillOrderNumber(Num7);
//미체결 수량이 있으면
if (Account7.Unfill.count > 0)
{
Xcode7 = Account7.Unfill.code; //종목코드 저장
Xpst7 = Account7.Unfill.orderKind; //주문구분 저장
Xvo7 = Account7.Unfill.count; //주문수량 저장
XID7 = Account7.OrderCancel(Num7); //취소주문, 주문아이디 XID7 저장
}
}
//3번 타이머
if (nEventID == 3)
{
Main.KillTimer(3);
//Num8주문번호 미체결 객체 셋팅
Account7.SetUnfillOrderNumber(Num8);
if (Account7.Unfill.count > 0)
{
Xcode8 = Account7.Unfill.code;
Xpst8 = Account7.Unfill.orderKind;
Xvo8 = Account7.Unfill.count;
XID8 = Account7.OrderCancel(Num8);
}
}
//주문응답
function Main_OnOrderResponse(OrderResponse)
{
//주문응답 아이디(orderID)가 ID7(최초주문아이디)과 같으면
if (OrderResponse.orderID == ID7)
{
//주문번호 저장
Num7 = OrderResponse.orderNum;
Main.SetTimer(2, 5000);
}
//주문응답 아이디가 ID8과 같으면
if (OrderResponse.orderID == ID8)
{
Num8 = OrderResponse.orderNum;
Main.SetTimer(3, 5000);
}
//재주문
//주문응답 아이디가 XID7과 같으면
//시장가로 재주문
if (OrderResponse.orderID == XID7)
{
if (Xpst7== 1)
{
Account7.OrderSell(Xcod7, Xvo7, 0, 1);
}
if (Xpst7== 2)
{
Account7.OrderBuy(Xcod7, Xvo7, 0, 1);
}
}
//주문응답 아이디가 XID8과 같으면
//시장가로 재주문
if (OrderResponse.orderID == XID8)
{
if (Xpst8 == 1)
{
Account7.OrderSell(Xcod8, Xvo8, 0, 1);
}
if (Xpst8 == 2)
{
Account7.OrderBuy(Xcod8, Xvo8, 0, 1);
}
}
}
}
감사합니다.
답변 1
예스스탁
예스스탁 답변
2023-10-19 15:32:09
안녕하세요
예스스탁입니다.
var num = Account7.Balance.number;
Balance객체는 잔고객체로 지정한 종목의
평단가등의 정보를 리턴해주는 객체입니다.
Balance객체에는 number라는 프로퍼티가 없습니다.
계좌의 계좌번호는 계좌객체에서 제공되는 값입니다.
계좌번호 리턴은 아래와 같이 지정해서 받아야 합니다.
var num = Account7.number;
스팟 도움말에서 Account객체와 Balance객체 설명 참고하시기 바랍니다.
즐거운 하루되세요
> 멋진감자 님이 쓴 글입니다.
> 제목 : 자동매도수식 검토 및 MessageList오류여부 검토 부탁드립니다.
> 수고많으십니다.
Main.MessageList("na2=",Account7);
Main.MessageList("na1=",woo,"계좌=",num);
var num = Account7.Balance.number;
질문입니다.
na2에서 Account7은 계좌번호가 표시가 되는데
na1에서 계좌번호를 변수로 저장한 num으로 넣으면 undefined 에러가 발생합니다.
수식검토 부탁드립니다.
// 전역변수선언
var exit7;
var Position7;
var Snum7;
var Bnum7;
var BuyFill7;
var SellFill7;
var ID7,ID8,Num7,Num8;
var Xcode7,Xpst7,Xvo7,XID7;
var Xcode8,Xpst8,Xvo8,XID8;
//스팟 시작
function Main_OnStart()
{
Main.SetTimer(1, 10000);
exit7 = false;
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
if (exit7 == false)
{
Account7.SetBalanceItem(MD7, 0);
var vo7 = Account7.Balance.count; //수량
var po7 = Account7.Balance.position; //포지션방향(매도1, 매수2)
var cu7 = Account7.Balance.current; //현재가
var num = Account7.Balance.number;
var woo = C7.GetIndicatorData("진입1", 1, 0);
Main.MessageList("na2=",Account7);
Main.MessageList("na1=",woo,"계좌=",num);
}
}
if ( po7 == 1 && Cu7 >=woo) //매도포지션이고 현재가격이 지표 "진입" 값과 같으면
{
exit7 = true; //첫번째 SetTimer 시작
//전량 시장가로 매수주문(청산) 및 ID7에 주문아이디 저장
ID7 = Account7.OrderBuy(MD7,vo7, 0, 1);
}
if (po7 == 2 && Cu7 <= woo) //매수포지션이고 현재가격이 지표"진입" 값과 같거나 작으면
{
//전량 시장가로 매도주문(청산) 및 ID7에 주문아이디 저장
ID7 = Account7.OrderSell(MD7,vo7, 0, 1);
}
//2번 타이머
if (nEventID == 2) //두번째 SetTimer 시작
{
Main.KillTimer(2);
//Num7주문번호의 미체결 객체 셋팅
Account7.SetUnfillOrderNumber(Num7);
//미체결 수량이 있으면
if (Account7.Unfill.count > 0)
{
Xcode7 = Account7.Unfill.code; //종목코드 저장
Xpst7 = Account7.Unfill.orderKind; //주문구분 저장
Xvo7 = Account7.Unfill.count; //주문수량 저장
XID7 = Account7.OrderCancel(Num7); //취소주문, 주문아이디 XID7 저장
}
}
//3번 타이머
if (nEventID == 3)
{
Main.KillTimer(3);
//Num8주문번호 미체결 객체 셋팅
Account7.SetUnfillOrderNumber(Num8);
if (Account7.Unfill.count > 0)
{
Xcode8 = Account7.Unfill.code;
Xpst8 = Account7.Unfill.orderKind;
Xvo8 = Account7.Unfill.count;
XID8 = Account7.OrderCancel(Num8);
}
}
//주문응답
function Main_OnOrderResponse(OrderResponse)
{
//주문응답 아이디(orderID)가 ID7(최초주문아이디)과 같으면
if (OrderResponse.orderID == ID7)
{
//주문번호 저장
Num7 = OrderResponse.orderNum;
Main.SetTimer(2, 5000);
}
//주문응답 아이디가 ID8과 같으면
if (OrderResponse.orderID == ID8)
{
Num8 = OrderResponse.orderNum;
Main.SetTimer(3, 5000);
}
//재주문
//주문응답 아이디가 XID7과 같으면
//시장가로 재주문
if (OrderResponse.orderID == XID7)
{
if (Xpst7== 1)
{
Account7.OrderSell(Xcod7, Xvo7, 0, 1);
}
if (Xpst7== 2)
{
Account7.OrderBuy(Xcod7, Xvo7, 0, 1);
}
}
//주문응답 아이디가 XID8과 같으면
//시장가로 재주문
if (OrderResponse.orderID == XID8)
{
if (Xpst8 == 1)
{
Account7.OrderSell(Xcod8, Xvo8, 0, 1);
}
if (Xpst8 == 2)
{
Account7.OrderBuy(Xcod8, Xvo8, 0, 1);
}
}
}
}
감사합니다.