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