Как выдержать мин количество сделок при генетической оптимизации в Ами
Беда генетического оптимизатора в Ами в том, что он находит лучшие наборы параметров, не учитывая количество сделок. Приходится либо колдовать с границами параметров, либо увеличивать сроки оптимизации.
Для себя я нашел такое решение — посчитал новую метрику modified Recovery Factor (я обычно по нему оптимизирую): если количество трейдов меньше 50, то приравнял его -1, иначе он равен Recovery Factor по расчетам ами. Теперь, если этот modified Recovery Factor использовать в качестве цели оптимизации, то получим наборы параметров, которые дают не менее определенного количества сделок за период оптимизации.
Код, показанный ниже, надо просто добавить в конце afl скрипта стратегии:
TotalTrades = 0;
SetCustomBacktestProc("");
if (Status(«action») == actionPortfolio)
{
bo = GetBacktesterObject(); // Get backtester object
bo.Backtest(); // Run backtests
stats = bo.GetPerformanceStats(0); // Get Stats object for all trades
for (trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade())
{
TotalTrades++;
}
for (trade = bo.GetFirstOpenPos(); trade; trade = bo.GetNextOpenPos())
{
TotalTrades++;
}
modRF = stats.GetValue(«RecoveryFactor»); // Calculate new metric
if (TotalTrades < 50) // Минимальное количество сделок — 50
{
modRF = -1;
}
bo.AddCustomMetric(«modRF», modRF);
bo.AddCustomMetric(«TotalTrades», TotalTrades);
}
amibroker.com/guide/afl/afl_view.php?id=359
www.amibroker.com/guide/h_optimization.html