[암호화폐] 시스템트레이딩 전략 : 정액투자법

in #sct4 years ago

업비트 실거래 데이타를 받아서 간단한 전략을 실험해 보았습니다.

이번에 소개할 전략은 정액투자법입니다.

이 방법은 투자 자산의 상승 및 하락에 따라 시가총액을 일정하게 가져가는 방법입니다. 비교적 단순하면서도 상승시 수익을 끝까지 따라갈 수 있는 좋은 전략입니다. 단 하락시에는 지속적인 물타기가 발생하는 단점이 있습니다.

올해 steem 차트입니다.

1/1일 시초가302원, 11/27일 18시 종가는 146원입니다.

시뮬레이션 기간은 2019년 1월 1일 부터 2019년 11월 27일 18시까지입니다.

초기 투입자금 2백만원, 정액투자 1백만원으로 매매가 발생하는 기준을 1%에서 20%까지 다양한 경우에 대하여 1일/1시간/1분 데이터를 기준으로 시뮬레이션을 해 보았습니다.


시뮬레이션 결과입니다.

1일 데이터에 비하여 1시간 데이터의 수익이 좋습니다. 1분 데이터의 경우에는 수익이 발생하는 경우도 생깁니다. 수수료가 반영이 되었는지 확인이 필요합니다.

302원에서 146원으로 약 51% 빠진 것에 비하면 나쁘지 않은 성적으로 보입니다. 가격이 내려가는 자산에 대한 정액투자법은 손실이 발생할 수 밖에 없습니다. 하지만 다른 투자법을 추가로 사용하면 손실을 줄일 수 있을 것 같습니다. 주말동안 좋은 방법을 고민해보고, 전략을 개선해보도록 하겠습니다.

관련 코드 일부를 공개합니다. 코드 정리가 되면 github에 올리도록 하겠습니다.

    # diff amount 만큼 판다. 그만큼 이익
    def do_sell(self, price, diff, diff_per) :
        sell_qty = diff / price

        self.tr_cash += diff
        self.tr_act_sell += 1

        if self.max_profit_per < diff_per :
            self.max_profit_per = diff_per

        self.tr_cur_holding_qty -= sell_qty
    # diff amount 만큼 삼. 
    def do_buy(self, price, diff, diff_per) :
        buy_qty = diff / price

        self.tr_cash -= diff
        self.tr_act_buy += 1

        if self.max_lose_per < diff_per :
            self.max_lose_per = diff_per

        self.tr_cur_holding_qty += buy_qty

    def trading_decision(self, date, tr, cnt) :
        cur_amount = tr['final'] * self.tr_cur_holding_qty
        diff = cur_amount - self.tr_upper_holding_amount
        diff_per = diff / self.tr_upper_holding_amount * 100
        if ( diff > 0 ) : ## 이익 중
            if ( diff_per > self.tr_condition_sell ) : # 이익 난 만큼 팜
                cnt += 1
cash, 수익률
                self.do_sell(tr['final'], diff, diff_per)
        else : ## 손실 중
            diff_per *= -1
            if ( diff_per > self.tr_condition_buy ) : # 손실 난 만큼 삼
cash, 수익률
                cnt += 1
                self.do_buy(tr['final'], diff*-1, diff_per)
        return cnt

    def simulation(self, results) :
        self.start_date =''
        self.end_date = ''
        last_price = 0
        cnt = 0
        for k, v in self.tr_history :
            if ( self.tr_cur_holding_qty == 0) : # 시작이면 종가 기준으로 최대치 매수
                self.tr_cur_holding_qty  = self.tr_upper_holding_amount / v['final']
                self.tr_cash -= self.tr_upper_holding_amount
                self.tr_act_buy += 1
                tmp = k.split('+')
                self.end_date = tmp[0]
                continue

            # 살지 팔지 결정
            cnt = self.trading_decision(k, v, cnt)
            last_price = v['final']

        tmp = k.split('+')
        self.start_date = tmp[0]
        results.append(self.print_summary(last_price))
        return results

Sort:  

fenrir78님이 tradingideas님의 이 포스팅에 따봉(10 SCT)을 하였습니다.

JCAR 11월 구독보팅입니다.
어느새 11월 마지막주가 되었네요. 즐거운 한 주 되시기바랍니다.

손실을 최소화하는것도 중요하니 말이죠

Hi @tradingideas!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.398 which ranks you at #2480 across all Steem accounts.
Your rank has not changed in the last three days.

In our last Algorithmic Curation Round, consisting of 93 contributions, your post is ranked at #22.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server