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

74632СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР СОЗДАНИЕ ИНДИКАТОРА ШАБЛОН 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.

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

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

background

Tradematic Support Center

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

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