업비트 실거래 데이타를 받아서 간단한 전략을 실험해 보았습니다.
이번에 소개할 전략은 정액투자법입니다.
이 방법은 투자 자산의 상승 및 하락에 따라 시가총액을 일정하게 가져가는 방법입니다. 비교적 단순하면서도 상승시 수익을 끝까지 따라갈 수 있는 좋은 전략입니다. 단 하락시에는 지속적인 물타기가 발생하는 단점이 있습니다.
올해 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
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:
Feel free to join our @steem-ua Discord server