
Tradematic Support Center
Guides, articles, videos and links for Tradematic users and developers.
Торговля по индексу
112933СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР АНАЛИЗ_ИНДЕКСА ИНСТРУМЕНТ 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, "");
}
}
}
}
}
}

