О том, как строить графики в программе 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() отобразился в нижней области графика.
Существуют такие финансовые инструменты, которые не торгуются на бирже, а рассчитываются с помощью некоторых математических операций. Такие финансовые инструменты называются синтетическими. Давайте теперь посмотрим, какие возможности имеет Велс Лаб для графического отображения синтетических финансовых инструментов.
Как: отобразить на графике синтетический финансовый инструмент
Для отображения на графике синтетического финансового инструмента в программе 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); //отображаем на графике синтетический финансовый инструмент
}
После запуска полученной стратегии получим такой график:
Как видите, на области выше области цен отобразился полноценный 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#.
На сегодня - всё. Вы увидели, как посредством существующих и самостоятельно создаваемых методов можно отображать на графике не только цену и объемы основного финансового инструмента, но и любые данные по более сложным, производным или синтетическим инструментам. В следующий раз рассмотрим все способы отображения на графиках индикаторов, осциляторов и прочих рядов данных.







Новые посты по Email
Новые посты по RSS
Комментарии по RSS
Следим на Twitter
[...] [...]
[...] 30. Как отобразить на графике в программе Велс Лаб синтети… [...]
Дмитрий, здравствуйте.
А как отобразить (ну и потом применить к нему) график синтетического инструмента, равного допустим “ГАЗ-ЛУК”?
Это сделать очень просто:
Допустим, вы в списке инструментов (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()
Более подробнее об этом смотрите здесь: Как получить доступ ко второму инструменту а также