-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
37 lines (28 loc) · 1.42 KB
/
main.py
File metadata and controls
37 lines (28 loc) · 1.42 KB
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
33
34
35
36
37
from data_provider import RiskFreeRateProvider
from stock import Stock
from indicators import SMAIndicator, ATRIndicator
from trading_strategy import MovingAverageStrategy, BuyAndHoldStrategy
from backtest_engine import BacktestEngine
from slippage import ATRBasedSlippage
if __name__ == "__main__":
START_DATE = "2020-01-01"
END_DATE = "2025-01-01"
spy = Stock("SPY", START_DATE, END_DATE)
tlt = Stock("TLT", START_DATE, END_DATE)
rfr = RiskFreeRateProvider(START_DATE, END_DATE)
# Add SMA 20 day indicator to SPY
spy_sma_20 = SMAIndicator(period=20)
spy.add_indicator(spy_sma_20)
# Add ATR indicator for slippage model
spy_atr_14 = ATRIndicator(period=14)
spy.add_indicator(spy_atr_14)
# Create the ATR-based slippage model
atr_slippage = ATRBasedSlippage(atr_column_name=spy_atr_14.column_name, slippage_factor=0.5)
# Create the strategy using the SAME indicator instance
#spy_ma_strategy = MovingAverageStrategy(spy, sma_indicator=spy_sma_20)
spy_hold_strategy = BuyAndHoldStrategy(spy)
hold_backtest = BacktestEngine([spy], strategy=spy_hold_strategy, slippage_model=atr_slippage, risk_free_rate=rfr, position_size=100000)
hold_backtest.run_backtest()
# Example pair strategy with the MovingAverageStrategy
#pair_backtest = BacktestEngine([spy, tlt], strategy=spy_ma_strategy, slippage_model=atr_slippage, risk_free_rate=rfr)
#pair_backtest.run_backtest()