Fai 4 cose
-
Fai che l'ottimizzazone restituisca un dataframe fatto così:
- Indice: interi da 0 a +inf con ticker (es. "AAPL0001", "AAPL0002", "LDO.MI0177")
- Aggiunta di tre colonne:
- Strategy_Name: mettiamo il display_name della strategia
- par_names: tupla ordinata col nome dei parametri
- par_values: tupla ordinata con i valori dei parametri
-
Rendi le statistiche da mostrare in ogni modalità definite nel config.py o nello yaml
- STATS_OF_INTEREST (enum?)
- STATS_FOR_MC
- MC_PERCENTILES
- STATS_FOR_WFO
-
Finita l'ottimizzazione crea colonne multiindex e comincia a imbastire la tabella come segue. Man mano che si fanno monte carlo e wfo, la si completa con le ulteriori colonne. Solo alla fine del macro processo di ottimizzazione si va a scrivere la variabile session_state["xxx"] che verrà utilizzata nel display_results()
Usiamo colonne multiindex:
(Strategy, Name)
(Strategy, Param Names)
(Strategy, Param Values)
(BT Stats, Return [%])
(BT Stats, Sharpe Ratio)
...
(BT Stats, Trade_returns) : np.array
(BT Stats, Equity_curve) : pd.Series
(Benchmark Stats, Return [%])
(Benchmark Stats, Sharpe Ratio)
...
(Benchmark Stats, Var. Return [%])
(Monte Carlo, Return [%] - Perc1)
(Monte Carlo, Return [%] - Perc2)
(Monte Carlo, Return [%] - Perc3)
(Monte Carlo, Return [%] - Perc4)
(Monte Carlo, Return [%] - Perc5)
(Monte Carlo, Return [%] - Prob. > Benchmark)
(Monte Carlo, Max Drawdown [%] - Perc1)
(Monte Carlo, Max Drawdown [%] - Perc2)
(Monte Carlo, Max Drawdown [%] - Perc3)
...
(wfo, Return [%] - avg.)
(wfo, Return [%] - std. dev.)
(wfo, Return [%] - consistency index) --> Media dei consistency index dei singoli cicli,ossia stat_os/stat_is - 1
(wfo, Max Drawdown [%] - avg.)
(wfo, Max Drawdown [%] - std. dev.)
(wfo, Max Drawdown[%] - consistency index) --> Media dei consistency index dei singoli cicli,ossia stat_os/stat_is - 1
...
(wfo, cycles_stats) : pd.DataFrame
- Fai la wfo in modo tale che renda una tabella come segue, per ogni singola combinazione testata. Inoltre, la WFO deve restituire un dizionario che va nei session_state del tipo {"Cycle 1": (is_start, is_end, os_start, os_end), ...}
cycles_stats
indice
(Cycle 1, Cycle 2, ..., Cycle n)
Colonne
IS_start
IS_end
OS_start
OS_end
Return [%]_IS
Return [%]_OS
Return [%]_tot
Return [%]_consistency
Max Drawdown [%]_IS
Max Drawdown [%]_OS
Max Drawdown [%]_tot
Max Drawdown [%]_consistency
...
<style>
</style>
| |
IS_start |
IS_end |
OS_start |
OS_end |
Return [%]_IS |
Return [%]_OS |
Return [%]_tot |
Return [%]_consistency |
Max Drawdown [%]_IS |
Max Drawdown [%]_OS |
Max Drawdown [%]_tot |
Max Drawdown [%]_consistency |
… |
| Cycle 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| Cycle 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| Cycle 3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| Cycle 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| Cycle 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Fai 4 cose
Fai che l'ottimizzazone restituisca un dataframe fatto così:
Rendi le statistiche da mostrare in ogni modalità definite nel config.py o nello yaml
Finita l'ottimizzazione crea colonne multiindex e comincia a imbastire la tabella come segue. Man mano che si fanno monte carlo e wfo, la si completa con le ulteriori colonne. Solo alla fine del macro processo di ottimizzazione si va a scrivere la variabile session_state["xxx"] che verrà utilizzata nel display_results()
Usiamo colonne multiindex:
(Strategy, Name)
(Strategy, Param Names)
(Strategy, Param Values)
(BT Stats, Return [%])
(BT Stats, Sharpe Ratio)
...
(BT Stats, Trade_returns) : np.array
(BT Stats, Equity_curve) : pd.Series
(Benchmark Stats, Return [%])
(Benchmark Stats, Sharpe Ratio)
...
(Benchmark Stats, Var. Return [%])
(Monte Carlo, Return [%] - Perc1)
(Monte Carlo, Return [%] - Perc2)
(Monte Carlo, Return [%] - Perc3)
(Monte Carlo, Return [%] - Perc4)
(Monte Carlo, Return [%] - Perc5)
(Monte Carlo, Return [%] - Prob. > Benchmark)
(Monte Carlo, Max Drawdown [%] - Perc1)
(Monte Carlo, Max Drawdown [%] - Perc2)
(Monte Carlo, Max Drawdown [%] - Perc3)
...
(wfo, Return [%] - avg.)
(wfo, Return [%] - std. dev.)
(wfo, Return [%] - consistency index) --> Media dei consistency index dei singoli cicli,ossia stat_os/stat_is - 1
(wfo, Max Drawdown [%] - avg.)
(wfo, Max Drawdown [%] - std. dev.)
(wfo, Max Drawdown[%] - consistency index) --> Media dei consistency index dei singoli cicli,ossia stat_os/stat_is - 1
...
(wfo, cycles_stats) : pd.DataFrame
cycles_stats
indice
(Cycle 1, Cycle 2, ..., Cycle n)
Colonne
<style> </style>IS_start
IS_end
OS_start
OS_end
Return [%]_IS
Return [%]_OS
Return [%]_tot
Return [%]_consistency
Max Drawdown [%]_IS
Max Drawdown [%]_OS
Max Drawdown [%]_tot
Max Drawdown [%]_consistency
...