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

순환매 샘플 코드입니다

Prophit 2018.10.04 11:22 조회수  1584 추천 4

정기적으로 일괄 포트를 매수매도 하는 게 아닌

순환매매 방식의 코드입니다


[포함된 기능]

1. 하루 매매 종목수 제한

2. N일 보유 후 매도

3. N% 익절 + M일간 재매수 방지

3 N% 손절  + M일간 재매수 방지



예를들면 10종목 보유시 1종목을 익절하고 다음 순위 1종목만 추가로 매입하는 방식입니다.

댓글 11
2015년 부터 2017까지 박스형태로 횡보하는게 상당히 특이하네요
그리고 어떤 이유인지는 잘 모르겠습니다만 포트전체 금액이 늘어나면 이런 경고가 나오면서 끝나네요
[abnormal terminated]TypeError: Cannot get property "mean" of null in <eval> at line number 63
keadr 2018.10.06 11:34
샘플코드용이라서 전략은 특별한게 없고 그냥 PER+PBR 입니다
mean 은 보유종목의 평균가 인데  그기간까지 돌려본적없어서 돌려봐야겠네요
Prophit 2018.10.06 22:20
2015 ~2018 돌려봤는데 말씀하신 증상이 안나오네요
Prophit 2018.10.06 22:48
우선 정말 감사합니다. 수익률을 늘릴수있는 단서를 찾은거 같습니다. 윗분이 말씀하신 에러는 저도 발생하서 코드를 살펴보니 stock_budget 이 잘못 계산 되지 않았나 예상해봅니다.
      var cash_rate = account.cash * STOCK_WEIGHT;  // 남은 현금으로 매수 비중 설정
    var Equty_rate = account.getTotalEquity() * STOCK_WEIGHT; // 현재 자산 비중

    var stock_budget_byC = (cash_rate / (port_size - port_length)); // 10%만 예산    
    var stock_budget_byE = (Equty_rate / (port_size - port_length))/port_size; // 10%만 예산

다음과 같이  stock_budget_byE 를 구할때는 포트사이즈로 한번더 나눠주는게 맞는거 같아 수정해서 사용중이고 STOCK_WEIGHT 한번 더 곱해주는 것도 임의로 제거해서 사용중입니다.
오세훈 2018.10.07 05:07
아 죄송합니다. 이게 아닌것 같네요;;
오세훈 2018.10.07 05:30
getAdjClose() 로 수량을 구하는데 실제로 주문하는 가격이랑 달라서 생기는 형상같은데 잘은 모르겠네요..
오세훈 2018.10.07 06:15
그렇다면 AdjClose가 아닌  Close 해보면 되겠네요.

STOCK_WEIGHT 가 2번 들어갔군요. 둘중 한곳은 빼면 되겠습니다
포트 비중은 
var stock_budget_byE = (Equty_rate / (port_size - port_length)) * STOCK_WEIGHT; // 10%만 예산
이부분을 잘못 생각했네요.
현금은 남은 매수 종목수로 나누는게 맞는데
자산은 포트사이즈로 나눠야 하겠습니다

var stock_budget_byC = (cash_rate / (port_size - port_length)) * STOCK_WEIGHT; // 10%만 예산 
var stock_budget_byE = Equty_rate / port_size ; // 10%만 예산

이렇게 수정하면 되겠습니다
비중이 쏠리는 걸 방지하기 위해
둘중 적은 비중으로 매수가 들어갑니다
Prophit 2018.10.07 15:36
감사합니다. (port_size - port_length)를 port_size 로 대체했어야했네요
오세훈 2018.10.07 21:33
@keadr 
오늘 발견했는데 상폐된 경우 에러나는 거네요
accountEgg !== null && accountEgg.mean !== null && basketEgg.stock.getTradingVolume() != 0
로 수정하면 됩니다.
위치는 잘 보시면 보일거예요
Prophit 2018.10.27 00:24
var accountEgg = bsk.account.eggMap.get(basketEgg.stock.code);

에서 eggMap 은 어떤 메서드 인가요? API reference 에는 안나오는데요.
So-Young Sung 2018.11.27 13:24
저도 잘 모르겠는데 그냥 바스켓 내부를 연결해주는 메서드 같습니다.
다른 예제보고 만든거예요 ㅎㅎㅎ
Prophit 2018.12.18 13:48
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글