Финансовая лаборатория

Биржевая торговля и торговые роботы


Эта статья объясняет как можно создать библиотеку технических индикаторов для программы Wealth-Lab. Такая библиотека содержит скомпилированные индикаторы, которые интегрированы в программу Wealth-Lab и ведут себя точно также, как и индикаторы, которые поставляются вместе с программой. Созданные индикаторы появляются в собственной папке в списке индикаторов прямо в программе Wealth-Lab. Вы сможете схватить мышкой и перетащить любой из индикаторов, которые находятся в данной папке, прямо на график. Также Вы без проблем сможете использовать эти индикаторы в мастере стратегий.

Для того, чтобы создать библиотеку индикаторов, Вам потребуется специальная программа для написания кода на языке C#. Для этих целей можно использовать, к примеру, Visual Studio или бесплатную программу SharpDevelop. Те кто знаком с этими программами, сможет без труда создать библиотеку индикаторов. Если Вы не обладаете нужными знаниями - знайте, что Вы можете создать и отобразить на графике собственные индикаторы прямо в коде стратегии в редакторе программы Wealth-Lab.

Что такое библиотека индикаторов

Раз уж Вы дочитали статью до этого места, давайте более подробно разберемся - что такое библиотека индикаторов.
В программе Wealth-Lab каждый отдельный индикатор реализован как класс, который наследуется от базового класса DataSeries.

Класс DataSeries представляет собой массив, в каждой ячейке которого содержится число типа double (числа с цифрами после запятой), каждая ячейка данного массива связана с массивом, содержащим дату и время.

Конструктор класса

Ряд данных DataSeries может быть создан с помощью одного из двух конструкторов. В конструкторе доступны данные, используя которые и создаются ряды данных типа DataSeries. Это может быть или или другой ряд данных типа DataSeries, либо совокупность свечей (объект типа Bars). С помощью объекта Bars можно получить доступ ко всей истории данных о ценах открытия, закрытия, максимальных и минимальных ценах а также объемах соответствующего финансового инструмента.

Когда Вы создаете новый класс индикатора, создавайте именно такой конструктор, который более всего подходит для Ваших задач. Если Вы строите индикатор, который будет использовать только единичный ряд данных (к примеру, для расчета скользящей средней), выбирайте конструктор, который использует в качестве параметра переменную типа DataSeries.

Однако, если для расчета Вашего индикатора потребуется информация о ценах OHLC либо об объемах (например Вы собираетесь строить индикатор типа Стохастика), либо любую другую комбинацию, используйте конструктор, в качестве параметра в котором используется переменная типа Bars.

Примеры конструктора, который использует переменную типа DataSeries:

public SMA(DataSeries ds, int period, string description)
: base(ds, description)

Примеры конструктора, который использует переменную типа Bars:

public StochD(Bars bars, int period, int smooth, string description)
: base(bars, description)

Обратите внимание на то, что базовый конструктор будет вызываться каждый раз при создании индикатора. Пока этот конструктор заполняет ряд данных нулями, поэтому уже сейчас можно начинать работу с полным рядом значений. Теперь это Ваша забота - прямо в конструкторе нужно посчитать каждое значение индикатора бар за баром. Как это сделать - написано ниже.

Обратите внимание также на то, что одним из параметров конструктора является текстовая переменная, называемая "description" (описание). Эта текстовая строка представляет собой уникальное описание индикатора, включая его параметры. Этот параметр создается с помощью статического метода Series(), который также описан ниже.

Ваш индикатор может также иметь некоторое количество параметров, подобных параметру "period", который применяется при расчете скользящей средней. Эти дополнительные параметры могут иметь только следующие типы данных:

  • DataSeries
  • any enumerated type
  • Bars (дают доступ к последовательности свечей и их ценам OHLC и объемам)
  • Int32
  • Double
  • Boolean
  • String
  • DateTime

Рассчитываем значения индикатора

Значения индикатору нужно присвоить прямо в конструкторе. Первоначально каждая ячейка в ряде данных, содержащем значения индикатора заполняется нулями. Используйте свойство Count для того чтобы определить - сколько значений индикатора нужно рассчитать и сколько значений нужно присвоить.

Используйте индексный метода доступа (this[]) для того, чтобы присвоить значения каждой ячейке индикатора как только эти значения будут рассчитаны. Для доступа к конкретному значению ряда данных, который является источником, используйте номер конкретного бара, заключив его в квадратные скобки ([]). Для доступа к полям класса Bars, используйте его свойства Open, High, Low, Close и Value. Эти поля сами являются объектами типа DataSeries (ряды данных).

Приведенный код является примером того, как рассчитывается индикатор простой скользящей средней (SMA).

//Рассчитываем значения индикатора SMA:

for (int bar = period - 1; bar < ds.Count; bar++) {       double sum = 0;       for (int innerBar = bar; innerBar > bar - period; innerBar--)
      sum += ds[innerBar];
      this[bar] = sum / period;
}

Контроль первого бара, отображаемого на графике

Вы можете спрятать первоначальные значения Вашего индикатора. Для того, чтобы достичь этого, присвойте свойству FirstValidValue значение номера первого бара, который должен быть отображен на графике.

Для нашего примера, в котором рассчитывается простая скользящая средняя, FirstValidValue должно принять значение равное периоду скользящей средней минус единица.
К примеру, если у нас есть 30-ти периодная скользящая средняя, значения первых 29 баров (которые расположены в ячейках с номерами от 0 до 28) не являются валидными. Первым валидным баром в данном случае будет 30-й бар (его номер 29, т.к. первая ячейка имеет номер 0).

Статический метод Series

Статичный метод Series это именно тот метод, код которого будет выполняться программой Wealth-Lab для создания конкретного экземляра класса индикатора. Этот код будет выполнятся и тогда, когда Вы бросаете индикатор на график цены с помощью мышки. Метод Series имеет точно такие же параметры, что и конструктор класса индикатора, за исключением параметра "description".

Внутри метода Series создается экземпляр Вашего индикатора, при этом используется служебное слово "new", сразу после этого Вы сразу получаете доступ к данному экземпляру.

Выполните следующие шаги, создавая статичный метод Series:

  1. Создайте текстовое описание индикатора, используя при этом текстовый параметр конструктора "description".
  2. Посмотрите - не существует ли уже индикатор с точно таким же описанием в памяти компьютера (в кэше) - об этом будет упомянуто чуть позже.
  3. Если в кэше уже есть индикатор с соответствующим описанием, то нужно возвратить экземпляр закешированного индикатора.
  4. Если же такой индикатор еще не рассчитывался и отсутствует в кэше, то
  • нужно создать экземпляр индикатора, использовав при этом оператор "new" а также все параметры (включая описание), которые упоминались ранее в пункте 1.
  • сохраняем экземпляр индикатора в кэш (как это сделать - смотрите ниже).
  • возвращаем ссылку на экземпляр индикатора.

Ниже приведен код примера для метода Series, который рассчитывает индикатор простой скользящей средней (SMA).

//Статический метод Series(), который возвращает экземпляр класса indicator
public static SMA Series(DataSeries ds, int period)
{
//Создаем описание индикатора (далее будет индикатором конкретно этого экземпляра индикатора):
string description = "SMA(" + ds.Description + "," + period + ")";

//Проверяем - не имеется ли уже в кэше аналогичный индикатор (совпадающий по описанию)
if (ds.Cache.ContainsKey(description))
return (SMA)ds.Cache[description];

//Создаем экземпляр индикатора SMA, помещаем этот экземпляр в кэш и возвращаем экземпляр индикатора

SMA sma = new SMA(ds, period, description); //объявляем переменную sma типа SMA и с помощью конструктора класса SMA создаем экземпляр и присваиваем ссылку на этот экземпляр нашей переменной.
ds.Cache[description] = sma; //поещаем в кэш
return sma; //возвращаем полученный экземпляр индикатора
}

Создание уникального описания индикатора

Первым шагом при реализации статического метода для создания индикатора является создание текстового описания ("Description"), которое уникальным образом идентифицирует этот индикатор.

Это описание формируется из названия индикатора ("name"), сразу за которым следуют параметры индикатора (конечно, если такие существуют), заключенные в круглые скобки. Между параметрами индикатора должны стоять запятые.

Обратите внимание на то, что при создании описания индикатора также используется свойство "Description" того ряда данных (DataSeries), который является параметром для нашего индикатора. Именно это обеспечивает уникальность текстового описания нашего индикатора.

К примеру, если индикатор использует для своего построения цену закрытия и период 20, то свойство "description" нашего индикатора будет выглядеть так:
SMA(Close,20)

Извлечение существующего экземпляра индикатора из кэша

У объектов класса DataSeries (ряды данных) и Bars (совокупность свечей) есть свойство, которое называется "Cache". Это свойство является "справочником". Несмотря на то, что работа с кэшем не является обязательной, Вы обязательно должны понять и применять в программировании механизм кеширования. Это нужно сделать для того, чтобы исключить создание множества совершенно одинаковых копий Вашего индикатора с аналогичными параметрами.

Метод Series() четко определяет уже созданный и находящуийся в кэше индикатор. Это достигается благодаря использованию метода ContainsKey() объекта типа Dictonary. Текстовое описание индикатора всегда является ключом, т.е. уникальной записью точно идентифицирующей данный индикатор с данными параметрами.

Если в кеше уже есть соответствующий индикатор, то метод Series() вынимает этот индикатор из кеша и затем забрасывает его назад к индикаторам соответствующего типа. Кэш хранит все индикаторы как объекты типа DataSeries, поэтому Вам нужно перед возвращением объекта в кэш привести его к нужному типу данных.

Создание нового экземпляра индикатора

Если индикатор не найден в кэше, то метод Series() создает экземпляр данного индикатора используя при это конструктор. Для вызова конструктора используется оператор new.
Ваш индикатор должен иметь публичный конструктор, который использует точно такие же параметры, что и метод Series(), но дополнительно в конструкторе должен быть еще один параметр типа string который представляет собой описание, которое обязательно должно присутствовать в индикаторе. Использование описания индикатора в конструкторе в качестве дополнительного параметра преследует две цели:

1. Обеспечивается использование аналогичных текстовых строк как в кэше, так и в свойстве "Description" создаваемого индикатора.

2. Наличие такого параметра делает возможным использование оператора new для создание экземпляра класса создаваемого индикатора и предоставляют созданным таким образом экземплярам собственное описание. Здесь следует заметить, что индикаторы, созданные с помощью оператора new не участвуют в механизме кеширования.

Как только метод Series() создает экземпляр индикатора, он сразу же помещает этот экземпляр в кэш и отдает экземпляр данного индикатора в точку вызова метода.

Создание класса IndicatorHelper

Для того, чтобы иметь возможность использовать созданный Вами индикатор непосредственно в программе Wealth-Lab, Вам необходимо создать специальный класс Helper, который описывает созданный Вами индикатор.

Класс Helper является объектом, который наследуется от базового класса IndicatorHelper, описание которого Вы найдете чуть ниже. Вы можете создать класс Helper в том же самом пространстве имен, где Вы создаете и основной класс индикатора.

Свойства базового класса IndicatorHelper:

public abstract Type IndicatorType

Возвращает ссылку на объект типа именно того индикатора, который поддерживается данным классом Helper.

public abstract IList <string>ParameterDescriptions

Возвращает строковый массив, каждая ячейка которого содержит параметр, который используется в  конструкторе Вашего индикатора. Дает возможность дать краткое описание (одно или два слова) каждого параметра. Эти строковые короткие описания используются как метки в форме построения индикатора в программе Wealth-Lab для описания параметров индикатора.

Внутри кода Вы можете использовать любой класс, который поддерживает интерфейс IList. Однако обычно используется именно текстовый массив, который заполняется в момент объявления (смотри пример создания индикатора SMA).

public abstract IList <object> ParameterDefaultValues

Возвращает массив объектов, один объект соответствует в этом массиве одному параметру Вашего индикатора, которые указаны в конструкторе. Заполните данный массив теми значениями, которые параметры Вашего индикатора должны принимать когда в программе Wealth-Lab Вы будете хватать данный индикатор мышкой и бросать на график цен.

Вы можете использовать любой класс, который поддерживает интерфейс IList для того, чтобы реализовать его в Вашем классе Helper. Обычно используется статичный массив объектов, которые заполняются в момент их объявления (смотри пример создания индикатора SMA). Для определенных типов параметров используйте следующие значения в массиве:

  • Параметры типа Bars: Вы должны установить тип данному объекту используя перечисление BarsDataType.Bars. Это явно укажет программе Wealth-Lab на то, что индикатор в качестве входного параметра использует объект типа Bars.
  • Параметры типа DataSeries: Вы должны присвоить объекту одно из значений из перечисления CoreDataSeries. К примеру, это могут быть такие объекты, как open, high, low, close, или volume.
  • Параметры типа enum (перечисления): Вы можете использовать любые созданные Вами либо уже существующие перечисления в качестве параметров. Форма, которая устанавливает параметры индикаторов в программе Wealth-Lab будет отображать раскрывающийся список (со стрелочкой вниз), который будет заполнен строковыми значениями, которые пользователь сможет выбрать из предлагающегося списка.
  • Параметры типа int: Вы можете устанавливать значения типа int которые соответствую значениям по умолчанию, которые должны принимать параметры. Или же Вы можете для установки параметра типа int использовать класс RangeBoundInt32, который устанавливает значение по умолчанию, минимальные, максимальные значения в своем конструкторе. Благодаря такому подходу пространство значений параметров, которые пользователь может использовать при использовании индикатора ограничивается.
  • Параметры типа double: Точно также, как и параметры типа int, Вы можете присваивать значения типа double напрямую, либо использую класс RangeBoundDouble для ограничения области значений данного параметра.
  • Параметры типа string: Вы можете устанавливать переменные типа string в качестве значений по умолчанию, а также такие параметры позволят пользователям вводить текстовые значения прямо в форме настройки параметров индикатора.
  • Параметры типа DateTime: Если Вы хотите, чтобы пользователи получали возможность выбрать дату и время прямо в форме настройки параметров индикатора установите значение переменной типа DateTime по умолчанию, заполнив нулями поля, предназначенные для года, месяца и дневных настроек времени.

public abstract Color DefaultColor

Возвращает цвет, который должен использоваться по умолчанию для прорисовки индикаторов на графике.

public virtual LineStyle DefaultStyle

Возвращает Стиль линии (Solid, Dotted, Dashed or Histogram) который должен использоваться при прорисовке индикатора. Стиль "Solid" (сплошная) является параметром по умолчанию, поэтому если Вы хотите, чтобы линия индикатора была сплошной, Вам вообще не требуется переопределять значение этого свойства.

public virtual int DefaultWidth

Возвращает толщину линии, которая используется по умолчанию при прорисовке индикатора. Если Вы не переопределяете это свойство, то толщина линии устанавливается равной 1.

public abstract string Description

Возвращает описание индикатора. При этом рекомендуется использовать лишь несколько предложений. Это описание появится внизу списка индикаторов сразу после того, как Вы выберете мышкой конкретный индикатор в окне выбора индикаторов программы Wealth-Lab.

public virtual string URL

Возвращает ссылку на вебресурс (URL), на который пользователь должен перейти для того, чтобы получить дополнительную информацию о конструируемом Вами индикаторе. После нажатия на ссылку "More Info" в окне описания индикатора - программа Wealth-Lab запустит браузер и перейдет по этой ссылке на указанную Вами страницу. Если Вы не хотите отсылать пользователей ни на какую страницу - просто присвойте пустое стринговое значение.

public virtual string TargetPane

Это свойство определяет - на какой области графика должен отображаться создаваемый Вами индикатор. Если Вы хотите, чтобы индикатор всегда отображался только в области цен (PricePane) - возвращайте здесь значение "P", если хотите, чтобы индикатор отрисовывался в области объемов - возвращайте значение "V". Возвращайте пустое значение стрингового типа в том случае, если индикатор нужно отображать в той области, куда его "кинут" с помощью мышки.

Во всех прочих случаях, передайте другую строчку (обычно область называют по имени класса индикатора) для того, чтобы создать новую область на которой должен отображаться индикатор и вызвать эту область. Когда индикатор хватают мышкой и отпускают, программа Wealth-Lab пробует найти область цен, которая уже существует и в точности совпадает по названию с той строкой, которую Вы указали. Если такая область цен находится - то индикатор будет отображаться именно на этой области цен, а новая область цен при этом не будет создаваться. Эта особенность может использоваться для того, чтобы вызывать "группы" связанных индикаторов для отображения их на одной и той же области цен. Это касается таких индикаторов, как: ADX, ADXR, DI+, DI-.

public virtual Type PartnerBandIndicatorType

Если Вы строите индикатор, который всегда имеет пару в виде другого индикатора, например как верхняя линия Болинджера (BBandUpper) или нижняя линия Болинджера (BBandLower), Вы можете переопределив это свойство возвратить тип индикатора - партнера. Если Вы сделаете это, программа Wealth-Lab позволит пользователям прорисовать сразу две линии, когда одна из этих линий хватается мышкой и бросается на график.

public virtual Color DefaultBandColor

Если Ваш индикатор является частью пары, Вы должны определить здесь цвет по умолчанию, который должен будет предлагаться когда пользователи собираются закрасить пространство между индикаторами.

public virtual bool IsOscillator

Переопределите и возвратите true в том случае, если Ваш индикатор должен отображаться как осциллятор и области перекупленности и перепроданности должны заполняться другим цветом. Если Вы сделаете именно так, то Вы сможете переопределить также методы осциллятора для модификации поведения индикатора по умолчанию.

public virtual double OscillatorOverboughtValue

Определите уровень перекупленности осциллятора. Значения, которые превышают этот уровень будут закрашены цветом, который будет определяться ниже. Уровнем по умолчанию является 0.

public virtual double OscillatorOversoldValue

Определите уровень перепроданности осциллятора. Значения, которые будут отображаться ниже чем этот уровень будут закрашиваться цветом, который определяется дальше. Уровнем по умолчанию является 0.

public virtual Color OscillatorOverboughtColor

Определите цвет, который будет использоваться для закрашивания области на осцилляторе, находящейся в зоне перекупленности. Цветом по умолчанию для этой области будет голубой.

public virtual Color OscillatorOversoldColor

Определите этот цвет - он будет использоваться для закрашивания области осциллятора, который располагается под уровнем перепроданности. Цвет по умолчанию - красный.

public virtual Bitmap Glyph

Переопределите свойство Glyph (логотип) в том случае, если хотите получить самодельный значок для отображения его в списке индикаторов программы Wealth-Lab. Картинка, которая используется в качестве логотипа должна быть размером 16x16, и в качестве фона использовать цвет Fuchsia.

Разработка статического метода Value()

Разработка такого метода является не обязательной. Вы можете это сделать по желанию. Многие индикаторы позволяют работать с методом Value(). Этот статический метод Value() позволяет классу Вашего индикатора просчитать и возвратить в точку вызова метода Value() значение "на лету" для определенного номера бара. При этом не происходит создания нового экземпляра индикатора.

Этот способ расчета соответствует режиму простой калькуляции, который применялся в предыдущей версии Wealth-Lab.

Если Вы примете решение поддержать это соглашение, то создавайте этот метод таким образом, чтобы он использовал точно такие же параметры, что и конструктор класса Вашего индикатора плюс еще один дополнительный параметр, который указывает номер соответствующего бара, для которого нужно просчитать значение индикатора.

Ниже приведен пример создания статического метода для индикатора, рассчитывающего простую скользящую среднюю.

//This static method allows ad-hoc calculation of SMAs (single calc mode)
public static double Value(int bar, DataSeries ds, int period)
{
if (ds.Count < period) return 0; else { double sum = 0; for(int i = bar; i > bar - period; i--)
sum += ds[i];
return sum / period;
}
}

Использование индикаторов в коде WealthScript

Торговая система использует индикаторы в основном с использованием статического метода Series().

Пример:

//Create moving averages
DataSeries SMA20 = SMA.Series(Close, 20);
DataSeries SMA30 = SMA.Series(Close, 30);

Опытные пользователи могут использовать оператор new для создания экземпляра класса с помощью конструктора, попутно создавая и описание индикатора указывая его как параметр конструктора.

Пример:

DataSeries SMA20 = new SMA(Close, 20, "20 period SMA");
DataSeries SMA30 = new SMA(High, 10, "10 day SMA of Highs");

Создание собственного логотипа для библиотеки индикаторов

В программе Wealth-Lab созданная Вами библиотека индикаторов отображается как новая на панели со списком индикаторов. Индикаторы в Вашей библиотеке отображаются внизу папки, содержащей индикаторы после щелчка мышью по этой папке. По умолчанию, программа Wealth-Lab отображает папку, содержащую индикаторы с помощью стандартной иконки открытия/закрытия папки.

Вы можете поменять этот рисунок, использующийся для отображения папки на свой собственный рисунок. Для осуществления такой задумки - добавьте изображение в сборку Вашей библиотеки индикаторов. Убедитесь, что в Visual Studio свойств данного рисунка "Действие при построении" имеет значение "Внедренный ресурс". Обратите внимание также на то, что:

  • название рисунка должно быть "glyph.bmp"
  • размер рисунка должен быть 16x16 pixels
  • в качестве заднего фона нужно использовать цвет "Fuchsia".

Пример создания индикатора простой скользящей средней

Представленный в качестве примера код содержит полную реализацию класса индикатора простой скользящей средней (SMA) и ассоциированным с ним класса Helper.

/* 
    SMA 
    Создание собственной библиотеки индикаторов для Wealh-Lab
    на примере создания индикатора простой скользящей средней
    Власов Дмитрий

http://finlabportal.ru

*/

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;

namespace IndicatorsExample
{
    //создаем 2 класса - класс индикатора и класс IndicatorHelper

    public class SMA : DataSeries //Класс, который создает SMA Indicator (наследуется от DataSeries)
    {
        #region Приватные поля класса:
        
        DataSeries _sourceSeries;
        int _period;
        
        #endregion 
        
        #region Публичный интерфейс

          #region Статический метод Series() - возвращает экземпляр индикатора 
        
        public static SMA Series(DataSeries ds, int period) //в качестве парамета здесь используется ряд данных и период
        {

            string description = "SMA(" + ds.Description + "," + period + ")"; //Создаем описание:


            if (ds.Cache.ContainsKey(description))   //Используя описание как ключ смотрим - нет ли такого экземпляра индикатора в кеше 
                return (SMA)ds.Cache[description];  //в круглых скобках нужно постаить название класса индикатора

            //Если в кеше нужного экземпляра индикатора не нашли, то создаем, помещаем в кеш, и возвращем  

            SMA sma = new SMA(ds, period, description); //создаем
            ds.Cache[description] = sma; //помещаем в кэш
            return sma; //возвращаем в точку вызова метода
        }

        #endregion 

          #region Cтатический метод Value() - позволяет добавить вычисление индикатора SMA на каждом конкретном баре

        public static double Value(int bar, DataSeries ds, int period) //дополнительный параметр метода - номер бара
        {
            if (ds.Count < period)  //если данных не хватает для расчета индикатора
                return 0;
            else
            {
                double sum = 0;
                for (int i = bar; i > bar - period; i--) //пробегаемся по всем барам от текущей свечи влево для вычисления

                    sum += ds[i];

                return sum / period;
            }
        }

        #endregion

          #region Конструктор класса индикатора 

        public SMA(DataSeries ds, int period, string description)
            : base(ds, description) //в качестве параметров здесь используется DataSeries (а может быть bars)
        {
            //Запоминаем значение параметров в переменных 
            _sourceSeries = ds; 
            _period = period;

            //Определяем номер первого бара, на котором наш индикато будет корректно считаться. 
            FirstValidValue = period - 1 + ds.FirstValidValue;

            //Расчитываем значение скользящей средней на каждом из баров и присваиваем значеие каждой из ячеек. 
            for (int bar = period - 1; bar < ds.Count; bar++)
            {
                double sum = 0;
                for (int innerBar = bar; innerBar > bar - period; innerBar--)
                    sum += ds[innerBar];
                this[bar] = sum / period;
            }
        }

        #endregion
        
          #region Метод для рассчета значения индикатора для "живого", еще неполностью сформировавшегося бара.
        
        public override void CalculatePartialValue()
        {
            if (_sourceSeries.Count < _period - 1 || _sourceSeries.PartialValue == Double.NaN)
                PartialValue = Double.NaN;
            else
            {
                double sum = 0;
                for (int bar = _sourceSeries.Count - _period + 1; bar < _sourceSeries.Count; bar++)
                    sum += _sourceSeries[bar];
                sum += _sourceSeries.PartialValue;
                PartialValue = sum / _period;
            }
        }
        #endregion
        
        
        #endregion
    }


    public class SMAHelper : IndicatorHelper //Helper class - этот класс позволяет работать индикатору в программе WealthLab 6
    {

        #region Приватные поля класса SmaHelper 
        
        private static object[] _paramDefaults = { CoreDataSeries.Close, new RangeBoundInt32(20, 2, Int32.MaxValue) };
        private static string[] _paramNames = { "Финансовый инструмент", "Период усреднения" };

        #endregion

        public override IList<object> ParameterDefaultValues //Возвращает значения параметров по умолчанию 
        {
            get
            {
                return _paramDefaults;
            }
        }

        public override IList<string> ParameterDescriptions //Возвращает описание параметров
        {
            get
            {
                return _paramNames;
            }
        }

        public override Color DefaultColor //Устанавливает цвет индикатора по умолчанию
        {
            get
            {
                return Color.Red;
            }
        }

        public override Type IndicatorType //Возвращает ссылку на поддерживаемый тип индикатора
        {
            get
            {
                return typeof(SMA);
            }
        }

        public override string Description //возвращает текстовое описание индикатора (видно в Wealth-Lab)
        {
            get
            {
                return @"Индикатор рассчитывает скользящую среднюю и используется как пример на курсе Власова Дмитрия.";
            }
        }

        public override string URL //возвращает ссылку, перейдя по которой можно получить дополнительную информацию
        {
            get
            {
                return @"/2012/05/proektirovanie-i-postroenie-indikatorov-v-wealth-lab/";
            }
        }


    }

}
Рубрики: Wealth-Lab

Комментариев: 9

  1. Vladimir пишет:

    Здравствуйте. Подскажите пожалуйста почему в параметрах оптимизации в WLD 6.3 у меня методы – Перебором и Монте – Карло, а генетической оптимизации нет? Может какой плагин установить нужно.

  2. Mr_oz пишет:

    Доброго дня. Подскажите пожалуйста данная возможность сборки собственных индикаторов в библиотеке присутствует в версии 5.4 ?

  3. sa пишет:

    Дмитрий, а можно где-нибудь увидеть пример создания коллекций индикаторов?
    Что-то не могу допетрить как это делается. Задача состоит в том, чтобы создать несколько разнопериодных ema и сохранить их параметры в массив, который потом можно будет перебирать в циклах?
    Спасибо.

  4. Алексей пишет:

    Оказывается елси в dll индикатора хочешь прописать TargetPane, как PricePane, то надо прописывать как “P”, а не “PricePane”, при полном варианте он у меня упорно не хотел ложится на цену.

  5. Vladimir пишет:

    Все понял, кроме одного момента – как папку обозвать со своими индикаторами в WLD? Т.е. я открываю список индикаторов для осуществления Drug’n’Drop и вижу разные папки, а папка с моими индикаторами не имеет названия.

Оставить комментарий