커뮤니티

수식에러 검토 부탁드립니다.

프로필 이미지
멋진감자
2023-10-25 17:16:04
770
글번호 173419
답변완료

첨부 이미지

수고하십니다. na1 수식에 종목코드를 확인하라는 에러가 뜹니다. 첨부된 편집기화면에서와 같이 종목객체명을 MD7로 지정하고 종목은 E-Micro EUK/USD로 입력하였습니다. 계좌객체도 620으로 입력하였고 자동매매화면과 동일하게 620으로 표시됩니다. 종목객체도 C7로 지정하고 차트명을 s2로 지정하고, 챠트에도 s2로 표시하였고 보조지표 진입1도 챠트에 설정하였습니다. Main.MessageList로는 보조지표 진입1값과 현재가격 및 손익이 정확하게 표시가 됩니다. 그러나 자동매매를 실행시키면 종목코드를 확인하라는 에러메세지가 뜹니다. 검토 부탁드립니다. 수식은 다음과 같습니다. // 전역변수선언 var exit3; 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); exit3 = false; } function Main_OnTimer(nEventID) { if (nEventID == 1) { if (exit3 == false) { Account7.SetBalanceItem(MD7.code, 0); var vo7 = Account7.Balance.count; //수량 var po7 = Account7.Balance.position; //포지션방향(매도1, 매수2) var Cu7 = Account7.Balance.current; //현재가 var PL7 = Account7.Balance.profit; var woo = C7.GetIndicatorData("진입1", 1, 0); Main.MessageList("진입1=",woo,"현재가=",Cu7,"손익=",PL7); //Main.MessageList("na2=",Account7); } } if ( po7 == 1 && Cu7 >=woo) //매도포지션이고 현재가격이 지표 "진입" 값과 크거나 같으면 { exit3 = 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); } } } } 바쁘신데 감사합니다.
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2023-10-26 10:40:44

안녕하세요 예스스탁입니다. MD7은 종목객체입니다. 객체는 여러가지 값이 있는 집합체입니다. 종목객체 안에는 종목코드나 현재가등 여러가지 값을 리턴하는 프로퍼티가 별도로 있습니다. MD7종목객체의 종목코드는 MD7.code로 지정하셔야 합니다. 즐거운 하루되세요 > 멋진감자 님이 쓴 글입니다. > 제목 : 수식에러 검토 부탁드립니다. > 수고하십니다. na1 수식에 종목코드를 확인하라는 에러가 뜹니다. 첨부된 편집기화면에서와 같이 종목객체명을 MD7로 지정하고 종목은 E-Micro EUK/USD로 입력하였습니다. 계좌객체도 620으로 입력하였고 자동매매화면과 동일하게 620으로 표시됩니다. 종목객체도 C7로 지정하고 차트명을 s2로 지정하고, 챠트에도 s2로 표시하였고 보조지표 진입1도 챠트에 설정하였습니다. Main.MessageList로는 보조지표 진입1값과 현재가격 및 손익이 정확하게 표시가 됩니다. 그러나 자동매매를 실행시키면 종목코드를 확인하라는 에러메세지가 뜹니다. 검토 부탁드립니다. 수식은 다음과 같습니다. // 전역변수선언 var exit3; 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); exit3 = false; } function Main_OnTimer(nEventID) { if (nEventID == 1) { if (exit3 == false) { Account7.SetBalanceItem(MD7.code, 0); var vo7 = Account7.Balance.count; //수량 var po7 = Account7.Balance.position; //포지션방향(매도1, 매수2) var Cu7 = Account7.Balance.current; //현재가 var PL7 = Account7.Balance.profit; var woo = C7.GetIndicatorData("진입1", 1, 0); Main.MessageList("진입1=",woo,"현재가=",Cu7,"손익=",PL7); //Main.MessageList("na2=",Account7); } } if ( po7 == 1 && Cu7 >=woo) //매도포지션이고 현재가격이 지표 "진입" 값과 크거나 같으면 { exit3 = 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); } } } } 바쁘신데 감사합니다.
프로필 이미지

멋진감자

2023-10-26 15:12:46

답변 감사합니다. 좋은하루 되세요