Run backtest simulation over specified time period.
Source code in Backtesting/backtest.py
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
38
39
40
41
42
43
44
45
46 | def main():
"""Run backtest simulation over specified time period."""
time_step = 0
delta = (InitialConditions.get_final_time() - InitialConditions.get_initial_time())
time_step_f = int(delta.total_seconds() // InitialConditions.get_time_step_size())
positions = InitialConditions.get_positions()
cash = InitialConditions.get_cash()
save_file = InitialConditions.get_save_file()
open(save_file, 'w').close() #clear file if exists
data_obj = AlpacaDataAPI() #replace as desired
#if not data_obj.is_connected():
# raise ConnectionError("Data API not connected")
portfolio_obj = portfolio(positions, cash, time_step)
portfolio_obj.set_portfolio(time_step, [], data_obj) #set initial portolio prices
Performance.performance(time_step, portfolio_obj)
strategy_obj = Example() #replace as desired
execution_api = MockExecutionAPI() #replace as desired
executor = Execution(execution_api) #necessary to add wrapper class as all api classes need to perform checks
while time_step <= time_step_f:
output = strategy_obj.strategy(portfolio_obj, data_obj, time_step)
executor.execute(output, time_step)
portfolio_obj.set_portfolio(time_step, output, data_obj) #portfolio needs to update every timestep as value of stocks changes
Performance.performance(time_step, portfolio_obj)
time_step += 1
print(f"time step {time_step} complete")
Performance.summary(portfolio_obj)
|