안녕하세요!
너무나 훌륭한 툴을 제공해 주셔서 재미나게 이것저것 테스트 해 보고 있습니다.
블로그에 올려주신 손절매 하는 코드를 테스트 해 보았는데요, (https://blog.naver.com/intelliquant/221081348453)
"Basket을 생성한 경우 계좌에서 직접 Sell을 할 수 없다"는 오류가 나오네요.
질문1> Basket을 생성한 경우에도 손절매를 할 수 있는 방법이 있을런지요?
질문2> 매월 리밸런싱 하는 경우에, 손절매가 이하의 종목은 더이상 포함되지 않도록 필터링 하려면 코딩을 어떻게 해야 할까요?
고맙습니다.
              
            
안녕하세요. jh B님 buy, sell은 계좌에 직접 주문을 하는 함수이고, 바스켓으로 매매를 하는 로직에는 사용할 수 없습니다. (참고로 https://blog.naver.com/intelliquant/221081348453 위 코드도 바스켓으로 구성해서 매매 하는게 아니라 계좌에 직접 buy & sell하는 샘플입니다.) 바스켓으로 구성된 종목을 사고 팔기 위해서는 enter(stock, quantity) // 매수 leave(stock, quantity) // 매도 함수를 사용하시면 됩니다. // 손절시 var sse = IQStock.getStock('A005930'); // sse 제거할 종목 stock 객체 stock_port.leave(sse, 100); // stock_port 바스켓 객체, 100 수량 도움말, https://intelliquant.co.kr/help/ref/11 참조하시면 될 듯 합니다. 감사합니다. ^^손절매가 이루어 진 종목을 다른 배열에 입력 시키고 필터에서 입력 된 배열에 있는 종목은 제거하면 되겠습니다. if (~~~) { // 손절 로직 // 손절 ~~~~~~~ stock_port.leave(sse, 100); lossCut_codes.splice(0, 0, sse.code); // 임시 배열에 입력 // 손절 로직 끝 // 필터 function stockFilter(stock) { ~~~~ ~~~~ // 손절후 재진입 금지 if (lossCut_codes.indexOf(stock.code) >= 0) { return false; } } // 필터 끝 위와 같이 하면 될 것 같은데 임시 배열(lossCut_codes)을 한번씩 clear하지 않으면 임시 배열에 쌓은 종목은 계속 편입이 안될 것입니다.