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

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

Когда мы приступаем к созданию и тестированию торговых стратегий сразу хочется создавать стратегии, в которых мы постепенно входим в позицию, постепенно выходим из нее и при этом полностью управляем каждой из набранных позиций. Скажу сразу, это вполне возможно осуществить в программе Wealth-Lab используя библиотеку WealthScript и язык программирования C#. Но лучше двигаться постепенно. Ведь не зря говорят - тише едешь - дальше будешь.

Предлагаю сегодня научиться создавать такие торговые стратегии, которые управляют только одной позицией. Такие стратегии в терминах Wealth-Lab называются SP Strategies (Single-Positions Strategies). Подобрать красиво звучащий перевод на русском языке довольно сложно. Давайте будет называть такие стратегии однопозиционными, либо описательно - стратегиями, управляющими одной позицией.

Однопозиционные стратегии в Wealth-Lab

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

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

Шаблон программного кода для однопозиционной стратегии

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

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


// Шаблон для однопозиционной стратегии
protected override void Execute()
{
   for(int bar = 20; bar < Bars.Count; bar++)
   {
      if (IsLastPositionActive)
      {
         //Запрограммируйте здесь Ваши правила выхода из позиции
      }

      else

      {
         //Запрограммируйте здесь Ваши правила входа в позицию
      }
   }
}

Что представляют из себя позиции (Positions) в программе Wealth-Lab

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

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

Свойство LastPosition удобно для доступа к самой последней позиции, которая была добавлена к позициям. И именно поэтому свойство LastPosition наиболее удобно для использования в однопозиционных стратегиях.

Для того, чтобы узнать подробности, обратитесь к разделу "Position Management functions" инструкции QuickRef (F11).

Как: проверить существует ли активная позиция

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

В шаблоне кода, который находится ниже, если последняя позиция (LastPosition) является активной, функция IsLastPositionActive() возвратит значение "true" и мы сразу же перейдем к той ветке кода, которая описывает правила выхода из позиции.

Если же функция IsLastPositionActive() возвратит значение "false", будем проверять - не должны ли мы открыть новую позицию в соответствии с нашими правилами входа в позицию.

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

/* Данная стратегия демонстрирует идею построения однопозиционной стратегии*/
protected override void Execute()
{
   const int Period = 14; //период скользящей средней

   PlotSeries(PricePane, SMA.Series(Close, Period), Color.Blue, LineStyle.Solid, 1); //отображаем на графике простую скользящую среднюю.

   for(int bar = Period; bar < Bars.Count; bar++)
   {
      if (IsLastPositionActive) //если существует активная позиция (правила выхода из позиции)
      {
         if( CrossUnder(bar, Close, SMA.Series(Close, Period)) ) //если цена закрытия пересекает скользящую среднюю сверху вниз

            SellAtMarket(bar + 1, LastPosition); //продать по рынку на открытии следующего бара
      }
      else //если нет открытой позиции (правила входа в позицию)
      {
         if( CrossOver(bar, Close, SMA.Series(Close, Period)) ) //если цена закрытия пересекает среднюю снизу вверх

            BuyAtLimit(bar + 1, Close[bar]); //купить на следующем баре с помощью лимитного ордера по цене закрытия текущего.
      }
   }
}

В результате выполнения такой стратегии на графике отобразится скользящая средняя, входы и вызходы из позиции в виде стрелок. Если при выходе из позиции мы получили доход, то стрелочка обозначается зеленым цветом. Если получен убыток, то стрелка будет красной.

Пример однопозиционной стратегии

Пример использования однопозиционной стратегии

В этом примере Вы видите готовую однопозиционную стратегию, которая поможет продемонстировать Вам идею такого подхода.

Как в Wealth-Lab осуществляется закрытие позиции

Как Вы можете увидеть в предыдущем примере, одним из способов выхода из открытой длинной позиции является функция SellAtMarket(). В этой функции имеется два параметра.

  • первый параметр - это номер бара, на котором позиция должна быть закрыта.
  • второй параметр - это ссылка на позицию, из которой мы хотим выйти.

Поскольку библиотека WealthScript может работать с торговые стратегиями, которые управляют множеством позиций, мы должны иметь возможность указать в правилах выхода из позиции какую именно позицию мы хотим закрыть. В тех торговых системах, которые управляют единственной позицией в единицу времени мы можем использовать LastPosition чтобы передать методу SellAtMarket() информацию о том, какую позицию мы хотим закрыть.

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

Обратите внимание также на то, что все примеры, которые приведены в сегодняшней статье полностью укладываются в шаблон кода однопозиционной стратегии. Эта схема очень проста для восприятия и внимательно посмотрев сегодняшние примеры Вы сможете самостоятельно (даже если ранее не имели опыта программирования) создавать на языке C# с использованием библиотеки WealthScript торговые стратегии.

В следующий раз разберем особенности применения при программировании торговых стратегий ордеров AtStop и AtLimit, при этом демонстрации будет приведен код торговой системы на прорыв уровней, которую создал Ван Тарп. Чтобы не пропустить новые статьи - подписывайтесь на обновления по RSS.

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

  1. [...] иметь не более одной позиции. О том, как выглядит шаблон однопозиционной торговой стратегия я уже [...]

  2. [...] стратегию – ему не всегда хватает возможностей шаблона однопозиционной стратегии. Ведь действительно иногда хочется использовать [...]

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