Home 12월 29일 Today I Learned
Post
Cancel

12월 29일 Today I Learned

오늘 한 일

  • 블로그 TIL을 작성하였다
  • 1일 1커밋을 하였다

느낀 점

학교에서 취업 준비를 위해 프로젝트를 새로 시작하려고 하였으나 앱 대회들도 없어서 썡으로 아이디어를 구상하니 떠오르지도 않고 디자이너도 없어서 내가 원하는 아이디어도 디자인적으로 구현하기 힘들어 이런 딜레마 때문에 계속해서 시간만 버리면서 새 프로젝트를 할 의욕도 없어졌었다 하지만 어찌됐든 새 프로젝트는 해야했기에 이전에 목표했던 백테스팅 앱을 위해 백테스팅 공부를 시작했는데 그래도 일단 시작하고 보니 어느 정도 이런 무기력이 완화된 거 같긴한데 언제 또 재발할지 모르겠다

배운 점

백테스팅 라이브러리 backtesting.py

새로운 프로젝트를 위해 조사를 하던 중 파이썬으로 백테스팅을 할 수 있는 라이브러리인 backtesting.py를 알게 되었다 backtesting.py는

1
$ pip install backtesting

를 통해 쉽게 다운로드하여 사용할 수 있으며 아래 코드는 구글 주식의 SMA 전략을 사용한 백테스팅 예제이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from backtesting import Backtest, Strategy
from backtesting.lib import crossover

from backtesting.test import SMA, GOOG


class SmaCross(Strategy):
    def init(self):
        price = self.data.Close
        self.ma1 = self.I(SMA, price, 10)
        self.ma2 = self.I(SMA, price, 20)

    def next(self):
        if crossover(self.ma1, self.ma2):
            self.buy()
        elif crossover(self.ma2, self.ma1):
            self.sell()


bt = Backtest(GOOG, SmaCross, commission=.002,
              exclusive_orders=True)
stats = bt.run()
bt.plot()

해당 코드 실행 시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Start                     2004-08-19 00:00:00
End                       2013-03-01 00:00:00
Duration                   3116 days 00:00:00
Exposure Time [%]                       94.27
Equity Final [$]                     68935.12
Equity Peak [$]                      68991.22
Return [%]                             589.35
Buy & Hold Return [%]                  703.46
Return (Ann.) [%]                       25.42
Volatility (Ann.) [%]                   38.43
Sharpe Ratio                             0.66
Sortino Ratio                            1.30
Calmar Ratio                             0.77
Max. Drawdown [%]                      -33.08
Avg. Drawdown [%]                       -5.58
Max. Drawdown Duration      688 days 00:00:00
Avg. Drawdown Duration       41 days 00:00:00
# Trades                                   93
Win Rate [%]                            53.76
Best Trade [%]                          57.12
Worst Trade [%]                        -16.63
Avg. Trade [%]                           1.96
Max. Trade Duration         121 days 00:00:00
Avg. Trade Duration          32 days 00:00:00
Profit Factor                            2.13
Expectancy [%]                           6.91
SQN                                      1.78
Kelly Criterion                        0.6134
_strategy              SmaCross(n1=10, n2=20)
_equity_curve                          Equ...
_trades                       Size  EntryB...
dtype: object

이러한 값을 출력하게 되는데 이 값들을 해석하면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Start: 전략이 시작된 날짜 (2004-08-19)
End: 전략이 종료된 날짜 (2013-03-01)
Duration: 전략이 실행된 기간 (3116일)
Exposure Time [%]: 시장에 노출된 시간의 비율 (94.27%)
Equity Final [$]: 전략 종료 시점의 자본금 (68,935.12달러)
Equity Peak [$]: 전략 실행 중 최고 자본금 (68,991.22달러)
Return [%]: 전략 수익률 (589.35%)
Buy & Hold Return [%]: 같은 기간 동안 단순히 보유했을 때의 수익률 (703.46%)
Return (Ann.) [%]: 연간화된 수익률 (25.42%)
Volatility (Ann.) [%]: 연간화된 변동성 (38.43%)
Sharpe Ratio: 샤프 비율, 위험 대비 수익률 (0.66)
Sortino Ratio: 소르티노 비율, 하방 위험 대비 수익률 (1.30)
Calmar Ratio: 칼마 비율, 최대 낙폭 대비 연간 수익률 (0.77)
Max. Drawdown [%]: 최대 낙폭 (33.08%)
Avg. Drawdown [%]: 평균 낙폭 (5.58%)
Max. Drawdown Duration: 최대 낙폭 지속 기간 (688일)
Avg. Drawdown Duration: 평균 낙폭 지속 기간 (41일)
# Trades: 거래 횟수 (93회)
Win Rate [%]: 승률 (53.76%)
Best Trade [%]: 최고 수익 거래 (57.12%)
Worst Trade [%]: 최대 손실 거래 (-16.63%)
Avg. Trade [%]: 평균 거래 수익률 (1.96%)
Max. Trade Duration: 최장 거래 지속 기간 (121일)
Avg. Trade Duration: 평균 거래 지속 기간 (32일)
Profit Factor: 수익 요인 (2.13)
Expectancy [%]: 예상 수익률 (6.91%)
SQN: 시스템 품질 번호 (1.78)
Kelly Criterion: 켈리 기준 (0.6134)
_strategy: 사용된 전략 (SmaCross(n1=10, n2=20))
_equity_curve: 자본금 변화 곡선
_trades: 거래 목록

이렇다

내일 계획

내일은 알고리즘을 풀어야겠다

This post is licensed under CC BY 4.0 by the author.

12월 28일 Today I Learned

Python의 pass란 무엇일까?