Skip to content

Commit 958866a

Browse files
committed
Add html reporting
1 parent 14742ea commit 958866a

File tree

99 files changed

+59542
-6498
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+59542
-6498
lines changed

examples/resources/backtest_report/report.json

Lines changed: 58444 additions & 3410 deletions
Large diffs are not rendered by default.
File renamed without changes.

investing_algorithm_framework/__init__.py

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,27 @@
2222
PandasOHLCVBacktestMarketDataSource, PandasOHLCVMarketDataSource
2323
from .create_app import create_app
2424
from .download_data import download
25-
from .overfitting import create_ohlcv_shuffle_permutation, \
25+
from .reporting import create_ohlcv_shuffle_permutation, \
2626
create_ohlcv_shuffle_returns_and_reconstruct_permutation, \
2727
create_ohlcv_shuffle_block_permutation
28-
from .metrics import get_volatility, get_sortino_ratio, get_profit_factor, \
28+
from .metrics import get_annual_volatility, get_sortino_ratio, get_profit_factor, \
2929
get_cumulative_profit_factor_series, get_rolling_profit_factor_series, \
3030
get_sharpe_ratio, get_price_efficiency_ratio, get_equity_curve, \
3131
get_drawdown_series, get_max_drawdown, get_cagr, \
3232
get_standard_deviation_returns, get_standard_deviation_downside_returns, \
33-
get_max_drawdown_absolute, get_exposure_time, get_average_trade_duration, \
34-
get_net_profit, get_win_rate, get_win_loss_ratio, get_calmar_ratio, \
35-
get_trade_frequency
33+
get_max_drawdown_absolute, get_exposure, get_average_trade_duration, \
34+
get_win_rate, get_win_loss_ratio, get_calmar_ratio, \
35+
get_trade_frequency, get_total_return, get_max_drawdown_duration, \
36+
get_max_daily_drawdown, get_trades_per_day, get_trades_per_year, \
37+
get_percentage_winning_months, get_worst_month, get_worst_trade, \
38+
get_best_trade, get_best_month, get_best_year, get_average_loss, \
39+
get_average_gain, get_average_yearly_return, get_yearly_returns, \
40+
get_monthly_returns, get_average_monthly_return, get_worst_year, \
41+
get_best_trade_date, get_worst_trade_date, get_percentage_winning_years, \
42+
get_average_monthly_return_losing_months, get_rolling_sharpe_ratio, \
43+
get_average_monthly_return_winning_months
44+
from .reporting import generate_backtest_report
45+
3646

3747
__all__ = [
3848
"Algorithm",
@@ -111,18 +121,42 @@
111121
"create_ohlcv_shuffle_block_permutation",
112122
"PandasOHLCVBacktestMarketDataSource",
113123
"PandasOHLCVMarketDataSource",
114-
"get_volatility",
124+
"get_annual_volatility",
115125
"get_sortino_ratio",
116126
"get_cagr",
117127
"get_standard_deviation_returns",
118128
"get_standard_deviation_downside_returns",
119129
"SnapshotInterval",
120130
"get_max_drawdown_absolute",
121-
"get_exposure_time",
131+
"get_exposure",
122132
"get_average_trade_duration",
123-
"get_net_profit",
133+
"get_total_return",
124134
"get_win_rate",
125135
"get_win_loss_ratio",
126136
"get_calmar_ratio",
127137
"get_trade_frequency",
138+
"get_max_drawdown_duration",
139+
"get_max_daily_drawdown",
140+
"get_trades_per_day",
141+
"get_trades_per_year",
142+
"get_percentage_winning_months",
143+
"get_worst_month",
144+
"get_worst_trade",
145+
"get_best_trade",
146+
"get_best_month",
147+
"get_best_year",
148+
"get_worst_year",
149+
"get_average_loss",
150+
"get_average_gain",
151+
"get_average_yearly_return",
152+
"get_yearly_returns",
153+
"get_monthly_returns",
154+
"get_average_monthly_return",
155+
"get_best_trade_date",
156+
"get_worst_trade_date",
157+
"get_percentage_winning_years",
158+
"get_average_monthly_return_losing_months",
159+
"get_average_monthly_return_winning_months",
160+
"get_rolling_sharpe_ratio",
161+
"generate_backtest_report"
128162
]

investing_algorithm_framework/app/reporting/ascii.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/backtest_report.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/charts/__init__.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/evaluation.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/generate.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/alpha.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/beta.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/returns.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/treynor_ratio.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/ulcer.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/metrics/value_at_risk.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/__init__.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/key_metrics_table.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/stop_loss_table.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/time_metrics_table.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/tables/trades_table.py

Whitespace-only changes.

investing_algorithm_framework/app/reporting/templates/report_template.html.j2

Whitespace-only changes.

investing_algorithm_framework/dependency_container.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
SQLPortfolioSnapshotRepository, SQLTradeRepository, \
88
SQLPositionSnapshotRepository, PerformanceService, CCXTMarketService, \
99
SQLTradeStopLossRepository, SQLTradeTakeProfitRepository, \
10-
SQLOrderMetadataRepository
10+
SQLOrderMetadataRepository, SQLOrderTradeAssociationRepository, \
11+
PandasPortfolioRepository, PandasOrdersRepository, PandasUnitOfWork, \
12+
PandasPositionRepository, PandasPositionSnapshotRepository, \
13+
PandasTradeStopLossRepository, PandasTradeTakeProfitRepository, \
14+
PandasOrderTradeAssociationRepository, PandasTradesRepository, \
15+
PandasPortfolioSnapshotRepository, PandasOrderMetadataRepository
1116
from investing_algorithm_framework.services import OrderService, \
1217
PositionService, PortfolioService, StrategyOrchestratorService, \
1318
PortfolioConfigurationService, MarketDataSourceService, BacktestService, \
@@ -35,26 +40,76 @@ class DependencyContainer(containers.DeclarativeContainer):
3540
market_credential_service = providers.ThreadSafeSingleton(
3641
MarketCredentialService
3742
)
43+
# pandas_unit_of_work = providers.ThreadSafeSingleton(
44+
# PandasUnitOfWork
45+
# )
3846
order_repository = providers.Factory(SQLOrderRepository)
47+
# order_repository = providers.Factory(
48+
# PandasOrdersRepository,
49+
# pandas_unit_of_work=pandas_unit_of_work,
50+
# )
3951
order_executor_lookup = providers.ThreadSafeSingleton(
4052
OrderExecutorLookup
4153
)
4254
order_metadata_repository = providers.Factory(SQLOrderMetadataRepository)
55+
# order_metadata_repository = providers.Factory(
56+
# PandasOrderMetadataRepository,
57+
# pandas_unit_of_work=pandas_unit_of_work,
58+
# )
4359
position_repository = providers.Factory(SQLPositionRepository)
60+
# position_repository = providers.Factory(
61+
# PandasPositionRepository,
62+
# pandas_unit_of_work=pandas_unit_of_work,
63+
# )
4464
portfolio_provider_lookup = providers.ThreadSafeSingleton(
4565
PortfolioProviderLookup,
4666
)
4767
portfolio_repository = providers.Factory(SQLPortfolioRepository)
68+
# portfolio_repository = providers.Factory(
69+
# PandasPortfolioRepository,
70+
# pandas_unit_of_work=pandas_unit_of_work,
71+
# )
4872
position_snapshot_repository = providers.Factory(
4973
SQLPositionSnapshotRepository
5074
)
75+
# position_snapshot_repository = providers.Factory(
76+
# PandasPositionSnapshotRepository,
77+
# pandas_unit_of_work=pandas_unit_of_work,
78+
# )
5179
portfolio_snapshot_repository = providers.Factory(
5280
SQLPortfolioSnapshotRepository
5381
)
82+
# portfolio_snapshot_repository = providers.Factory(
83+
# PandasPortfolioSnapshotRepository,
84+
# pandas_unit_of_work=pandas_unit_of_work,
85+
# )
86+
# portfolio_snapshot_repository = providers.Factory(
87+
# PandasPortfolioSnapshotRepository,
88+
# pandas_unit_of_work=pandas_unit_of_work,
89+
# )
5490
trade_repository = providers.Factory(SQLTradeRepository)
91+
# trade_repository = providers.Factory(
92+
# PandasTradesRepository,
93+
# pandas_unit_of_work=pandas_unit_of_work,
94+
# )
5595
trade_take_profit_repository = providers\
5696
.Factory(SQLTradeTakeProfitRepository)
97+
# trade_take_profit_repository = providers.Factory(
98+
# PandasTradeTakeProfitRepository,
99+
# pandas_unit_of_work=pandas_unit_of_work,
100+
# )
57101
trade_stop_loss_repository = providers.Factory(SQLTradeStopLossRepository)
102+
# trade_stop_loss_repository = providers.Factory(
103+
# PandasTradeStopLossRepository,
104+
# pandas_unit_of_work=pandas_unit_of_work,
105+
# )
106+
order_trade_association_repository = providers.Factory(
107+
SQLOrderTradeAssociationRepository
108+
)
109+
# order_trade_association_repository = providers.Factory(
110+
# PandasOrderTradeAssociationRepository,
111+
# pandas_unit_of_work=pandas_unit_of_work,
112+
# )
58113
market_service = providers.Factory(
59114
CCXTMarketService,
60115
market_credential_service=market_credential_service,

investing_algorithm_framework/domain/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
BacktestPosition, Trade, MarketCredential, PositionSnapshot, \
2121
BacktestReportsEvaluation, AppMode, BacktestDateRange, DateRange, \
2222
MarketDataType, TradeRiskType, TradeTakeProfit, TradeStopLoss, \
23-
DataSource, Event, SnapshotInterval
23+
DataSource, Event, SnapshotInterval, TradeOrderAssociation, OrderMetadata
2424
from .services import TickerMarketDataSource, OrderBookMarketDataSource, \
2525
OHLCVMarketDataSource, BacktestMarketDataSource, MarketDataSource, \
2626
MarketService, MarketCredentialService, AbstractPortfolioSyncService, \
@@ -147,4 +147,6 @@
147147
"Event",
148148
"SNAPSHOT_INTERVAL",
149149
"SnapshotInterval",
150+
"TradeOrderAssociation",
151+
"OrderMetadata",
150152
]

investing_algorithm_framework/domain/models/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
from .backtesting import BacktestReport, BacktestPosition, \
33
BacktestReportsEvaluation, BacktestDateRange
44
from .market import MarketCredential
5-
from .order import OrderStatus, OrderSide, OrderType, Order
5+
from .order import OrderStatus, OrderSide, OrderType, Order, OrderMetadata
66
from .portfolio import PortfolioConfiguration, Portfolio, PortfolioSnapshot
77
from .position import Position, PositionSnapshot
88
from .strategy_profile import StrategyProfile
99
from .time_frame import TimeFrame
1010
from .time_interval import TimeInterval
1111
from .time_unit import TimeUnit
1212
from .trade import Trade, TradeStatus, TradeStopLoss, TradeTakeProfit, \
13-
TradeRiskType
13+
TradeRiskType, TradeOrderAssociation
1414
from .trading_data_types import TradingDataType
1515
from .trading_time_frame import TradingTimeFrame
1616
from .date_range import DateRange
@@ -51,4 +51,6 @@
5151
"DataSource",
5252
"SnapshotInterval",
5353
"Event",
54+
"TradeOrderAssociation",
55+
"OrderMetadata",
5456
]

0 commit comments

Comments
 (0)