일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백트레이더
- Cloud
- python
- 개발자
- 오토사
- 클라우드
- 확률
- AUTOSAR
- 프로그래밍
- probability
- 토플 라이팅
- 자동매매
- 자동차sw
- TOEFL
- 아마존 웹 서비스
- Bitcoin
- 퀀트
- 백테스트
- it
- 파이썬
- GeorgiaTech
- 비트코인
- AWS
- toefl writing
- 블록체인
- 암호화폐
- can
- backtrader
- 토플
- backtest
- Today
- Total
Leo's Garage
BackTesting.py - SMA 본문
오늘은 새로운 BackTesting Framework인 BackTesting.py를 이용하여 간단한 SMA cross 전략을 만들어보겠다.
https://kernc.github.io/backtesting.py/
BackTesting.py는 BackTrader와 마찬가지로 historical data를 바탕으로 유저의 매매 전략을 테스트해볼 수 있게 해주는 FrameWork이다.
물론 BackTesting이 잘된다고 해서 미래가 보장되는 것은 아니지만 어느정도 방향을 확인할 수 있다는 점이 주효할 것이다.
기본적인 사용방법은 BackTrader와 유사하다.
우선 해당 FrameWork를 사용하기 위해서는 아래와 같이 파이썬 패키지를 설치해야 한다.
pip3 install backtesting
그리고 나서 간단하게 SMA 2개를 이용해서 매수 매도하는 전략을 아래와 같이 작성해보았다.
import pandas as pd
import yfinance as yf
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
# Download stock data from Yahoo Finance
ticker = "AAPL"
data = yf.download(ticker, start="2020-01-01", end="2021-12-31")
# Define a simple moving average crossover strategy
class SmaCross(Strategy):
def init(self):
self.sma1 = self.I(lambda: pd.Series(self.data.Close).rolling(window=10).mean())
self.sma2 = self.I(lambda: pd.Series(self.data.Close).rolling(window=20).mean())
def next(self):
if crossover(self.sma1, self.sma2):
self.buy()
elif crossover(self.sma2, self.sma1):
self.sell()
# Initialize the backtest
bt = Backtest(data, SmaCross, cash=10000, commission=.002, exclusive_orders=True)
# Run the backtest and print the results
results = bt.run()
print(results)
bt.plot()
10일선과 20일선을 가지고 10일선이 20일 위로 올라갈 때 매수, 반대로 20일선이 10일 선 위로 올라갈 때 매도 하는 전략이다.
초기 자본은 10000으로 설정하고 commission은 0.2%로 설정하였다.
해당 전략을 2020 ~2021년간 애플 주식에 적용해보았다.
코드를 수행하면 아래와 같이 결과를 받아볼 수 있다.
(backtrader) kimdawoon@kimdawoon-ThinkPad-T580:~/workspace/workspace_python/backtrader$ python SmaCross_BackTesting.py
[*********************100%***********************] 1 of 1 completed
Start 2020-01-02 00:00:00
End 2021-12-30 00:00:00
Duration 728 days 00:00:00
Exposure Time [%] 92.65873
Equity Final [$] 21972.249525
Equity Peak [$] 22077.169599
Return [%] 119.722495
Buy & Hold Return [%] 137.323114
Return (Ann.) [%] 48.230393
Volatility (Ann.) [%] 52.505685
Sharpe Ratio 0.918575
Sortino Ratio 2.137013
Calmar Ratio 1.963839
Max. Drawdown [%] -24.559237
Avg. Drawdown [%] -4.454728
Max. Drawdown Duration 482 days 00:00:00
Avg. Drawdown Duration 31 days 00:00:00
# Trades 20
Win Rate [%] 55.0
Best Trade [%] 79.788108
Worst Trade [%] -10.005947
Avg. Trade [%] 4.022547
Max. Trade Duration 160 days 00:00:00
Avg. Trade Duration 34 days 00:00:00
Profit Factor 3.679433
Expectancy [%] 5.236169
SQN 1.171784
_strategy SmaCross
_equity_curve ...
_trades Size EntryB...
dtype: object
전략의 시작시점, 종료시점이 나오고 Equiry Final을 통해서 최종적으로 자본이 어떻게 변했는지 알 수 있다.
21972.249525면 2배 이상 증가한 것 을 알 수 있다.
좋은점은 MDD 값도 실시간으로 계산된다는 점이다.
이 전략의 최대 MDD는 -24%였다.
해당 전략에 대해서 그래프를 뽑아보면 아래와 같다.
가장 위 차트는 내 자산이 어떤 모습으로 증가했는지를 보여준다.
가운데 차트는 매수, 매도 시점이다.
마지막 아래 차트는 애플 주가의 주가 흐름 추이이다.
BackTesting.py를 처음 써봤는데 여러모로 잘 만들어진 FrameWork인 것 같다.
앞으로 사용해보면서 장단점을 파악해봐야 겠다.
'파이프라인 만들기 > Algo Trading' 카테고리의 다른 글
BackTrader - Nasdaq 100 적용 (0) | 2023.02.16 |
---|---|
BackTrader - 단순 종가 비교 전략 (0) | 2023.02.15 |
BackTrader란 (0) | 2023.02.03 |
BackTrader - 역추세 매매 (SMA 이용) (0) | 2023.02.02 |
BackTrader - Bullish 전략 (2) (0) | 2023.01.29 |