Финансовая лаборатория

Биржевая торговля и торговые роботы


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

Велс Лаб в умелых руках является той программой, которая позволит Вам не только спроектировать и протестировать любые торговые идеи, но и детально изучить все показатели протестированных систем. А если Вам чего-либо не хватает, Вы сможете, применив C#, доделать недостающие компоненты.

Торговые сигналы в Велс Лаб

Бэктестинг стратегий в программе Wealth-Lab  обозначает, что программа может создавать теоретические сделки в соответствии с определенными критериями.

Какие торговые сигналы поддерживаются в программе Wealth-Lab

Торговые сигналы в программе Велс Лаб это по-сути те распоряжения, которые Вы даете Вашему брокеру. Взгляните на следующую схему:

Торговые сигналы

Торговые сигналы в программе Wealth-Lab

В Wealth-Lab возможны все комбинации верхней и нижней частей этой схемы. Такое комбинирование приводит к 16 типам приказов (если учитывать Exit, то к 20-ти типам). Т.е. для входа в длинную позицию можно использовать, к примеру, такой тип приказа: BuyAtMarket, а для выхода из длинной позиции применяется, к примеру, тип приказа: SellAtLimit. При этом и BuyAtMarket() и SellAtLimit() - являются методами WealthScript.

Какие параметры имеют торговые сигналы в Wealth-Lab

Указанные методы требуют параметры. Рассмотрим эти параметры торговых сигналов более подробно.

bar - все торговые сигналы в обязательном порядке имеют параметр bar. Этот параметр определяет - на каком баре будет сделана сделка. В общем случае, приказы AtMarket и AtClose располагаются на баре. Исключением могут быть только сделки с недостаточной позицией либо недостатком эквити.

pos - для всех сигналов на выход из позиции (Sell, Cover или Exit) Вы должны определить позицию, к которой будет относится сигнал на выход. В большинстве случаев в коде однопозиционных стратегий Вы будете чаще всего использовать LastPosition. Для того, чтобы без проблем выходить из любых позиций, присваивайте параметру pos значение Position.AllPositions.

LimitPrice или StopPrice - Вы должны использовать цену stop / limit для ордеров типа AtLimit / AtStop только если Вы собираетесь торговать "в живую". В программе Wealth-Lab приказы AtStop действуют по аналогии с приказами StopLoss. Другими словами, stopPrice представляет собой цену активации приказа.

signalName - данный параметр является не обязательным для всех сигналов и отражается после выполнения стратегии в списке всех сделок в столбце "Signal Name". Наличие записей в этом столбце делает возможным сортировку всех сделок по однотипным сигналам.

Как: совершить теоретический трейд в программе Велс Лаб

Для того, чтобы проиллюстрировать как происходит торговля в программе Wealth-Lab, в качестве примера запустите следующий код стратегии на любом графике с любым таймфреймом.

Пример (как выполнить пример приведенного кода)...

protected override void Execute()
{
   /* Только тест для иллюстрации */
   ClearDebug();
   PrintDebug("Positions.Count = " + Positions.Count);

   // присвоить переменной bar значение номера 10-го с конца бара на графике

   int bar = Bars.Count - 10;

   BuyAtMarket(bar + 1); //заявка на покупку по рынку на открытии следующего бара.

   PrintDebug("Positions.Count = " + Positions.Count);
   PrintDebug("LastPosition.Active = " + LastPosition.Active);

   // переходим на следующий бар и подаем торговый сигнал на выход из позиции типа AtClose

   bar++; //делаем текущим следующий бар

   SellAtClose(bar + 1, LastPosition); //торговый сигнал на выход из длинной позиции по цене закрытия следующего за текущим бара

   PrintDebug("Positions.Count = " + Positions.Count);

   PrintDebug("LastPosition.Active = " + LastPosition.Active);
}

Код программы устанавливает в качестве текущего 10-й с конца бар и выполняет приказ BuyAtMarket на следующем от текущего баре.

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

Торговые сигналы в Велсе

Пример торгового сигнала в Wealth-Lab

В результате выполнение кода осуществилась сделка. При этом вход в сделку здесь обозначен серой стрелочкой вверх, а выход из сделки обозначен зеленой стрелкой вниз. Эта сделка найдет свое отражение не только на графике, но и на вкладке "Trades". Причем здесь Вы сможете увидеть все числовые характеристики сделки:

Сделки в Велс Лаб

Вкладка "Trades" в Wealth-Lab

Обратите внимание в примере на то, что свойство Positions.Count (количество позиций) увеличилось сразу же после создания позиции, которая сразу же становится активной (Last.Position.Active == true). После же закрытия позиции, эта позиция остается в списке позиций, но статус активности данной позиции меняется и принимает значение "false".

Данный пример в тонкостях объясняет, что программа Wealth-Lab является ориентированной на позиции.

Обратите особое внимание также на то, что в коде стратегии вообще не упоминается о размере позиции. Дело в том, что величиной позиции управляет не код торговой стратегии. Величина позиции определяется с помощью PosSizer (как установленных по умолчанию, так и написанных Вами самостоятельно). Управлять величиной позиции можно на панели данных. Для более полной информации об этом почитайте инструкцию к программе Велс Лаб.

Как: произвести сделку в определенную заранее дату применяя метод DateTimeToBar()

Сделки могут проводиться только на тех барах, которые существуют на графике. К счастью, функция DateTimeToBar() делает легкой задачу совершения сделки в определенную дату. Эта функция конвертирует значение DataTime в значение, содержащее номер бара. В результате на узнанном таким образом баре мы и проводим сделку.

Пример (как выполнить пример приведенного кода)...


protected override void Execute()
{
   // Если возможно - проведите сделку 29 апреля 2012 года или сразу после (на первом баре после) этой даты

    DateTime dt = new DateTime(2012, 04, 29);

    int bar = DateTimeToBar(dt, false);

    if (bar > -1)

        BuyAtMarket(bar, "Дата сделки: " + dt.ToString());

    else

    DrawLabel(PricePane, "Не существует баров на дату " + dt.ToString() + " или после этой даты", Color.Red);
}

Обратите внимание, что даты 29 апреля на графике не существует, однако сигнал все равно произошел. Посмотрите повнимательнее код данного примера, чтобы понять - почему так случилось.

Преобразование времени в бары

Применение метода DataTimeToBar()

Сегодня мы с Вами только издалека посмотрели на то, какие возможности дает программа Велс Лаб для тестирования собственных торговых идей, для построения торговых стратегий. Внимательно изучив примеры сегодняшнего поста Вы сможете детально разобраться с тем, какие торговые сигналы существуют в программе Велс Лаб.

В следующий раз продолжим разбираться с программированием торговых стратегий в Wealth-Lab и рассмотрим важнейшую тему - торговый цикл. Не забывайте подписываться на новые сообщения по RSS.

Комментариев: 4

  1. [...] Виды торговых сигналов в Wealth-Lab  Главная  Стабильность индикаторов в программе [...]

  2. Юрий пишет:

    Дмитрий, зравствуйте!
    Не могли бы Вы ответить мне на такой вопрос. На графике к разделу “Как произвести сделку в определенную заранее дату …” последняя часовая свеча Газпрома за 28.04.2012 имеет время 18:00. И на других графиках и таблицах сделок у Вас первые часовые свечи с нашего рынка имеют время 10:00, а последние – 18:00, т.е. маркируются временем начала формирования часовой свечи. А у меня при построении графиков в WLD 6.3 все свечи маркируются временем окончания формирования свечи, т.е. первая часовая свеча нашего рынка имеет время 11:00, а последняя – 19:00. Подскажите, может в WLD есть где-то настройка, где можно устанавливать маркировку времени на свечах.
    С уважением, Юрий.

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