Автор |
Сообщение |
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
Генетические оптимизаторы выдают наилучшие параметры системы при количестве сделок 10-15 за период 8 лет. Можно ли как-то задать мин количество сделок при оптимизации? Хотелось бы штук 50 минимум. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
Пока нашел решение такое (достаточно корявое) - посчитал новую метрику modified Recovery Factor (я обычно по нему оптимизирую): если количество трейдов меньше 50, то приравнял его -1, иначе он равен Recovery Factor по расчетам ами. Только теперь приходится запускать Walk Forward Opt, т.к. только там можно выбрать свою метрику для оптимизации.
Код получился такой -
Код: |
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)
{
modRF = -1;
}
bo.AddCustomMetric("modRF", modRF);
bo.AddCustomMetric("TotalTrades", TotalTrades);
}
|
Если будут иные идеи, то велкам. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
Кстати, похоже, что параметр оптимизации (Optimization target), выставленный в Settings на вкладке Walk-Forward распространяется и на обычную оптимизацию. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
На обычную оптимизацию? Обычная оптимизация это просто перебор всех заданных параметров. После обычной оптимизации можно очень просто отсортировать результат по любому параметру. Просто щелкни по шапке нужного столбца. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
000 писал(а): |
На обычную оптимизацию? Обычная оптимизация это просто перебор всех заданных параметров. После обычной оптимизации можно очень просто отсортировать результат по любому параметру. Просто щелкни по шапке нужного столбца. |
Немного не так выразился - обычная = не Walk-Forward оптимизация, но генетикой. По умолчанию она берет в качестве цели CAR/MaxDD. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Nergal
Зарегистрирован: 04.09.2012
Сообщения: 92
Откуда: ЕС
|
Ну так в чем проблема? Ты все правильн осделал. Если сделок менее 50, то приравниваем коэффициент нулю. Только зачем ты кол-во трейдов считаешь таким способом, когда в амиброкере это значение можно получить просто:
Код: |
stAll = bo.GetPerformanceStats(0);
TotalTrades = stAll.GetValue("AllQty"); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
|