Ну вот мы и подобрались к самой интересной теме. Согласитесь, программ, которые красиво строят графики достаточно много. А вот программ, которые позволяют протестировать любые идеи, которые только могут возникнуть у Вас в голове - можно по пальцам пересчитать.
Велс Лаб в умелых руках является той программой, которая позволит Вам не только спроектировать и протестировать любые торговые идеи, но и детально изучить все показатели протестированных систем. А если Вам чего-либо не хватает, Вы сможете, применив C#, доделать недостающие компоненты.
Бэктестинг стратегий в программе 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) является традиционным, так как именно такой подход наиболее точным образом воспроизводит способ торговли в реальных торгах. Как в случае с данным примером, так и вообще при бэктестинге стратегий сделки, совершаемые на исторических данных, конечно же являются теоретическими.
В результате выполнение кода осуществилась сделка. При этом вход в сделку здесь обозначен серой стрелочкой вверх, а выход из сделки обозначен зеленой стрелкой вниз. Эта сделка найдет свое отражение не только на графике, но и на вкладке "Trades". Причем здесь Вы сможете увидеть все числовые характеристики сделки:
Обратите внимание в примере на то, что свойство 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 апреля на графике не существует, однако сигнал все равно произошел. Посмотрите повнимательнее код данного примера, чтобы понять - почему так случилось.
Сегодня мы с Вами только издалека посмотрели на то, какие возможности дает программа Велс Лаб для тестирования собственных торговых идей, для построения торговых стратегий. Внимательно изучив примеры сегодняшнего поста Вы сможете детально разобраться с тем, какие торговые сигналы существуют в программе Велс Лаб.
В следующий раз продолжим разбираться с программированием торговых стратегий в Wealth-Lab и рассмотрим важнейшую тему - торговый цикл. Не забывайте подписываться на новые сообщения по RSS.
[...] Виды торговых сигналов в Wealth-Lab Главная Стабильность индикаторов в программе [...]
[...] 58. Какие параметры имеют торговые сигналы в Wealth-Lab? [...]
[...] 2. Виды торговых сигналов в Wealth-Lab [...]
Дмитрий, зравствуйте!
Не могли бы Вы ответить мне на такой вопрос. На графике к разделу “Как произвести сделку в определенную заранее дату …” последняя часовая свеча Газпрома за 28.04.2012 имеет время 18:00. И на других графиках и таблицах сделок у Вас первые часовые свечи с нашего рынка имеют время 10:00, а последние – 18:00, т.е. маркируются временем начала формирования часовой свечи. А у меня при построении графиков в WLD 6.3 все свечи маркируются временем окончания формирования свечи, т.е. первая часовая свеча нашего рынка имеет время 11:00, а последняя – 19:00. Подскажите, может в WLD есть где-то настройка, где можно устанавливать маркировку времени на свечах.
С уважением, Юрий.