- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnCalculate
Вызывается в индикаторах при наступлении события Calculate для обработки изменений ценовых данных. Существуют два варианта функции, в пределах одного индикатора нельзя использовать оба варианта.
Вычисление на основе массива данных
int OnCalculate(
|
Вычисления на основе таймсерий текущего таймфрейма
int OnCalculate(
|
Параметры
rates_total
[in] Размер массива price[] или входных таймсерий, доступных индикатору для расчета. Во втором варианте функции значение параметра соответствует количеству баров на графике, на котором он запущен.
prev_calculated
[in] Содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. Предназначено для пропуска в расчетах тех баров, которые не изменились с предыдущего запуска этой функции.
begin
[in] Значение индекса в массиве price[], с которого начинаются значимые данные. Позволяет пропустить в расчетах отсутствующие или начальные данные, для которых нет корректных значений.
price[]
[in] Массив значений для проведения вычислений. В качестве массива price[] может быть передана одна из ценовых таймсерий либо рассчитанный буфер какого-либо индикатора. Тип данных, которые были переданы на расчет, можно узнать с помощью предопределенной переменной _AppliedTo.
time{}
[in] Массив со значениями времени открытия баров.
open[]
[in] Массив со значениями цен открытия.
high[]
[in] Массив со значениями максимальных цен.
low[]
[in] Массив со значениями минимальных цен.
close[]
[in] Массив со значениями цен закрытия.
tick_volume[]
[in] Массив со значениями тиковых объемов.
volume[]
[in] Массив со значениями торговых объемов.
spread[]
[in] Массив со значениями спреда для баров.
Возвращаемое значение
Значение типа int, которое будет передано в качестве параметра prev_calculated при последующем вызове функции.
Примечание
Если функция OnCalculate() возвращает нулевое значение, то в окне DataWindow клиентского терминала значения индикатора не показываются.
Если с момента последнего вызова функции OnCalculate() ценовые данные были изменены (была загружена более глубокая история или были заполнены пропуски истории), то значение входного параметра prev_calculated будет установлено в нулевое значение самим терминалом.
Чтобы определить направление индексации в массивах time[], open[], high[], low[], close[], tick_volume[], volume[] и spread[], необходимо вызывать функцию ArrayGetAsSeries(). Чтобы не зависеть от умолчаний, необходимо безусловно вызывать функцию ArraySetAsSeries() для тех массивов, с которыми предполагается работать.
При использовании первого варианта функции выбор необходимой таймсерии или индикатора в качестве массива price[] осуществляется пользователем на вкладке Parameters при запуске индикатора. Для этого необходимо указать нужный элемент в выпадающем списке поля "Apply to".
Для получения значений пользовательского индикатора из других mql5-программ используется функция iCustom(), возвращающая хэндл индикатора для последующих операций. При этом также можно указать необходимый массив price[] или хэндл другого индикатора. Этот параметр должен передаваться последним в списке входных переменных пользовательского индикатора.
Необходимо использовать связь между значением, возвращаемым функцией OnCalculate(), и вторым входным параметром prev_calculated. Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. Это позволяет реализовать экономные алгоритмы расчета пользовательского индикатора с тем, чтобы избежать повторных расчетов для тех баров, которые не изменились с предыдущего запуска этой функции.
Пример индикатора
//+------------------------------------------------------------------+
|
Смотри также
ArrayGetAsSeries, ArraySetAsSeries, iCustom, Функции обработки событий, Выполнение программ, События клиентского терминала, Доступ к таймсериям и индикаторам