Мультисистемный тестер (часть 2)

19Фев08

Итак первый этап пройден мы создали набор клонов-инструментов теперь очередь за стратегией:
Чтобы оттестировать несколько стратегий на множестве инструментов придется немного поработать руками, структура afl кода должна состоять из нескольких уровней:

1 уровень — Мега стратегия, которая объединяем в себе множество стратегий, именно этот afl файл должен быть загружен в тестер и прогоняться на истории
2 уровень — множество файлов с системами они включают в себя правила торговли

Внимание: не копируйте нижеприведенный код, из-за особенностей показа кавычек, амиброкер не будет его правильно компилировать. Скачайте прикрепленный файл ниже по ссылке

Давайте разбираться подробнее:

Листинг файла MegaSystem.afl


//
// Включаем в мега стратегию файл с системой Sys1.
// !!Замените пути к стратегии на свои
#include ".\\Formulas\\Custom\\MultiSystem\\Sys1.afl";
//
// Передаем список базовых инстурментов по которым должна торговать это стратегия
// список иструментов должен быть без суффиксов "_N", т.е. это должен быть список инструментов
// ставших основой для клонов
//
// Заметка: Можно для каждой системы задать свой список инструментов для теста.
_N(TickerList = CategoryGetSymbols( categoryWatchlist, 0 ));
//
// Основная функция запускающая механизм теста для нашей системы
// (аргументы разберем в Sys1.afl)
InitSystem(TickerList, 1, 0.5);

// Система 2
#include ".\\Formulas\\Custom\\MultiSystem\\Sys2.afl";
_N(TickerList = CategoryGetSymbols( categoryWatchlist, 0 ));
InitSystem2(TickerList, 2, 0.5);

//
// По аналогии список можно продолжить
// !!! Нельзя допустить чтобы в #include файлах имена функций совпадали друг с другом
// Поэтому целесообразно для каждой системы переименовывать вызываемые функции

Структура файла 2го уровня:
Листинг файла Sys1.afl


// Функция должна содержать правила входа-выхода для каждой конкретной системы
// Аргумент - SysPosSize - представляет собой лимит который мы выделяем на конкретную систему(из группы тестируемых систем)
//
function LaunchSystem(SysPosSize)
{
// Обязательные параметры, иначе мы будем присваивать локальные переменные
global Buy,Sell,Short,Cover;
global BuyPrice,SellPrice,ShortPrice, CoverPrice;
// --end

//Правила системы
Buy = Cross( MACD(), Signal() );
Sell = Cross( Signal(), MACD() );
BuyPrice = SellPrice = Open;

//Устанавливаем объем открытых позиций для каждого инструмента с поправкой на общесистемный лимит
//Можно использовать PositionSize
SetPositionSize( 30*SysPosSize, spsPercentOfEquity );
}

//
// Основная функция для инициализации расчета сигналов системы
// Аргументы
// TickerList - список базовых активов (без суффикса "_N")!!! (перечисленые через запятую)
// SysID - индекс систем, система с SysID = 3, будет торговать только инструменты с суффиксом "_3"
// SysPosSize - общий лимит на эту систему (0.3 = 30%)
function InitSystem(TickerList, SysID, SysPosSize)
{
//Получаем название базового инструмента клона
BaseTicker = StrLeft(Name(),StrFind(Name(), "_")-1);
//Если имя текущего инструмента в списке торгуемых и Клон-инструмент с индксом нашей системы то расчитываем сигналы
if (StrFind(TickerList, BaseTicker) > 0 && Name() == BaseTicker+"_"+SysID)
{
LaunchSystem(SysPosSize);
}
}

Теперь тестируем

Настройки анализатора:
1. Список инструментов он же Use Filter: устанавливаем как фильтр тот WatchList в котором находятся все клоны инструменты (в нашем случае WatchList 13)
2. Formula File — выбираем MegaSystem.afl
3. Комиссии можно задать как в настройках тестера так и отдельно в коде afl (для тестового случая ставим 0)

Для примера и теста работоспособности мы взяли 2 одинаковых системы, только с одной разницей когда одна в лонг, другая по тем же ценам в шорт. Тем самым общий результат тестирования должен быть равен 0, естесственно при условии 0 комиссии.

В итоге если все заработает нормально мы должны получить следующую картину.
193530-aamultisys.jpg

Исходники AFL
Mega System AFL Source

Заключение
Друзья, теперь в ваших руках появился мощнейший инструмент, с помощью которого вы можете тестировать любой набор систем. Амиброкер в очередной раз доказал что он на голову выше всех конкурирующих программ.
Удачи!



4 Responses to “Мультисистемный тестер (часть 2)”

  1. А если нужно исследовать несколько систем но на одном графике — как это проще всего сделать?

  2. 2 drozd

    установить Wealth Lab и без заморочек тестировать портфель на специальном симуляторе


  1. 1 Website
  2. 2 Relationship advice

Оставьте комментарий