background

Tradematic Support Center

Guides, articles, videos and links for Tradematic users and developers.

Создание своего индикатора

87842СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР СОЗДАНИЕ ИНДИКАТОРА ШАБЛОН MEDIANPRICE

У вас есть свой индикатор, которого еще нет в трейдматике?
Не проблема - начиная с версии 1.6.0 вы можете создавать свои индикаторы, которые полностью интегрируются в трейдматик - т.е. их можно будет отображать на графиках, создавать с их помощью стратегии в Конструкторе стратегий, и т.д.

В качестве примера мы создадим индикатор "Медианная цена" - это среднее арифметическое максимальной и минимальной цен дня.
Соответственно, у нас будет два параметра - массив цен High и массив цен Low.

Шаблон.

Создаем пустую стратегию с помощью Конструктора стратегий, затем открываем Редактор кода.
Вместо имеющегося кода копируем следующий шаблон для нашего индикатора:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using TradeMatic;
using TradeMatic.Indicators;

// Класс индикатора Медианная цена
public class MedianPrice : DataSeries
{
   // Конструктор класса
   public MedianPrice(DataSeries highSeries, DataSeries lowSeries, string description)
   {
   }

   // Функция Series возвращает инициализированный объект класса MedianPrice
   public static MedianPrice Series(DataSeries highSeries, DataSeries lowSeries)
   {
      string cacheName = "MedianPrice (" + highSeries.Description + "," + lowSeries.Description + ")";
      if (highSeries.Cache.ContainsKey(cacheName))
         return (MedianPrice)highSeries.Cache[cacheName];

      MedianPrice medianPrice = new MedianPrice(highSeries, lowSeries, cacheName);

      // добавим в кэш
      highSeries.Cache.Add(medianPrice.Description, medianPrice);

      return medianPrice;
   }

   // Функция Value
   public static double Value(int bar, DataSeries highSeries, DataSeries lowSeries)
   {
      return Series(highSeries, lowSeries)[bar];
   }
}

Как мы видим, это пока только оболочка - мы нигде сам индикатор не считаем.
Восполним этот пробел - добавим функцию CalculateMedianPrice, которая на вход получает два массива чисел highSeries и lowSeries, и возвращает массив медианных цен, сложив high и low и поделив сумму на 2:

// Посчитать медианную цену
private static DataSeries CalculateMedianPrice(DataSeries highSeries, DataSeries lowSeries)
{
   DataSeries medianPrice = new DataSeries();
   
   // создаем медианную цену
   medianPrice = (highSeries + lowSeries) / 2.0;
      
   return medianPrice;
}

В конструкторе будем вызывать эту функцию, чтобы инициализироваться уже массивом с медианными ценами:

// Конструктор класса
public MedianPrice(DataSeries highSeries, DataSeries lowSeries, string description)
   : base(CalculateMedianPrice(highSeries, lowSeries), description)
{
}

Итоговый код.

В итоге у нас получился следующий код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using TradeMatic;
using TradeMatic.Indicators;

// Класс индикатора Медианная цена
public class MedianPrice : DataSeries
{
   // Конструктор класса
   public MedianPrice(DataSeries highSeries, DataSeries lowSeries, string description)
      : base(CalculateMedianPrice(highSeries, lowSeries), description)
   {
   }

               // Посчитать медианную цену
   private static DataSeries CalculateMedianPrice(DataSeries highSeries, DataSeries lowSeries)
   {
      DataSeries medianPrice = new DataSeries();
      
      // создаем медианную цену
      medianPrice = (highSeries + lowSeries) / 2.0;
      
      return medianPrice;
   }

   // Функция Series возвращает инициализированный объект класса MedianPrice
   public static MedianPrice Series(DataSeries highSeries, DataSeries lowSeries)
   {
      string cacheName = "MedianPrice (" + highSeries.Description + "," + lowSeries.Description + ")";
      if (highSeries.Cache.ContainsKey(cacheName))
         return (MedianPrice)highSeries.Cache[cacheName];

      MedianPrice medianPrice = new MedianPrice(highSeries, lowSeries, cacheName);

      // добавим в кэш
      highSeries.Cache.Add(medianPrice.Description, medianPrice);

      return medianPrice;
   }

   // Функция Value
   public static double Value(int bar, DataSeries highSeries, DataSeries lowSeries)
   {
      return Series(highSeries, lowSeries)[bar];
   }
}

Создание сборки.

Нажмите кнопку "Компилировать", снизу должна появиться надпись "Компиляция завершена успешно" - значит, с нашим индикатором все в порядке.
Нажимаем кнопку Сохранить -> Дополнительно -> Сохранить индикатор в сборку, выбираем название для файла - например, "MedianPrice.dll".
Важный момент - сохранить сборку нужно обязательно в папку с трейдматиком.
Нажимаем "ОК" - вуаля, "Сборка сохранена в файле ...".
Закрываем стратегию без сохранения - она нам больше не нужна.

Использование.

Пришло время воспользоваться нашим новым индикатором.
Для начала проверим на графике, то ли у нас получлось. Подключитесь к брокеру, откройте вкладку Рабочие столы, нажмите кнопку "Открыть график".
Затем с правой верхней стороны графика нажмите Индикаторы -> Добавить, в списке индикаторов находим MedianPrice - ура! - и нажмаем ОК.
Похоже, у нас получилось именно то, что мы хотели.

Теперь можем проверить, появился ли он в Конструкторе стратегий - открываем Конструктор стратегий, добавляем любой вход или выход, фильтр - "Индикаторы", условие - "Индикатор выше цены", кликаем по ссылке "Выберите индикатор", и находим наш MedianPrice.

Если вы захотите использовать индикатор в Редакторе кода - тоже никаких проблем, все делается по аналогии со встроенными индикаторами.

Кроме того, вы можете передать кому-то файл с индикатором - т.к. это сборка, то можно будет им пользоваться, но исходный код виден не будет.

This website uses cookies. By continuing to use this website, you consent to our Privacy Policy. OK