Зачастую Вы хотите протестировать стратегию, в которой задействован не один финансовый инструмент, а два или более. К таким стратегиям относятся такие стратегии, которые основаны на принципах арбитража, парного трейдинга, ротации финансовых инструментов, сравнения с бенчмарком. К счастью, программа Wealth-Lab может помочь и при тестировании таких неординарных торговых стратегий.
Прежде чем приступить к созданию и тестированию таких стратегий торговли, разберемся с теми стандартными методами, которыми оперирует программа Велс Лаб, а также с основными понятиями, которые относятся к данной сфере торговли.
Вторым, или внешним финансовым инструментом называется финансовый инструмент, который не отображается на основном графике. Если указанного в программе тикера второго финансового инструмента не существует в текущем наборе данных (DataSet), то Wealth-Lab ищет указанный инструмент во всех прочих наборах данных (DataSet) в алфавитном порядке. Если в результате такого поиска искомый тикер финансового инструмента так и не находится, то по необходимости можно будет создать его.
Как: получить доступ к DataSeries второго финансового инструмента
Это можно сделать несколькими путями:
Метод 1: Используя метод GetExternalSymbol()
Метод GetExternalSymbol() возвращает объект Bars для выбранного финансового инструмента в текущем таймфрейме. Используйте этот метод только тогда, когда Вы не собираетесь совершать сделки со вторым финансовым инструментом. Этот метод можно использовать только для того, чтобы получить данные второго финансового инструмента для построения индикаторов или отображения их на графике.
В примере мы получили бары финансового инструмента, выступающего как бенчмарк. Используя цены закрытия этого финансового инструмента для вычисления относительного индекса (relative index). При этом использовалась техника под названием Most Anchored Momentum. Очень удобно то, что используя точно такие же свойства баров для бенчмарка, мы можем отобразить на графике финансовый инструмент, используемый в качестве бенчмарка.
Пример (как выполнить пример приведенного кода)...
В данном примере происходит построение специального индекса, используя внешний финансовый инструмент.
protected override void Execute() { // Создаем Most-Anchored Momentum Index используя второй финансовый инструмент, выступающий как бенчмарк Bars bmBars = GetExternalSymbol("SPFB.RTS", true); //получаем бары базы для сранения DataSeries mam = Close / bmBars.Close; mam = EMA.Series(mam, 10, EMACalculation.Modern) / SMA.Series(mam, 20); mam.Description = "Most Anchored Momentum: " + Bars.Symbol + " - " + bmBars.Symbol; ChartPane mamPane = CreatePane(40, true, true); PlotSeries(mamPane, mam, Color.Blue, LineStyle.Solid, 2); ChartPane bmPane = CreatePane(40, true, true); PlotSymbol(bmPane, bmBars, Color.LightGreen, Color.Black); }
В результате отображается на графике Most Anchored Momentum и инструмент, который выступал у нас базой для сравнения - бенчмарк.
Смысл этого индикатора заключается в том, что мы сравнивем текущий финансовый инструмент (на нашем графике это акции газпрома) с бенчмарком, т.е. со вторым финансовым инструментом, взятым как мера сравнения (на нашем графике это фьючерс на индекс РТС).
Затем находим отношение цены закрытия основного инстрмента к внешнему инструменту. Усредняем этот полученый СПРЕД двумя скользящими средими и сравниваем эти скользящие средние друг с другом.
Интерпретировать этот MAM можно так. Если это индикатор растет, то можно сделать вывод, что текущий инструмент растет быстрее (или падает медленные) чем более широкий рынок. Если же падает, то текущий инструмент ведет себя хуже, чем инструмент, с которым мы проводим сравнение, т.е. растет медленнее (или же падает быстрее).
Вы, конечно же, можете поискать в Интернете более подробные сведения о Most Anchored Momentum и продумать - как можно этот инструмент использовать в своей торговле. Но на сегодня наша цель другая. Продемонстрировать работу одновременно с несколькими финансовыми инструментами.
Как видите, в этом примере продемонстрировано не только как можно использовать второй финансовый инструмент для построения индексов, но и как можно отобразить второй финансовый инструмент на графике.
Метод 2: Используя метод SetContext()
Вторым способом доступа к внешнему финансовому инструменту является использование специального метода SetContext().
Метод SetContext() меняет контекст выполняемого кода. При этом основным временно становится не главный финансовый инструмент, который выбирается путем кликанья по нему мышкой в DataSet, а тот финансовый инструмент, который указывается в методе SetContext(). При этом все действия с барами временно начинают выполняться с новым финансовым инструментом. После выполнения метода SetContext() Вы сможете обычным образом совершать сделки с новым финансовым инструментом. Для выяснения подробностей смотри программирование торговых стратегий.
Пример (как выполнить пример приведенного кода)...
protected override void Execute() { SetContext("ROSN", true); // Меняем контекст, т.е. начинаем работать со вторым (внешним) финансовым инструментом Bars rosn = Bars; // Объявляем переменную ROSN типа Bars и сохраняем там бары 2-го финансового инструмента RestoreContext(); // Возвращаемся к основному финансовому инструменту // Отображаем цены закрытия второго финансового инструмента (MSFT) на графике основного (1-го) финансового инструмента PlotSeries(PricePane, rosn.Close, Color.Blue, LineStyle.Solid, 2); // Создаем алерт для текущего (1-го) финансового инструмента (в нашем случае газпром) int bar = Bars.Count - 1; BuyAtMarket(bar + 1, Bars.Symbol); // Создаем алерт для внешнего (2-го) финансового инструмента (в нашем случае роснефть) SetContext("ROSN", true); BuyAtMarket(bar + 1, Bars.Symbol); RestoreContext(); }
Взглянув на получившийся график, мы можем убедиться, что метод SetContext() точно также, как и метод GetExternalSymbol() позволяет строить нужные нам индикаторы, используя информацию о втором финансовом инструменте. Здесь отображается на гафике инструмента "ГАЗПРОМ" линейный график, построенный по ценам закрытия финансового инструмента "РОСНЕФТЬ".
Но кроме того, метод SetContext() позволяет еще и совершать сделки с внешним (2-м) финансовым инструметом. Это доказывает на то, что программа Велс Лаб при выполнени приведенного кода формирует нам полноценные алерты.
Кстати, таких внешних инструментов может использоваться не один, а множество в одной торговой стратегии.
Обычно, как и в предыдущих примерах, Вы должны присвоить параметру синхронизации методов GetExternalSymbol() и SetContext() значение true.
Однако в некоторых случаях Вы захотите присвоить параметру синхронизации этих методов значение false. К примеру, так целесообразно поступать при создании индикаторов, когда сначала используются исходные бары или числовые последовательности внешних финансовых инструментов и лишь потом происходит их синхронизация с основным финансовым инструментом.
Для того, чтобы подробнее разобраться с такими случаями - внимательно изучите следующий пост, который будет посвящен синхронизации внешних данных.
[...] Как получить доступ ко второму финансовому инструмент… [...]
[...] Как получить доступ ко второму финансовому инструмент… Главная Как получить доступ к единичному [...]
[...] [...]
[...] 4. Как получить доступ ко второму финансовому инструмент… [...]
Дмитрий, спасибо за статью. Она попмогла разобраться с подключением второго финансового инструмента. Но уменя остался вопрос.
Я переключаюсь на второй инструмент функцией SetContext(…). Далее хочу изменить таймфрейм второго инструмента функцией SetScaleCompressed(…), но меня перекидывает на первичный инструмент, т.е. я получаю первичный инструмент с только что заданным таймфреймом.
Я пробовал идти на оборот: сначала менял таймфрейм, потом выбирал второй инструмент. В этом случае я получал второй инструмент, но с превичным таймфреймом.
Существует ли возможность изменить и инструмент, и таймфрейм одновременно. Заранее спасибо!
Спасибо Дмитрий за статью! Мне удалось разработать хорошую рабочую торговую систему, используя возможность анализа второго инструмента!
Буян, рад, что Вам пригодились материалы данной статьи!
Дмитрий, у Вас во втором примере в комментарии вместо Роснефти остался исходный тикер Майкрософта