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

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

После того, как мы разобрались с тем, что такое DataSeries - пришло время научиться самостоятельно создавать и наполнять данными это полезное для создания и тестирования стратегий хранилище данных. Этот навык необходимо довести до автоматизма, т.к. создавая торговую стратегию и ее правила мы будем постоянно с этим сталкиваться. Давайте оттачиванием этого навыка и займемся сегодня.

Заполнение данными DataSeries

Как: создать последовательность данных DataSeries и наполнить каждую ее ячейку нулевыми значениями

Достаточно часто при написании правил торговой стратегии появляется необходимость создать простейший индикатор "на лету", написав буквально несколько строчек кода. К примеру, такой подход был продемонстрирован в одной из предыдущих статей, например здесь в последнем примере.

Однако, при построении других индикаторов необходимо буквально на каждом из баров решать задачу - какими данными заполнять ячейки (при этом часто решается логическая задача: если - то). В этом случае на первом этапе построения такой числовой последовательности необходимо каждую ячейку DataSeries заполнить нулями.

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

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


protected override void Execute()
{
   DataSeries random = Close - Close;
}

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

Предпочтительнее всего создавать новый объект типа DataSeries путем последовательного прохождения баров уже существующих последовательностей (к примеру, OHLC/V) и совершения над ними определенных действия. К тому же, этот метод позволяет без проблем создавать понятное описание новой числовой последовательности DataSeries.


protected override void Execute()
{
   // Создание, заполнение и отображение на графике рандомной последовательности DataSeries со значениями от 50 до 100, или нулями.

   DataSeries random = new DataSeries(Bars, "Инициированная нулями, заполненная случайными числами от 50 до 100");

   Random r = new Random();

   for (int bar = 0; bar < Bars.Count; bar++)

   {
      double rVal = 100 * r.NextDouble();

      if (rVal > 50)

         random[bar] = rVal;
   }

   ChartPane rPane = CreatePane( 40, true, true );

   PlotSeries(rPane, random, Color.Blue, WealthLab.LineStyle.Histogram, 1);
}

Как видите, здесь с использованием класса Random происходит создание, инициализация нулями (заполнение) и отображение на графике случайной последовательности DataSeries со значениями от 50 до 100, или нулями. Этот пример работы со случайными числами может пригодиться и при написании стратегий - когда нужно работать с вероятностями.

Рассмотрим еще одни пример.

Как: поменять значения в массивах DataSeries

Вы можете без проблем поменять значения любого массива DataSeries - даже ключевых последовательностей OHLC/V именно так, как Вы этого захотите.

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

Этот пример показывает, как можно определить и скорректировать чрезмерные ценовые "выбросы", которые, если их не скорректировать, могут исказить график по шкале Y.


protected override void Execute()

{
   const double Sensitivity = 2.5; // Устанавливаем максимальный коэффициент к предыдущему бару (чувствительность)

   DataSeries atr = ATR.Series( Bars, 5 );
   DataSeries hi = Highest.Series(High, 3);
   DataSeries lo = Lowest.Series(Low, 3);

   for (int bar = 10; bar < Bars.Count; bar++){

      if (High[bar] > High[bar-1] + Sensitivity * atr[bar])

         High[bar] = Math.Max( hi[bar-1], Math.Max(Open[bar], Close[bar]) );

      if (Low[bar] < Low[bar-1] - Sensitivity * atr[bar])

         Low[bar] = Math.Min( lo[bar-1], Math.Min(Open[bar], Close[bar]) );
   }
}

Этот пример демонстрирует, что можно без проблем поменять "на лету" существующие ценовые ряды.

Помимо демонстрации этих возможностей этот небольшой кусочек кода является полезным в практической деятельности по построению и тестированию торговых стратегий. Здесь, как Вы поняли, ищутся "ценовые выбросы" путем последовательной проверки - не превышает ли текущий бар предыдущий на 2,5 ATR, рассчитанного по 5-ти предыдущим барам. И если это действительно так, то корректируется сначала максимальная, а потом и минимальная цена.

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

Рубрики: DataSeries, WealthScript

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

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