Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 38
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Переходите на МТ5, где и спреды есть и история детальная и тестер на голову выше МТ4.
Для того, чтобы программно запросить и получить данные индикатора на нестандартном таймфрейме, недостаточно иметь сформированный (и обновляемый в реальном режиме) файл истории, необходимо ещё и открыть автономный график. Это серьёзно ограничивает возможности разработки без использования dll.
Прошу объяснить, я неправильно понимаю, или это неточное описание, или это баг в текущей версии:
Функции обработки событий
Необходимо отметить связь между значением, возвращаемым функцией OnCalculate() и вторым входным параметром prev_calculated. Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. Это позволяет реализовать экономные алгоритмы расчета пользовательского индикатора с тем, чтобы избежать повторных расчетов для тех баров, которые не изменились с предыдущего запуска этой функции.
Для этого обычно достаточно вернуть значение параметра rates_total, которое содержит количество баров при текущем вызове функции. Если с момента последнего вызова функции OnCalculate() ценовые данные были изменены (подкачана более глубокая история или были заполнены пропуски истории), то значение входного параметра prev_calculated будет установлено в нулевое значение самим терминалом.
Код:
#property strict
#define __VERSION__ "0.001"
#property version __VERSION__
#property description "Индикатор исследует динамику изменения значения переменной prev_calculated"
#property description "29.08.2014"
#property indicator_chart_window
int I;
int OnInit()
{
I=0;
return(INIT_SUCCEEDED);
}
int OnCalculate (const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
if (I<5)
{
I++;
return(0);
}
return(rates_total);
}
Скрины:
1.
2.
провозился кучу времени, пытаясь понять почему у меня не работает ObjectGetValueByTime.
оказывается в справке указано неверное число параметров. три вместо четырёх. https://docs.mql4.com/ru/objects/objectgetvaluebytime
как это достало...
Прошу объяснить, я неправильно понимаю, или это неточное описание, или это баг в текущей версии:
Функции обработки событий
Код:
#property strict
#define __VERSION__ "0.001"
#property version __VERSION__
#property description "Индикатор исследует динамику изменения значения переменной prev_calculated"
#property description "29.08.2014"
#property indicator_chart_window
int I;
int OnInit()
{
I=0;
return(INIT_SUCCEEDED);
}
int OnCalculate (const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
if (I<5)
{
I++;
return(0);
}
return(rates_total);
}
неправильное понимание для чего нужно rates_total
неправильное понимание для чего нужно rates_total
Безаппеляционно.
Если бы prev_calculated действительно возвращал результат OnCalculate на предыдущем вызове, то не было бы необходимости вводить ещё одну переменную, чтобы знать, что рассчёт на предыдущем вызове не состоялся из-за неготовности необходимых данных.
Безаппеляционно.
Если бы prev_calculated действительно возвращал результат OnCalculate на предыдущем вызове, то не было бы необходимости вводить ещё одну переменную, чтобы знать, что рассчёт на предыдущем вызове не состоялся из-за неготовности необходимых данных.
Первый параметр rates_total содержит количество баров, доступных индикатору для расчета, и соответствует количеству баров, доступных на графике.
Боюсь, мы с Вами не договоримся.
В общем-то я решил свою локальную задачу, тем не менее остаюсь при своём мнении, что фраза в справке
Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове.
не соответствует действительности.