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

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

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

Построение на графике производных инструментов

Первый вопрос, который сегодня рассмотрим будет такой:

Как: отобразить на графике внешний финансовый инструмент

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

Обращаю особое внимание на то, что метод PlotSymbol() неприменим для трендовых стилей графика, использующих нестандартную шкалу X (таких как Ренко, Каги, крестики и нолики и графики линейного прорыва)

Рассмотрим теперь пример того, как с помощью метода PlotSymbol() отобразить на графике область с внешним финансовым инструментом.

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


protected override void Execute()

{
   //Отобразить на индивидуальной области графика финансовый инструмент "ГАЗПРОМ"

   Bars gazp = GetExternalSymbol("GAZP", true);
   ChartPane gazpPane = CreatePane( 100, false, true);
   PlotSymbol( gazpPane, gazp, Color.DodgerBlue, Color.Red);
}

В результате выполнения этого кода получается вот такой график:

Отображение на графике финансового инструмента

Демонстрация метода PlotSymbol()

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

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

Как: отобразить на графике синтетический финансовый инструмент

Для отображения на графике синтетического финансового инструмента в программе Wealth-Lab существует специальный метод PlotSyntheticSymbol. При вызове этого метода ему необходимо передать все четыре основные цены OHLC (открытия, максимальную, минимальную и закрытия). Это позволяет сформировать бары правильной формы.

В качестве примера синтетического финансового инструмента может выступать график Heikin-Ashi. Давайте попытаемся построить его.

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


/* Отобразить на индивидуальной области график Heikin-Ashi выше области цен */

protected override void Execute()

{
   // Добавляем 0 для того, чтобы создать копию ряда данных (DataSeries), базирующегося на основных последовательностях

   DataSeries HO = Open + 0;
   DataSeries HH = High + 0;
   DataSeries HL = Low + 0;
   DataSeries HC = (Open + High + Low + Close) / 4;

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

   {
      double o1 = HO[ bar - 1 ];
      double c1 = HC[ bar - 1 ];

      HO[bar] = ( o1 + c1 ) / 2;
      HH[bar] = Math.Max( HO[bar], High[bar] );
      HL[bar] = Math.Min( HO[bar], Low[bar] );
   }

   ChartPane haPane = CreatePane(100, true, true);
   PlotSyntheticSymbol(haPane, "Heikin-Ashi", HO, HH, HL, HC, Volume, Color.DodgerBlue, Color.Red); //отображаем на графике синтетический финансовый инструмент
}

После запуска полученной стратегии получим такой график:

График синтетического инструмента

Демонстрация метода PlotSyntheticSymbol

Как видите, на области выше области цен отобразился полноценный Heiki-Ashi график - благодаря методу PlotSyntheticSymbol().

Теперь допустим, что Вам необходимо на одной и той же области графика отобразить и график основного финансового инструмента и график того финансового инструмента, который будет служить ориентиром (так называемый бенчмарк).

Давайте посмотрим, как эту задачу можно выполнить с помощью программы:

Как: сравнить основной финансовый инструмент с бенчмарком

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

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


/*Сначала создадим специальный метод, который позволяет отображать бенчмарк на основном графике*/

public void PlotBenchMark(string symbol, DateTime fromDate)

{
   if (Bars.Symbol != symbol)
   {
      int bar = Bars.ConvertDateToBar(fromDate, false);

      double refPrice = Close[bar];
      Bars bmBars = GetExternalSymbol(symbol, true);
      double factor = refPrice / bmBars.Close[bar];
      DataSeries dsO = bmBars.Open * factor;
      DataSeries dsH = bmBars.High * factor;
      DataSeries dsL = bmBars.Low * factor;
      DataSeries dsC = bmBars.Close * factor;
      PlotSyntheticSymbol(PricePane, symbol + " (relative)", dsO, dsH, dsL, dsC, Volume, Color.Blue, Color.Gray);
   }
}

//теперь воспользуемся созданным методом
protected override void Execute()

{
   // Произведем сравнение с бенчмарком (ГАЗПРОМом) с точкой отсчета 01 января 2011
   PlotBenchMark("GAZP", new DateTime(2010, 1, 1));
}

Получается такой график:

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

Демонстрация отображинея бенчмарка

Как видите, на одном графике отображается и основной инструмент, и бенчмарк (Газпром) - чего мы и добивались.

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

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

Рубрики: Painting the Chart, WealthScript

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

  1. Leobakin пишет:

    Дмитрий, здравствуйте.
    А как отобразить (ну и потом применить к нему) график синтетического инструмента, равного допустим “ГАЗ-ЛУК”?

    • Это сделать очень просто:
      Допустим, вы в списке инструментов (DataSet) выбираете основной финансовый инструмент “Газпром” (GAZP).
      Тогда в коде стратегии делаете следующие шаги:

       // 1. с помощью метода GetExternalSymbol() создаете объект Bars второго финансового инструмента (Лукойла)
      
         Bars lkoh = GetExternalSymbol("LKOH", true); //получаем бары внешнего финансового инструмента
      
       // 2. Создаем ряд данных (DataSeries) в котором для каждого бара будет отображаться значение спреда (разницы) между газпромом и лукойлом
      
       DataSeries spread = Close - lkoh.Close; 
      
      // 3. Отображаем на графике спред:
      
      ChartPane spreadPane = CreatePane(40, true, true); //создаем индивидуальную область графика (выше области цены, с сеткой)
       
         PlotSeries(spreadPane, spread, Color.Black, WealthLab.LineStyle.Line, 2); //рисуем на индивидуальной области спред
      
      

      Вот и все.

      Если хотите не только отображать второй финансовый инструмент, но и совершать с ним сделки, используйте метод SetContext()

      Более подробнее об этом смотрите здесь: Как получить доступ ко второму инструменту а также здесь: Как отразить на графике DataSeries

      Чуть позже напишу статью с примером торговой стратегии, которая торгует парный трейдинг.

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