Роботы

Поиск по ключевым словам

Тестирование стратегии на нескольких финансовых инструментах

Некоторую сложность представляет построение систем, торгующих несколько бумаг одновременно. К таким системам относятся арбитражные системы и парный трейдинг. В следующем примере разбирается стратегия, построенная на фьючерсах на акции ВТБ и Сбербанка.

Добавьте на график SPFB.SBER график SPFB.VTBR. Для этого дважды щелкните клавишей мышки по индикатору Price (foreign):

AmiBroker - Price (foreign)

В результате откроется окно настроек. В поле Symbol вбейте тикер фьючерса ВТБ так, как он называется в вашей базе:

AmiBroker - Properties of Price

Нажмите Ok и увидите совмещенный график двух финансовых инструментов:

AmiBroker - dva instrumenta

Постройте спред (разницу) цен между двумя инструментами. Для этого воспользуйтесь стандартным индикатором Spread:

AmiBroker - индикатор Spread

Дважды щелкните клавишей мышки по индикатору, в результате чего откроется окно настроек. В поле Symbol2 впишите тикер фьючерса ВТБ, выберете цвет графика спреда и нажмите Ok:

AmiBroker - Properties of Spread

В результате появится график спреда между бумагами:

AmiBroker - график спреда между инструментами

Реализация системы, торгующей спред

Стратегия:

  1. Если спред SPFB.SBER — SPFB.VTBR вырастает выше 500, то продаем SPFB.SBER и покупаем SPFB.VTBR. Когда спред опускается обратно до 0, закрываем обе позиции.
  2. Если спред падает ниже -500, то покупаем SPFB.SBER и продаем SPFB.VTBR. Когда спред отрастает обратно до 0, закрываем позиции.

Код, анализирующий спред и дающий сигналы:

SB = Foreign("SPFB.SBER", "Close");
VT = Foreign("SPFB.VTBR", "Close");

spred = SB - VT;

UpSig = Cross(spred, 500);
CloseUp = Cross(0, spred);
DwSig = Cross(-500, spred);
CloseDw = Cross(spred, 0);

// удаляем лишние сигналы
UpSig = ExRem(UpSig, CloseUp);
CloseUp = ExRem(CloseUp, UpSig);
DwSig = ExRem(DwSig, CloseDw);
CloseDw = ExRem(CloseDw, DwSig);

Эти сигналы необходимо передать в виде сигналов покупки/продажи соответствующим бумагам:

  • UpSig продажа SPFB.SBER и покупка SPFB.VTBR
  • CloseUp закрытие шорта SPFB.SBER и закрытие лонга SPFB.VTBR
  • DwSig покупка SPFB.SBER и продажа SPFB.VTBR
  • CloseUp закрытие лонга SPFB.SBER и закрытие шорта SPFB.VTBR
if(Name() == "SPFB.SBER")
{
Buy = DwSig;
Sell = CloseDw;
Short = UpSig;
Cover = CloseUp;}
if(Name() == "SPFB.VTBR")
{
Buy = UpSig;
Sell = CloseUp;
Short = DwSig;
Cover = CloseDw;}

Кроме того, необходимо задать размер позиций для каждой бумаги. Если этого не сделать, то АмиБрокер совершит сделку на все деньги с одной бумагой а на вторую денег не останется. В случае, если для построения спреда необходимо не равное количество лотов, размеры позиций можно задать соответствующие для каждой бумаги.

С учетом всего вышесказанного получаем готовый код:

SB = Foreign("SPFB.SBER", "Close");
VT = Foreign("SPFB.VTBR", "Close");

spred = SB - VT;

UpSig = Cross(spred, 500);
CloseUp = Cross(0, spred);
DwSig = Cross(-500, spred);
CloseDw = Cross(spred, 0);

// удаляем лишние сигналы
UpSig = ExRem(UpSig, CloseUp);
CloseUp = ExRem(CloseUp, UpSig);
DwSig = ExRem(DwSig, CloseDw);
CloseDw = ExRem(CloseDw, DwSig);
if(Name() == "SPFB.SBER")
{
SetPositionSize(1, spsShares);
Buy = DwSig;
Sell = CloseDw;
Short = UpSig;
Cover = CloseUp;}
if(Name() == "SPFB.VTBR")
{
SetPositionSize(1, spsShares);
Buy = UpSig;
Sell = CloseUp;
Short = DwSig;
Cover = CloseDw;}

Тестирование стратегии на двух инструментах

Можно прогнать этот код на всех бумагах, находящихся в базе данных. Сделки все равно будут проходить только на SPFB.SBER и SPFB.VTBR, но лучше тестировать только те бумаги, на которых работает стратегия. Для этого поместите SPFB.SBER и SPFB.VTBR в фавориты и в настройках тестера установите фильтр favourites.

Запустив тест, получите таблицу с результатами тестирования стратегии:

AmiBroker тест стратегии на двух финансовых инструментах

По результатам теста видно, что сделки открываются одновременно в противоположных направлениях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *