Tradematic Support Center
Guides, articles, videos and links for Tradematic users and developers.
Торговля по индексу
102125СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР АНАЛИЗ_ИНДЕКСА ИНСТРУМЕНТ GETEXTERNALSYMBOL
Создадим стратегию, которая анализирует индекс, а торгует акциями, в него входящими.
Абсолютно точно таким же способом можно создать стратегию типа "спот-фьючерс", которая анализирует базовый актив, а торгует фьючерсом.
В качестве основы мы в который раз возьмем нашу любимую стратегию SMA-9, чтобы было нагляднее.
А в качестве индекса мы возьмем индекс ММВБ10, которая на текущий момент включает следующие бумаги: ВТБ ао, ГАЗПРОМ ао, ГМКНорНик, ЛУКОЙЛ, Роснефть, РусГидро, Сбербанк, Сбербанк-п, СевСт-ао, Сургнфгз.
Для получения внешнего инструмента (в данном случае индекса ММВБ10), т.е. инструмента, который сейчас не является текущим, используется функция Script.GetExternalSymbol(string symbol, bool synchronize).
Нам нужно получить внешний инструмент с именем "MICEX 10", и уже на основе него строить индикаторы и проверять условия:
// Получаем индекс ММВБ10 Symbol micex10 = GetExternalSymbol("MICEX 10", true);
Создаем новую панель на графике и на ней отображаем индикаторы SMA, построенные уже на основе индекса:
// Отрисовка ChartPane micexPane = CreatePane(50, false); PlotSymbol(micexPane, micex10, Color.Green, Color.Red); PlotSeries(micexPane, SMA.Series(micex10.Close, parameter0.ValueInt), Color.Red, LineStyle.Solid, 1); PlotSeries(micexPane, SMA.Series(micex10.Close, parameter1.ValueInt), Color.Red, LineStyle.Solid, 1);
Не забываем добавить проверку в функцию Execute(), чтобы по самому индексу сигналы не выдавались:
// Проверка if(Symbol.SymbolName == "MICEX 10") { return; }
Кроме того, в список инструментов по стратегии, кроме списка индекса ММВБ10 (он приведен выше), нужно включить и сам индекс.
Итоговый код стратегии получается таким:
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using TradeMatic; using TradeMatic.Indicators; namespace ScriptNamespace { class MyScript : Script { private StrategyParameter parameter0; private StrategyParameter parameter1; public MyScript() { parameter0 = CreateParameter("Период SMA", 9, 0, 100, 1); parameter1 = CreateParameter("Период SMA", 9, 0, 100, 1); } public override void Execute() { // Проверка if(Symbol.SymbolName == "MICEX 10") { return; } // Получаем индекс ММВБ10 Symbol micex10 = GetExternalSymbol("MICEX 10", true); // Отрисовка ChartPane micexPane = CreatePane(50, false); PlotSymbol(micexPane, micex10, Color.Green, Color.Red); PlotSeries(micexPane, SMA.Series(micex10.Close, parameter0.ValueInt), Color.Red, LineStyle.Solid, 1); PlotSeries(micexPane, SMA.Series(micex10.Close, parameter1.ValueInt), Color.Red, LineStyle.Solid, 1); // Инициализация // Основной цикл for (int bar = 9; bar < micex10.Count; bar++) { if (IsLastPositionActive) { if (CrossUnder(bar, micex10.Close, SMA.Series(micex10.Close, parameter1.ValueInt))) { SellAtClose(bar, LastPosition, ""); } } else { if (CrossOver(bar, micex10.Close, SMA.Series(micex10.Close, parameter0.ValueInt))) { BuyAtClose(bar, ""); } } } } } }