Backtesting.backtest

Main backtesting execution module.

main()

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)