
Tradematic Support Center
Guides, articles, videos and links for Tradematic users and developers.
Создание своего индикатора
97401СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР СОЗДАНИЕ ИНДИКАТОРА ШАБЛОН 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.
Если вы захотите использовать индикатор в Редакторе кода - тоже никаких проблем, все делается по аналогии со встроенными индикаторами.
Кроме того, вы можете передать кому-то файл с индикатором - т.к. это сборка, то можно будет им пользоваться, но исходный код виден не будет.

