mirror of
https://github.com/wassname/options_backtester.git
synced 2026-06-27 17:31:05 +08:00
Added only cash test
This commit is contained in:
@@ -6,8 +6,10 @@ from backtester import Backtest
|
||||
|
||||
|
||||
def test_backtest(sample_stock_portfolio, sample_stocks_datahandler, sample_options_datahandler):
|
||||
bt = run_backtest(sample_stock_portfolio, sample_stocks_datahandler, sample_options_datahandler,
|
||||
sample_options_strategy(Direction.BUY, sample_options_datahandler.schema))
|
||||
bt = run_backtest(sample_stocks_datahandler,
|
||||
sample_options_datahandler,
|
||||
sample_options_strategy(Direction.BUY, sample_options_datahandler.schema),
|
||||
stocks=sample_stock_portfolio)
|
||||
tl_long, balance_long = bt.trade_log, bt.balance
|
||||
|
||||
last_day_balance_long = balance_long.iloc[-1].values
|
||||
@@ -31,8 +33,10 @@ def test_backtest(sample_stock_portfolio, sample_stocks_datahandler, sample_opti
|
||||
assert (np.isclose(total_costs, [195015.0, -197060.0, 189290.0, -185650.0], atol=tol)).all()
|
||||
assert (dates == ['2017-01-03', '2017-02-01', '2017-03-01', '2017-04-03']).all()
|
||||
|
||||
bt = run_backtest(sample_stock_portfolio, sample_stocks_datahandler, sample_options_datahandler,
|
||||
sample_options_strategy(Direction.SELL, sample_options_datahandler.schema))
|
||||
bt = run_backtest(sample_stocks_datahandler,
|
||||
sample_options_datahandler,
|
||||
sample_options_strategy(Direction.SELL, sample_options_datahandler.schema),
|
||||
stocks=sample_stock_portfolio)
|
||||
tl_short, balance_short = bt.trade_log, bt.balance
|
||||
|
||||
last_day_balance_short = balance_short.iloc[-1].values
|
||||
@@ -58,29 +62,47 @@ def test_backtest(sample_stock_portfolio, sample_stocks_datahandler, sample_opti
|
||||
# to find the actual return for the Ivy porfolio.
|
||||
|
||||
|
||||
def test_backtest_only_stocks(ivy_portfolio, ivy_portfolio_datahandler, sample_options_datahandler):
|
||||
def test_only_stocks(ivy_portfolio, ivy_portfolio_datahandler, sample_options_datahandler):
|
||||
allocation = {'stocks': 1.0, 'options': 0.0, 'cash': 0.0}
|
||||
bt = run_backtest(ivy_portfolio,
|
||||
ivy_portfolio_datahandler,
|
||||
bt = run_backtest(ivy_portfolio_datahandler,
|
||||
sample_options_datahandler,
|
||||
sample_options_strategy(Direction.BUY, sample_options_datahandler.schema),
|
||||
stocks=ivy_portfolio,
|
||||
allocation=allocation)
|
||||
|
||||
print(bt.balance.columns)
|
||||
balance = bt.balance[1:]
|
||||
tolerance = 0.0001
|
||||
assert np.allclose(balance['total capital'], balance['cash'] + balance['stocks capital'], rtol=tolerance)
|
||||
assert np.allclose(balance['total capital'], bt.initial_capital * balance['accumulated return'], rtol=tolerance)
|
||||
assert np.allclose(balance['options capital'], 0, rtol=tolerance)
|
||||
|
||||
actual_return = 1.025
|
||||
return_tolerance = 0.01
|
||||
assert np.isclose(balance['accumulated return'].iloc[-1], actual_return, rtol=return_tolerance)
|
||||
|
||||
|
||||
def run_backtest(stocks,
|
||||
stock_data,
|
||||
def test_only_cash(sample_stock_portfolio, sample_stocks_datahandler, sample_options_datahandler):
|
||||
allocation = {'stocks': 0.0, 'options': 0.0, 'cash': 1.0}
|
||||
bt = run_backtest(sample_stocks_datahandler,
|
||||
sample_options_datahandler,
|
||||
sample_options_strategy(Direction.BUY, sample_options_datahandler.schema),
|
||||
stocks=sample_stock_portfolio,
|
||||
allocation=allocation)
|
||||
|
||||
balance = bt.balance[1:]
|
||||
tolerance = 0.0001
|
||||
assert np.allclose(balance['total capital'], balance['cash'], rtol=tolerance)
|
||||
assert np.allclose(balance['total capital'], bt.initial_capital * balance['accumulated return'], rtol=tolerance)
|
||||
assert np.allclose(balance['stocks capital'], 0, rtol=tolerance)
|
||||
assert np.allclose(balance['options capital'], 0, rtol=tolerance)
|
||||
assert np.allclose(balance['% change'], 0, rtol=tolerance)
|
||||
assert np.allclose(balance['accumulated return'], 1.0, rtol=tolerance)
|
||||
|
||||
|
||||
def run_backtest(stock_data,
|
||||
options_data,
|
||||
strategy,
|
||||
stocks=None,
|
||||
allocation={
|
||||
'stocks': 0.50,
|
||||
'options': 0.50,
|
||||
@@ -88,7 +110,8 @@ def run_backtest(stocks,
|
||||
},
|
||||
**kwargs):
|
||||
bt = Backtest(allocation, **kwargs)
|
||||
bt.stocks = stocks
|
||||
if stocks:
|
||||
bt.stocks = stocks
|
||||
bt.options_strategy = strategy
|
||||
bt.options_data = options_data
|
||||
bt.stocks_data = stock_data
|
||||
|
||||
Reference in New Issue
Block a user