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

손절매 질문 드립니다.

Jh B 2018.09.30 17:05 조회수  404 추천 0

안녕하세요!


너무나 훌륭한 툴을 제공해 주셔서 재미나게 이것저것 테스트 해 보고 있습니다.

블로그에 올려주신 손절매 하는 코드를 테스트 해 보았는데요, (https://blog.naver.com/intelliquant/221081348453)

"Basket을 생성한 경우 계좌에서 직접 Sell을 할 수 없다"는 오류가 나오네요.


질문1> Basket을 생성한 경우에도 손절매를 할 수 있는 방법이 있을런지요?

질문2> 매월 리밸런싱 하는 경우에, 손절매가 이하의 종목은 더이상 포함되지 않도록 필터링 하려면 코딩을 어떻게 해야 할까요?


고맙습니다.


댓글 3
안녕하세요. 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 참조하시면 될 듯 합니다.

감사합니다. ^^
푸른주전자 2018.10.01 09:40
손절매가 이루어 진 종목을 다른 배열에 입력 시키고
필터에서 입력 된 배열에 있는 종목은 제거하면 되겠습니다.

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하지 않으면
임시 배열에 쌓은 종목은 계속 편입이 안될 것입니다. 
푸른주전자 2018.10.01 09:47
푸른주전자님 감사합니다.

덕분에 너무 쉽게 해결이 되었네요.
오늘도 즐거운 하루 보내세요!

감사합니다.
Jh B 2018.10.01 13:39
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글