background

Центр поддержки Tradematic

Материалы, видео и ссылки для пользователей и разработчиков Tradematic.

Торговля по индексу

74710СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР АНАЛИЗ_ИНДЕКСА ИНСТРУМЕНТ 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, "");
               }
            }
         }
      }
   }
}