커뮤니티

예스스팟 Q&A

답변완료

수식 수정 부탁드립니다.(에러)

잘 작동을 하다가 아래와 같은 에러메시지가 뜨면서 작동을 멈춥니다. 특히, 신규종목이 추가될때 에러가 발생하는듯 합니다. 78번줄 'TypeError : Cannot read property 'code' of undefined' 문제점과 해결책을 알려주시면 감사하겠습니다. ================================================================ 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)// *제거 { //편입된 종목수 만&#53380;만 수행 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,"종목객체삭제"); } // 현재가가 평균단가 대비 3%이상 하락하면 손절매도 if (ItemObject[i].current <= Account1.Balance.avgUnitCost*0.97) { 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]); } } }
프로필 이미지
몬스터
2019-06-27
3615
글번호 224903
답변완료

모의 거래 옵션 잔고리스트 개수 문의

안녕하십니까? 수고하십니다. 문의드리고자 하는 바는 아래와 같습니다. 옵션 모의거래 테스트를 하면서 GetTheNumberofBalances를 이용하여 잔고리스트의 개수를 불러오고자 했습니다. 하지만 분명 계좌 잔고에는 옵션 종목이 4개가 있는데 위 함수를 이용하여 잔고리스트 수를 불러오면 10개로 나옵니다. 잔고에 있는 옵션을 청산하고 1개만 남겨도 잔고리스트의 수는 10개로 나옵니다. 해당 부분내용은 아래와 같습니다. 참고로 모의계좌번호 일치 확인했습니다. 그리고 추가적인 문의사항은 지금은 6월인데 아래 date결과가 5월로 나옵니다. 분명 컴퓨터에 뜨는 날은 오늘로 뜨는데 말이죠 이부분도 함께 문의드립니다. 감사합니다. var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var Month = d.getMonth(); var SCallCode, BCallCode; var SPutCode, BPutCode; var IDPB, IDPS, IDCS, IDCB; var NumPB, NumPS, NumCS, NumCB; var entryBPutCode, entrySPutCode, entrySCallCode, entryBCallCode; var amount = 20;//매매수량 function Main_OnStart() { Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"--시작--"); var num = A.GetTheNumberOfBalances(); if (HHMMSS >= 90100 && HHMMSS <= 155000 && PstEntry == 0) { Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"num",num); for (var i = 0; i < num; i++) { A.SetBalance(i); if (A.Balance.position == 1) { if (O.GetDelta(A.Balance.code) < 0) { SCallCode = A.Balance.code; Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"SCallCode",A.Balance.code,O.GetDelta(A.Balance.code)); } else { SPutCode = A.Balance.code; Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"SPutCode",A.Balance.code,O.GetDelta(A.Balance.code)); } } else { if (O.GetDelta(A.Balance.code) < 0) { BPutCode = A.Balance.code; Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"BPutCode",A.Balance.code,O.GetDelta(A.Balance.code)); } else { BCallCode = A.Balance.code; Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"BCallCode",A.Balance.code,O.GetDelta(A.Balance.code)); } } } Main.SetTimer(1, 5000); Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"--잔고 내 옵션보유 확인 후 5초 타이머셋--"); } if (HHMMSS >= 90100 && HHMMSS <= 153500 && PstEntry == 1) { Main.SetTimer(2, 5000); Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"--포지션 진입 준비--"); Main.SetTimer(3, 30000); } }
프로필 이미지
rayen
2019-06-17
3248
글번호 224902
답변완료

선물 포지션 전환 방법 문의드립니다.

안녕하십니까. 선물 포지션을 전환할 때 YesSpot으로는 어떻게 해야 하는지요? 예를 들어 선물 1계약을 매수로 보유하다가 매도 포지션으로 바꾸고 싶으면 무조건 2계약을 매도해야 하는 것인가요?
프로필 이미지
좋은밤
2019-06-14
3296
글번호 224899
답변완료

Orderbuy에 대해 설명 부탁드립니다.

Account1.OrderBuy(“005930”,10,0,1) 예스스탁을 설명한 파일에 위와 같은 예시가 있었습니다. 종목코드가 005930인 삼성전자 10주를 시장가로 사라는 명령어로 알고 있습니다. 1) 현재가로 살 때 3번째칸(dPrice)을 0으로 지정해도 현재가로 주문이 나가는지입니다. Account1.OrderBuy(“005930”,10,0,0) 위와 같이 주문하면 삼성전자 10주를 0원에 지정가 매수로 나가는지 아니면 매수 당시 현재가로 지정가 매수가 나가는지 궁급합니다. 2) 제가 하고 싶은것은 최우선지정가로 주문하는 것인데, Account1.OrderBuy(“005930”,10,0,10) dPrice칸은 0으로 둔채 위와 같이 입력하면 삼성전자 10주를 최우선지정가로 사라는 명령이 나가는지 궁금합니다. 모의매매에는 다 0원으로 주문이 나가는 것 같아서 질문드립니다.
프로필 이미지
오전만트레이딩
2019-06-12
3136
글번호 224898
답변완료

수식 작성 부탁드립니다.

안녕하세요 많은 도움에 항상 감사드립니다. 아래 예시의 스팟 수식을 부탁드립니다. 1. 아래의 스팟 샘플은 매수 포지션 일때, 익절과 손절 설정입니다. 아래의 조건문에 추가하거나 아니면 새롭게 트레일링 조건을 하나 더 추가하고 싶습니다. ( 예시 : 수익 최고치가 진입가의 + 25틱 이되면 트레일링 발동하여 (최고치에서) -5틱 아래로 내려오면 전량 청산. 예로는 +25틱에서 -5틱 이상 떨어지지 않으면 계속 증가하여 최종 +50틱에서 전량 청산한다.) // ---------------------------------------------------------- //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 ) { //현재가가 잔고평단가 대비 지정틱수(+50틱) 이상이면 익절청산 (시장가) if (MarketData1.current >= (Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*50) ) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); } } // ---------------------------------------------------------- 2. 스팟에서 매매시간 설정이 가능하다면, 스팟에서 아래와 같이 설정하고 싶습니다. (1) 거래시간 #1 : 당일 오전 10시 ~ 저녁 9시 #2 : 당일 저녁 11시 ~ 저녁 12시 #3 : 다음날 오전 00시 ~ 오전 4시 ( 오전 10시~ 다음날 오전4시 (당일 저녁 9시~11시 제외) ) 3. 손절 익절 초기 설정은 손절(25틱)/익절(25틱) 입니다. (1) 진입후에 30분이 지나도 청산이 되지 않는 경우, 손절/익절을 각 각 10틱으로 변경하고, 그 이후에 30분이 지나도 청산이 되지 않으면 현재가에 청산한다. (2) 진입후에 20봉이 경과해도 청산이 되지 않는 경우, 손절/익절을 각 각 10틱으로 변경하고, 그 이후에 또 20봉이 경과해도 청산이 되지 않으면 현재가에 청산한다. 감사합니다.
프로필 이미지
워싱턴
2019-06-19
3256
글번호 224896
답변완료

수식작성 문의드립니다.

수고많으세요. 궁금한게 있어 질문드립니다. 먼저 수식을 적용하고, 매매를 해보고, 매매를 한 상태에서 수식을 적용해보았습니다. 청산이 되지 않는 경우가 있는데 왜 그런지 궁금합니다. (수식) var tEnable = true, BID,SID,Bnum,Snum; function Main_OnStart() { Main.MessageLog("청산식 시작"); } function Main_OnU*dateMarket(sItemCode, lU*dateID) { if (sItemCode == M1.code && lU*dateID == 20001 && tEnable == true) { A1.SetBalanceItem(M1.code,0); if (A1.Balance.profit > tProfit || A1.Balance.profit < tLoss) { if (A1.Balance.position == 1 && tEnable == true) { BID = A1.OrderBuy(A1.Balance.code, A1.Balance.count, 0, 1); tEnable = false; } else if (A1.Balance.postion == 2 && tEnable == true) { SID = A1.OrderSell(A1.Balance.code, A1.Balance.count, 0, 1); tEnable = false; } } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) Bnum = OrderResponse.orderNum; else if(OrderResponse.orderID == SID) Snum = OrderResponse.orderNum; } function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == Bnum) { Main.MessageList("매도청산"); tEnable = true; } else if (NotifyFill.orderNum == Snum) { Main.MessageList("매수청산"); tEnable = true; } }
프로필 이미지
망고주스
2019-06-07
3272
글번호 224895
답변완료

수식 작성 부탁드립니다.

매번 도움 감사드립니다. 하기와 같은 수식 작성 부탁드립니다. (종목검색 후 매매 수식은 게시판에도 많은데, 검색 이후 매수/매도 시, 미체결에 대한 정정 기능은 구현을 못하겠습니다ㅜㅜ) 1) 종목검색 하여 차트생성 2) 생성된 차트에 시스템 적용 3) 시스템 신호 발생시 매수/매도 4) 미체결 시 주문 정정 (매수미체결시: 매도1호가로 정정, 매도미체결: 매수1호가로 정정)
프로필 이미지
adino30
2019-06-06
3274
글번호 224894

몬스터 님에 의해서 삭제되었습니다.

프로필 이미지
몬스터
2019-06-05
0
글번호 224893

어나니머스 님에 의해서 삭제되었습니다.

프로필 이미지
어나니머스
2019-05-29
3
글번호 224888
답변완료

예스스팟 실행 방법 문의

항상 도움을 주셔서 감사합니다. 1. 첨부처럼 예스스팟의 전략을 세우는 중인데요, 결과값을 최근 메세지로 확인한 후 계속 수정을 하고 또 확인하고, 수정하고, 확인하고를 반복하고 있습니다. 전략이 한번 실행되었을 때 어떻게 다시 실행할 수 있는지 방법을 몰라. 'X' 를 눌러 전략을 삭제한 후 다시 등록해서 테스트 중인데 바로 다시 실행하는 방법이 있는지요? (전략 예시: 매일 급등하는 종목 3개를 자동 종목검색하여 자동 매매) 2. 이번 달 하이투자증권에서 예스툴박스 교육 받을 때 고객들이 하이투자증권에 PC를 놓고 몇 년씩 자동 매매를 하고 있다고 했는데요, 매일 예스스팟의 전략이 자동 실행되려면 어떻게 해야 하는지요? (설마 매일 하이투자증권 직원이 전략을 'X' 클릭하고 전략 새로 등록하는 방법은 아니겠죠?) 3. 예스트레이더는 일정 시간이 지나면 자동으로 세션을 종료시키지는 않나요?
프로필 이미지
비제69
2019-05-27
3481
글번호 224883