Пользовательские индикаторы CAlgo; Основы кодирования

Блог Форекс.

Опыт торговли на Форекс из первых рук и информация о валютном рынке, которая будет полезна трейдерам.

Архивы.

Пользовательские индикаторы cAlgo — Основы программирования.

После моего краткого введения в платформу cTrader пришло время изучить возможности, предлагаемые cAlgo — частью платформы для алгоритмической торговли. Сегодня я опишу основные конструкции языка программирования, которые используются для кодирования пользовательских индикаторов. Я также рассмотрю образец исходного кода и попытаюсь объяснить, как это работает, чтобы вы могли создать свой собственный индикатор cTrader..

cAlgo — Слово предупреждения.

Хотя установка cAlgo предлагает довольно много примеров как индикаторов, так и роботов, и на их официальном сайте cTDN есть почти 200 общих алгоритмов, мало официальной информации о кодировании для cTrader. Вы не найдете официальных руководств по кодированию ваших индикаторов cAlgo..

Поскольку торговая платформа использует C # для кодирования алгоритмов, вы можете рассчитывать на некоторый уровень знакомства с кодом, если у вас есть опыт работы с C #. К сожалению, вы почти не найдете объяснений или описаний API и классов, специфичных для торговли..

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

По сути, код каждого пользовательского индикатора можно разделить на следующие разделы:

Объявление необходимых пространств имен Создание класса индикатора: Определение входных параметров Определение выходов Объявление дополнительных объектов Реализация функции Initialize () Реализация функции Calculate () Реализация дополнительных функций.

Необходимые пространства имен.

Пространства имен, которые вам понадобятся, определены в основном пространстве имен cAlgo.API. Для работы любого пользовательского индикатора требуется пространство имен cAlgo.API. Кроме того, можно загрузить пространство имен cAlgo.API.Indicators для работы со стандартными индикаторами внутри кода вашего пользовательского индикатора..

Стандартные пространства имен C # (такие как System или System.Timers) могут использоваться, если вы хотите получить доступ к их классам..

Класс индикатора.

Индикатор должен быть объявлен внутри специального пространства имен cAlgo.Indicators. Атрибут [Indicator] необходим для объявления класса индикатора. Кроме того, этот атрибут может определять некоторые дополнительные свойства индикатора:

текстовое имя для отображения в cTrader; Свойство IsOverlay, которому можно присвоить значение true, если вы хотите отображать индикатор в главном окне графика; в противном случае он будет отображаться в отдельном окне индикатора под основным; ScalePrecision, устанавливающий количество знаков после запятой для вывода индикатора; AutoRescale — значение true, чтобы индикатор автоматически масштабировал график..

Существует также необязательный атрибут [Levels], который можно использовать для установки пользовательских линий уровня для индикатора отдельного окна. Например, 30 и 70 для индикатора RSI.

Вот стандартное начало объявления:

Входные параметры.

Индикатор не обязательно должен иметь входные параметры. Каждому объявленному параметру нужен атрибут [Parameter]. Этот атрибут можно использовать для установки свойств входных параметров, таких как текстовое имя (как оно отображается для пользователей), значение по умолчанию, минимальное и максимальное значения. Затем каждый параметр объявляется как открытый член класса. аксессоры следует применять к входному параметру, если вы хотите, чтобы пользователи видели и изменяли его значение (и зачем еще вы объявляете его как входной параметр?) Пользовательский индикатор cAlgo может иметь столько входных параметров, сколько вам нужно.

[Parameter (DefaultValue = 14, MinValue = 2)] public int Periods.

Выходы.

Индикатор может иметь от нуля до любого количества выходов. Выход — это результат работы индикатора, который отображается на графике. Например, выходным значением скользящей средней является линия. Это аналог сюжета в MetaTrader. Выход объявляется как открытый член класса с теми же средствами доступа, что и входные параметры, но с другим атрибутом — [Выход]. Этот атрибут может устанавливать такие свойства, как имя текста, цвет и тип графика (линия, гистограмма и т. Д.), Стиль линии (точки, сплошные и т. Д.) И толщину..

[Выход("Результат", Color = Colors.Orange)] public IndicatorDataSeries Result.

Дополнительные объекты.

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

частное MovingAverage movingAverage;

Это может быть простая переменная, используемая во всех методах вашего класса:

частный двойной опыт;

Или какой-то особый вид ряда данных (например, медиана или типичная цена):

частный TypicalPrice типичный;

Или какой-нибудь стандартный объект C #:

закрытый только для чтения Timer _timer = new Timer ();

Инициализировать ()

Метод Initialize () — это стандартная функция, вызываемая cTrader при прикреплении индикатора к графику. Лучше всего его использовать для расчета значений, которые становятся известными при инициализации индикатора и не изменяются позже (т.е. входные параметры):

защищенное переопределение void Initialize ()

Или назначить стандартные показатели, если они были заявлены ранее:

защищенное переопределение void Initialize ()

Поскольку Initialize () является стандартным методом базового класса индикатора, модификатор переопределения необходим, когда вы заменяете его собственной реализацией..

Рассчитать ()

Calculate () также является стандартным методом класса индикаторов cTrader. Он вызывается на каждом тике и равен Start () в MetaTrader 4 и OnCalculate () в MetaTrader 5. Это основная подпрограмма пользовательского индикатора. У него один параметр — int index, который представляет номер обрабатываемого бара. Между прочим, в cTrader столбцы диаграммы расположены слева направо — самый старый столбец имеет индекс 0, а самый новый бар имеет самый высокий индекс..

Реализация Calculate () — подходящее место для присвоения значений ранее заявленным выходам:

public override void Calculate (int index)

Обратите внимание, как в приведенном выше фрагменте кода используются выходные данные Result ранее объявленного объекта скользящей средней. Он также использует стандартный объект cAlgo для ряда данных — MarketSeries (в этом случае извлекается низкая цена).

Дополнительные функции.

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

Например, этот обработчик событий вызывается по событию таймера:

private void OnTimedEvent (отправитель объекта, ElapsedEventArgs e)

Или эта факториальная функция:

частный void Factorial (int n)

Объяснение образца кода индикатора.

Теперь, когда вы знаете, из каких частей состоит общий пользовательский индикатор в cTrader / cAlgo, давайте рассмотрим пример кода индикатора с подробным объяснением каждого оператора. Следующий код — это образец индикатора EMA, включенный в установку cAlgo. Он был написан Spotware для демонстрации расчета экспоненциальной скользящей средней. Мои пояснения даются в виде комментария к коду чуть выше каждого оператора:

// Добавляет пространство имен System в область кода. // Здесь это не требуется, потому что ни одно из его имен не используется. используя Систему; // Базовое имя API cAlgo, которое содержит почти все, что используется в этом // (или любом другом) пользовательском индикаторе. с использованием cAlgo.API; // Содержит объявления стандартных индикаторов. с использованием cAlgo.API.Indicators; // Добавляет следующее объявление класса индикатора в пространство имен индикаторов cAlgo. пространство имен cAlgo.Indicators модификаторы позволяют пользователю изменять входной параметр. public DataSeries Source // Этот атрибут Parameter использует свойство DefaultValue для установки // входного параметра Periods равным 14 по умолчанию. [Parameter (DefaultValue = 14)] // Входной параметр периодов целочисленного типа. public int Periods // Атрибут вывода, который сообщает cAlgo использовать следующее объявление в качестве вывода индикатора. // Он также использует свойства, чтобы установить для вывода имя Main и бирюзовый цвет. [Выход("Основной", Color = Colors.Turquoise)] // Результат имеет тип IndicatorDataSeries. public IndicatorDataSeries Result // Переменная exp типа double объявлена ​​доступной // в каждом члене класса индикатора. частный двойной опыт; // Объявление стандартной функции инициализации. // Ключевое слово Override используется для «перезаписи» объявления Initialize () класса индикатора, // от которого наследуется этот класс пользовательского индикатора. protected override void Initialize () // Объявление стандартной функции расчета индикатора. Он будет вызываться каждый тик. public override void Calculate (int index) // иначе иначе > > >

Попробуйте написать собственный индикатор.

Как видите, в процессе создания собственных индикаторов для cTrader через cAlgo нет ничего сложного. Также он выглядит намного проще, чем, например, в MetaTrader 5, без особенностей языка MQL. В то же время C # — достаточно популярный язык, известный многим трейдерам Forex..

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

Если вам интересно узнать больше о программировании для cTrader, следите за обновлениями. На следующей неделе я постараюсь рассказать об основах программирования роботов в cAlgo. Если у вас есть вопросы о пользовательских индикаторах cAlgo и / или cAlgo IDE, опубликуйте их, используя форму комментариев ниже..

Похожие сообщения:

Интервью с Spotware (разработчиком cTrader) Traders Dynamic Index (TDI), преобразованным в MT5 и cTrader Интервью с Ильей Холеу (Spotware) cAlgo Robots — Основы кодирования Платформа cTrader.

4 ответа на «Пользовательские индикаторы cAlgo — Основы программирования»

Марек Солович.

Здравствуйте, этот сайт ПОЛЕЗНЫЙ для меня и, возможно, вы мне поможете. Я хотел бы создать свой собственный индикатор, что-то похожее на свечу с настраиваемой рамкой, но не на основе TF, а на подсчете свечей в прошлом. Я хотел бы построить indy, который показывает мне только одну свечу в правой части графика, которая представляет собой HOLC для x количества свечей. Я не люблю код для подсчета x до прошлого. Я не знаю, с чего начать, и надеюсь, вы понимаете, как я описал то, что хочу. Спасибо за помощь.

Андрей Морару Ответ: 11 сентября 2017 г., 10:58.

Я не уверен, действительно ли вам нужно нарисовать эту свечу, но похоже, что вам просто нужно найти максимальную цену, минимальную цену за период X баров, цену открытия на X-м баре и цену закрытия текущего (последний) бар. Вы можете найти все эти значения с помощью следующих функций: MarketSeries.High.Maximum (X); MarketSeries.Low.Minimum (X); MarketSeries.Open [MarketSeries.Open.Count — X]; MarketSeries.Close [MarketSeries.Close.Count — 1];

После написания кода этого индикатора, как добавить его в объект типа MovingAverages, чтобы его можно было выбрать в качестве одного из скользящих средних в cTrader??

Например, вы создаете другой индикатор, для которого в качестве входных данных требуется МА..

Обычно вы бы сделали:

MovingAverage myAve = MovingAverageType.Exponential.

Теперь я хочу сказать MovingAverageType.SampleEMA..

Андрей Морару Ответ: 5 апреля 2020 г., 13:51.

приватная ема SampleEMA; ema = Indicators.GetIndicator (Источник, EmaPeriod);

Возможно, вам также придется добавить образец EMA к ссылкам через Управление ссылками..

Похожие статьи