Оптимизация таймфрейма в Amibroker

Опубликовано в AmiBroker

До сих пор приходилось заниматься оптимизацией для подбора лишь числовых параметров. Различного рода отступы, коэффициенты и пр. Сегодня пришел заказ, где требовалось подобрать еще и таймфрейм. Заказчику интересно, на каком интервале следует использовать его алгоритм.

Как оказалось, дело нехитрое. Заводим текстовый список всевозможных таймфреймов плюс используем стандартную функцию Optimize(). Принциального know-how тут нет, но получилось забавно, вдруг кому пригодится....

 

TimeFramesList = "1 мин,2 мин,3 мин,4 мин,5 мин,10 мин,15 мин,20 мин,30 мин,1 час,2 часа,4 часа,1 день,2 дня,3 дня,неделя";
if (Status("action") == actionBacktest)
result = StrExtract(TimeFramesList,Optimize("Номер таймфрейма",0,0,StrCount(TimeFramesList,","),1));
else
result = ParamList("Таймфрейм",TimeFramesList);
 switch (result)
{ case "1 мин": TimeFrame = in1Minute;
break;
case "2 мин": TimeFrame = 120;
break;
case "3 мин": TimeFrame = 180;
break;
case "4 мин": TimeFrame = 240;
break;
case "5 мин": TimeFrame = in5Minute;
break;
case "10 мин": TimeFrame = 600;
break;
case "15 мин": TimeFrame = in15Minute;
break;
case "20 мин": TimeFrame = 1200;
break;
case "30 мин": TimeFrame = 1800;
break;
case "1 час": TimeFrame = inHourly;
break;
case "2 часа": TimeFrame = 7200;
break;
case "4 часа": TimeFrame = 14400;
break;
case "1 день": TimeFrame = inDaily;
break;
case "2 дня": TimeFrame = inDaily*2;
break;
case "3 дня": TimeFrame = inDaily*3;
break;
case "неделя":
TimeFrame = inWeekly;
break;
default: _TRACE("Invalid timeframe " + result);
break;
}
if (Interval() > TimeFrame)
error("Неверный таймфрейм!");
TimeFrameSet(TimeFrame);
......  тут считаем требуемые сигналы
TimeFrameRestore();

Функцию Error() легко написать свою. Кроме указанных таймфреймом нет проблем добавить и другие, например, 47-минут.

В этой статье приведена лишь идея. Чтобы алгоритм стал универсальным и надежно работал во всех режимах (индикатор, бэктест, оптимизатор и так далее), придется добавить кое-какой сервис. Оставляю это заинтересованному Читателю. Внимательное изучение языка Амиброкера даст ответы на все вопросы, которые возникнут.

Недостаточно прав для комментирования