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

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


При разработке торговых стратегий нам не обойтись без построения собственных индикаторов, осциляторов, числовых фильтров и подобных инструментов. Числовые значения этих инструментов хранятся в программе в виде рядов данных (DataSeries), о которых мы уже говорили ранее. Сегодня рассмотрим, как можно отобразить на графиках в программе Велс Лаб различного рода ряды данных.

Отображение на графике рядов данных

Как: отобразить на графике последовательность данных (DataSeries)

Для того, чтобы отобразить ряды данных нужно выполнить следующие шаги:

1. Создать числовую последовательность (DataSeries) и, если это необходимо, установить значение для каждого из баров прежде чем переходить к следующим шагам.

2. На выбор: Если ряды данных не должны отображаться на графике в области цен либо в области объема, создать индивидуальную область на графике.

3. Выполнить один из следующих методов: PlotSeries(), PlotSeriesFillBand(), PlotSeriesDualFillBand() или PlotSeriesOscillator().

Методы PlotSeries* выполняются только один раз для каждого начертания. Они должны выполняться вне цикла, пробегающего бары.

В предыдущих постах уже приводились различные примеры, которые отображали ряды данных DataSeries с использованием метода PlotSeries(). Для того, чтобы увидеть еще больше примеров для каждого из типов методов PlotSeries* - смотрите QuickRef (F11). Для этого выберете там рубрику Cosmetic Chart.

Как: отобразить на графике область объемов выше чем область цен

Для того, чтобы отобразить область объемов над областью цен на графике нужно:

  • скрыть область объемов, выводящуюся по умолчанию;
  • создать индивидуальную область на графике;
  • отобразить объемы (Bars.Volume) на новой индивидуальной области графика.

Вот как это будет выглядеть в виде кода:

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


protected override void Execute()
{
   HideVolume(); //скрываем область объемов

   ChartPane myVolumePane = CreatePane(40, true, true); //создаем индивидуальную область графика (выше области цены, с сеткой)

   PlotSeries(myVolumePane, Bars.Volume, Color.Black, WealthLab.LineStyle.Histogram, 5); //рисуем на индивидуальной области объемы

    //раскрашиваем гистограмму объемов в нужный цвет, запуская цикл по всем барам.

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

      if (Close[bar] > Open[bar])

        SetSeriesBarColor(bar, Bars.Volume, Color.Green);

      else

        SetSeriesBarColor(bar, Bars.Volume, Color.Red);
}

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

Изменение положение области объемов

Перенос области объемов вверх области цены

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

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

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

Так как Wealth-Lab обрабатывает стратегии в режиме простого дохода и каждая сделка просто равняется 1-му лоту (или контракту), невозможно получить прямой доступ к количественным показателям стратегии прямо из кода. Это относится к таким количественным показателям стратегии, как величина позиции (Position Sizing), кривая капитала (Equity), наличные (Cach) или просадки (Drowdown). Расчетом таких количественных показателей занимаются задачи в визуализаторе процессов (Performance Visualizer), запускаемые сразу же после расчета основной стратегии (смотри API).

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

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


protected override void Execute()
{
  /*

   Здесь Вы описываете правила Вашей стратегии

  */

   PlotWinRate(); //а теперь отображаем количественный показатель Вашей стратегии WinRate (отношение выигрышей к проигрышам)

}

//создаем специальный метод, который позволит нам отобразить прямо на индивидуальной области графика показатель стратегии WinRate
public void PlotWinRate()

{
   DataSeries winRate = Close - Close;    // Creates a DataSeries filled with zeroes
   DataSeries tradeTotal = winRate + 0;

   foreach (Position p in Positions) //пробегаем весь цикл в существующих позициях по отработанной стратегии:

   {

      if (p.ExitBar > -1) //для всех позиций, у которых бар выхода из позиции равен или больше 0

    {
         tradeTotal[p.ExitBar] += 1; //считаем сумму всех позиций

         if (p.NetProfitPercent > 0)

            winRate[p.ExitBar] += 1; //считаем сумму прибыльных позиций
    }

   }

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

        tradeTotal[bar] = tradeTotal[bar] + tradeTotal[bar-1];
        winRate[bar] = winRate[bar] + winRate[bar - 1];

    }

   winRate = 100 * winRate / tradeTotal;
   winRate.Description = "Win Rate (%)";

   ChartPane winPane = CreatePane(40, true, true);
   PlotSeries(winPane, winRate, Color.Green, WealthLab.LineStyle.Solid, 1);

}

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

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

Вывод на график Велса параметров стратегии

область графика с параметрами стратегии

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

Еще одна тема, которую хотел бы затронуть сегодня касается контроля над вертикальной шкалой.

Как: контролировать вертикальную Y-шкалу на графиках в программе Wealth-Lab

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

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

К примеру, если осцилятор RSI колеблется между значениями 50 и 90 достаточно долгое время, то Wealth-Lab неминуемо автоматически изменит масштаб вертикальной оси таким образом, чтобы Вы могли видеть только значения между этими уровнями. Однако, если Вы ждете момента, когда RSI опустится ниже уровня 30, Вы можете принудительно отображать участок вертикальной шкалы таким образом, чтобы было видно уровень 30 или даже ниже - чтобы видеть перспективу текущего значения.

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


protected override void Execute(){
    // Обеспечение гарантированной видимости диапазона значений индикатора RSI от 30 до 70

    ChartPane RSIPane = CreatePane( 60, true, true );
    PlotSeries( RSIPane, RSI.Series( Close, 14 ), Color.Navy, WealthLab.LineStyle.Solid, 1 );
    SetPaneMinMax( RSIPane, 30, 70 );
}

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

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

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

  1. [...] Отображение на графике в программе Велс Лаб рядов данн…  Главная  Построение графиков в программе Wealth-Lab [...]

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

    Мне кажется нужно немного поменять два комментария в программе, вычисляющей процент прибыльных сделок. Вместо “считаем сумму всех позиций” следует написать что-то вроде “записываем единицы в серию tradeTotal на тех барах, где были закрыты позиции”. А вместо “считаем сумму прибыльных позиций” написать “записываем единицы в серию winRate на тех барах, где были закрыты прибыльные позиции”.

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