커뮤니티
내가 만든 전략들과 지식을 공유하고 토론합니다.

IQLive 관련 문의드립니다.

jg997 2021.02.14 22:41 조회수  293 추천 1

NH 증권계좌에 연결시켜 운용을 시작한지 한참 지났는데.. 아무런 전략실행 알림이 없어 메일을 보니 아래와 같은 오류 안내 내용이 있었습니다.


[알림] 알고리즘 스크립트에서 문법 오류가 발견되었습니다. 알고리즘에 문제가 없는지 확인해주세요.

Basket을 생성한 경우 계좌에서 직접 buy 를 할 수 없습니다. in <eval> at line number 419 at column number 8


제 알고리즘은 계좌에서 직접 Buy하는 방식으로 구현되어 있어(blog 손절매 코드 참조) Basket 생성부분과 IQLive.addPortfolio 부분을 삭제하고 재검증을 요청하였는데,

아래와 같이 IQLive.addPortfolio 함수가 호출되지않았다는 검증오류 안내가 떴습니다.


Error: IQLive.addPortfolio() was never called. in  at line number 253 at column number 12


계좌에서 직접 Buy / Sell 할수 있는 방법을 가이드해 주시면 감사하겠습니다.


댓글 3
jg997님 안녕하세요?

안타깝게도 현재 IQ Live는 Basket을 사용하지 않고 계좌에서 직접 Buy/Sell 하는 알고리즘은 지원되지 않고 있습니다.
IQ Live와 자동주문 방식에 대해 자세히 설명을 드리면...
IQ Live에 등록한 알고리즘을 매일 저녁에 실행하는데, 기존의 목표 포트폴리오(즉, 현재 보유 포트폴리오)와 비교하여 새로운 목표 포트폴리오가 변경이 되면 해당일에 리밸런싱이 발생한 것으로 판단합니다. 그러면 이날 생성된 목표 포트폴리오 전체를 NH투자증권에 전달하면 증권사에서 현재 보유종목과의 차이로부터 매수/매도 종목과 수량을 결정하여 자동으로 주문이 나가게 됩니다.
따라서, 계좌에서 직접 Buy/Sell 하는 방식으로는 목표 포트폴리오가 따로 생성이 되지 않으므로 IQ Live 자체에서 Basket을 사용하지 않는 알고리즘은 지원을 하지 않는 정책을 채택하고 있습니다.

한가지 비슷하게 구현할 수 있는 방법은 계좌에서 직접 buy/sell 하는 대신 Basket에 해당 종목을 enter/leave 함수를 사용하여 편입/편출을 시키는 방법으로 변경하시면 해당 로직을 거의 비슷하게 구현할 수 있을 것 같습니다. 여기서 주의할 것은 buy에서는 기존 보유종목을 추가매수하는 경우 추가수량만 지정하면 되지만, enter에서는 최종 목표 보유수량을 지정하는 방식이라는 점을 유의하시면 될 듯 합니다. 
또 손절을 적용하시려는 것이라면, 평균 매입가격 정보는 Account 객체에 정보가 있으므로, 해당 종목의 손절 여부는 Account에서 해당 종목코드로 판단을 하고 leave 함수로 Basket에서 해당 종목을 편출시키는 방식으로 다소 복잡하게 처리를 해 주어야 할 것 같습니다.

도움이 되셨기를 바랍니다. 감사합니다.
인텔리퀀트 2021.02.15 11:15
답변 감사드립니다.
알려주신대로 enter/leave 함수로 구현은 완료하였는데, 요렇게만 하면 Basket정보가 NH로 전달되는지 궁급합니다..
아니면 orderBasket() 함수나 buildPortfolio() 함수를 호출해야하는지요?
jg997 2021.02.17 19:10
jg997님 안녕하세요?
IQ Live가 동작하는 원리는 백테스트 방식과 완벽히 동일합니다.
따라서, 백테스트로 충분히 정상 작동하는지 검증하시고 IQ Live에 적용하시면 원하시는 대로 될 것으로 생각됩니다.

참고로, orderBasket() 함수는 이제는 불필요해진 함수입니다. (무조건 매일매일 orderBasket() 의 기능을 자동으로 실행합니다.)
그리고, buildPortfolio() 함수는 enter/leave를 쓰지 않을 때 사용하는 함수로서, 포트폴리오를 구성할 종목 Stock 객체들만 배열로 만들어 리턴(반환)해 주면 플랫폼에서 알아서 매매할 목록을 만들어 백테스트를 수행하는 함수입니다. 따라서, 개별종목을 편입/편출할 때는 enter/leave 함수를 사용하시라고 권장해 드린 것입니다.
인텔리퀀트 2021.02.17 22:00
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글