Размер шрифта
-
+

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - стр. 11

bool ArraySetAsSeries (

const void& array [], // массив по ссылке

bool flag // true означает обратный порядок индексации

);

При применении функции ArraySetAsSeries физическое хранение данных массива не меняется, в памяти массив, как и прежде, хранится в порядке от первого значения до последнего значения.

Функция ArraySetAsSeries меняет лишь программный доступ к элементам массива – от последнего элемента массива к первому элементу массива.

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

При этом значение входного параметра переназначается с помощью глобальной переменной, и далее в расчетах используется уже значение глобальной переменной.

Например, для индикатора ADX это выглядит так:

// – - check for input parameters

if (InpPeriodADX> =100 || InpPeriodADX <=0)

{

ExtADXPeriod=14;

printf («Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.», InpPeriodADX, ExtADXPeriod);

}

else ExtADXPeriod=InpPeriodADX;

здесь ExtADXPeriod – глобальная переменная, а InpPeriodADX – входной параметр.

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

При этом такой символ может определяться пользователем.

В функции OnInit () также полезно проверить этот входной параметр на корректность.

Пусть определен входной параметр:

input string symbol=" "; // символ

Объявим глобальную переменную:

string name=symbol;

В функции OnInit () произведем проверку:

// – - удалим пробелы слева и справа

StringTrimRight (name);

StringTrimLeft (name);

// – - если после этого длина строки name нулевая

if (StringLen (name) ==0)

{

// – - возьмем символ с графика, на котором запущен индикатор

name=_Symbol;

}

Программная установка свойств индикатора осуществляется с помощью функций IndicatorSetDouble, IndicatorSetInteger, IndicatorSetString, PlotIndexSetDouble, PlotIndexSetInteger, PlotIndexSetString.

Функция IndicatorSetDouble позволяет программным способом определять такие свойства индикатора как indicator_minimum, indicator_maximum и indicator_levelN, например:

IndicatorSetDouble (INDICATOR_LEVELVALUE, 0, 50)

является аналогом:

property indicator_level1 50

Функция IndicatorSetInteger позволяет программным способом определять такие свойства индикатора как indicator_height, indicator_levelcolor, indicator_levelwidth, indicator_levelstyle.

При этом для уровней необходимо определить их количество, используя функцию IndicatorSetInteger. Например, для индикатора RSI это выглядит следующим образом.

Свойства индикатора:

//#property indicator_level1 30

//#property indicator_level2 70

//#property indicator_levelcolor Red

//#property indicator_levelstyle STYLE_SOLID

//#property indicator_levelwidth 1

Заменяем на код:

IndicatorSetInteger (INDICATOR_LEVELS,2);

IndicatorSetDouble (INDICATOR_LEVELVALUE,0,30);

IndicatorSetDouble (INDICATOR_LEVELVALUE,1,70);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,0,0xff0);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,1,0xff0);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,0,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,1,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,0,1);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,1,1);

Страница 11