О том, как строить графики в программе 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#.
На сегодня - всё. Вы увидели, как посредством существующих и самостоятельно создаваемых методов можно отображать на графике не только цену и объемы основного финансового инструмента, но и любые данные по более сложным, производным или синтетическим инструментам. В следующий раз рассмотрим все способы отображения на графиках индикаторов, осциляторов и прочих рядов данных.
[...] [...]
[...] 30. Как отобразить на графике в программе Велс Лаб синтети… [...]
Дмитрий, здравствуйте.
А как отобразить (ну и потом применить к нему) график синтетического инструмента, равного допустим “ГАЗ-ЛУК”?
Это сделать очень просто:
Допустим, вы в списке инструментов (DataSet) выбираете основной финансовый инструмент “Газпром” (GAZP).
Тогда в коде стратегии делаете следующие шаги:
Вот и все.
Если хотите не только отображать второй финансовый инструмент, но и совершать с ним сделки, используйте метод SetContext()
Более подробнее об этом смотрите здесь: Как получить доступ ко второму инструменту а также