Вы ведь запрашиваете данные на каком-то конкретном баре. Значит уже в этот момент (еще до получения результата) нужно понимать, насколько актуальные данные будут получены. Таким образом, это не проблема iCustom, а проблема подхода к его использованию.
Если нужно получить данные по сформированному бару (индекс 1 и более), то достаточно определить факт наличия нового бара.
Если получить нужно данные по текущему бару (индекс 0), то решений достаточно много, в зависимости от того, какова сама стратегия.
Ну а универсальное решение - запоминать время последнего полученного значения.
- www.mql5.com
Вы ведь запрашиваете данные на каком-то конкретном баре. Значит уже в этот момент (еще до получения результата) нужно понимать, насколько актуальные данные будут получены. Таким образом, это не проблема iCustom, а проблема подхода к его использованию.
Если нужно получить данные по сформированному бару (индекс 1 и более), то достаточно определить факт наличия нового бара.
Если получить нужно данные по текущему бару (индекс 0), то решений достаточно много, в зависимости от того, какова сама стратегия.
Ну а универсальное решение - запоминать время последнего полученного значения.
я всегда запрашиваю 0-й бар в iCustom. Но в буфере уже есть цена сигнала. И проблема в том, что я не знаю во сколько она появилась, тик назад или час. Справедливо только при инициализации советника
я всегда запрашиваю 0-й бар в iCustom. Но в буфере уже есть цена сигнала. И проблема в том, что я не знаю во сколько она появилась, тик назад или час. Справедливо только при инициализации советника
Для начала, сравните iTime этого бара с TimeCurrent.
Дождитесь подгрузки истории.
И только потом смотрите индикаторы.
Для начала, сравните iTime этого бара с TimeCurrent.
Дождитесь подгрузки истории.
И только потом смотрите индикаторы.
вы не поняли сути проблемы.
я всегда запрашиваю 0-й бар в iCustom. Но в буфере уже есть цена сигнала. И проблема в том, что я не знаю во сколько она появилась, тик назад или час. Справедливо только при инициализации советника
Для решения этой проблемы нужно иметь тиковую историю. Тогда можно прогнать тики от начала бара до текущего момента. В итоге получится потиковое моделирование а-ля тестер. Довольно-таки сложная задача, хотя и выполнимая.
Скорее всего, тут нужно подойти с совершенно другой стороны. К примеру, в момент инициализации не стоит реагировать на уже состоявшийся сигнал, пропускаем его.
Другой вариант: разобраться в алгоритме индикатора и понять, как формируется этот сигнал. К примеру, если он формируется на основе пробоя какого-то уровня, то для исполнения пропущенного сигнала достаточно дождаться возврата цены к этому уровню.
- www.mql5.com
Для решения этой проблемы нужно иметь тиковую историю, имея которую можно прогнать тики от начала бара до текущего момента. В итоге получится потиковое моделирование а-ля тестер. Довольно-таки сложная задача, хотя и выполнимая.
Скорее всего, тут нужно подойти с совершенно другой стороны. К примеру, в момент инициализации не стоит реагировать на уже состоявшийся сигнал, пропускаем его.
Другой вариант: разобраться в алгоритме индикатора и понять, как формируется этот сигнал. Если он формируется на основе пробоя какого-то уровня, то для исполнения пропущенного сигнала достаточно дождаться возврата цены к этому уровню.
Ну речь идет о стороннем индикаторе. Как раз второй вариант - рабочий
вариант решения:
Объявляем две переменные для хранения цены сигнала
price1 - текущая цена
price2 - прошлая цена
Напомню время сигнала нам не известно.
При инициализации советника сохраняем признак инициализации и сохраняем первую цену сигнала сразу в обе переменные price1 и price2
Сделка открывается при price1 <> price2 . Произойдет это после получения цены нового сигнала
вы не поняли сути проблемы.
Ага.
Тогда запоминайте время появления сигнала в другом буфере этого же индикатора.
Или к исходникам нет доступа?
Тогда запоминайте время появления сигнала в другом буфере этого же индикатора.
Нет, тоже не выйдет, это нужно держать запущенный индикатор все время.
Тогда вариант с тиками и моделированием, да. Делал что-то похожее когда-то.
Суть в следующем - в советнике через iCustom возвращаются значение индикатора - цены сигнала на покупку (продажи) в буфере.
Задача: как отсечь "устаревший" по времени сигнал который вернул iCustom во время первого вызова, т.е. по историческим данным?
запомнить предыдущее значение и работать только по сменившемуся предыдущему
тогда вообще будет не важно - первый или второй вызов
например
Ind=iCustom....
if( prevInd!=Ind )
{
работаем
}
prevInd=Ind;
Ну в OnInit вставим строчку
Ind=iCustom....
Суть в следующем - в советнике через iCustom возвращаются значение индикатора - цены сигнала на покупку (продажи) в буфере.
Задача: как отсечь "устаревший" по времени сигнал который вернул iCustom во время первого вызова, т.е. по историческим данным?
Очень просто. Первый вызов производится в функции OnInit()
И все!!!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Задача: как отсечь "устаревший" по времени сигнал который вернул iCustom во время первого вызова, т.е. по историческим данным?