разве проверка условий для открытия это не обращение к индикатору?
единственный момент что если на H1 и реже проверять новый бар, а там индикатор действительно заснул, то будет пропуск, на новом баре будут данные прошлого, редко но встречается, решение забыть раз и навсегда newbar
Есть базовая стратегия с одним условием, а есть дополнительная фильтрация, и если нет сигнала от базового условия, то и индикаторы фильтры не опрашиваются.
Есть базовая стратегия с одним условием, а есть дополнительная фильтрация, и если нет сигнала от базового условия, то и индикаторы фильтры не опрашиваются.
Т.е. опрашивать надо не реже, чем раз в час?
нет, это просто примерно, у меня нет таких проблем, если индикатор(график) проспал и бар не обновился в таблице, то один тик пропустится, на втором/третьем точно сработает..., если использовать newbar, то пропуск будет уже до следующего newbar...
нет, это просто примерно, у меня нет таких проблем, если индикатор(график) проспал и бар не обновился в таблице, то один тик пропустится, на втором/третьем точно сработает..., если использовать newbar, то пропуск будет уже до следующего newbar...
Я использую проверку на новый бар, иначе слишком большая нагрузка.
Я использую проверку на новый бар, иначе слишком большая нагрузка.
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
Можно посмотреть такую функцию определения нового бара, которая так криво работает?
один из вариантов newbar, остальные удалил вроде, еще 2-3 разных было
class CNewBar
{
protected:
datetime oldTime;
public:
bool NewBar(string symbol,ENUM_TIMEFRAMES timeframe)
{
//--- создаем переменную newtime(тип время), присваиваем в нее из функции SeriesInfoInteger дату открытия последнего бараdatetime newTime=datetime(SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE));
if(newTime!=oldTime && newTime)
{
oldTime=newTime; //обновим время прошлого бараreturn(true); // вернем функции NewBar true, появился новый барif(MQLInfoInteger(MQL_DEBUG))
Print("Новый бар",newTime,"старый бар",oldTime); // в режиме отладки, будет выводится сообщение о значениях времен баров
}
//--- иначе,return(false); // нового бара еще нет
};
//---- конструктор класса
CNewBar() {oldTime=NULL;}; // вызывается автоматический при создании Объекта проинициализируем m_prevtime в -1
};
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
У меня конструкция попроще, но тестировал - на неделю ставил - проблем не выявил с этим - данные каждую минуту писал.
//+-----------------------------------------------------------------+//| Возвращает TRUE, если появился новый бар на текущем ТФ - для стратегии//+-----------------------------------------------------------------+bool isNewBar_TF(ENUM_TIMEFRAMES TF)
{
datetime tm[];
staticdatetime prevBarTime_TF=0;
if(CopyTime(Symbol(),TF,0,1,tm)<0)
{
Print("%s CopyTime error = %d",__FUNCTION__,GetLastError());
}
else
{
if(prevBarTime_TF!=tm[0])
{
prevBarTime_TF=tm[0];
returntrue;
}
returnfalse;
}
returntrue;
}
Есть другое дело - индикаторы, которые никогда не рассчитываются на первом баре, и их я проверяю отдельно и, если данные не готовы - пропускаю тик.
А счетчик GetTickCount() - надо как то синхронизировать с открытием бара и он имеет свойство переполняться, т.е. работать будет не более 50 дней - потом компьютер надо перезагружать - не очень удобно для работы советников на выделенном компьютере - можно забыть это сделать.
разве проверка условий для открытия это не обращение к индикатору?
единственный момент что если на H1 и реже проверять новый бар, а там индикатор действительно заснул, то будет пропуск, на новом баре будут данные прошлого, редко но встречается, решение забыть раз и навсегда newbar
Есть базовая стратегия с одним условием, а есть дополнительная фильтрация, и если нет сигнала от базового условия, то и индикаторы фильтры не опрашиваются.
Т.е. опрашивать надо не реже, чем раз в час?
Есть базовая стратегия с одним условием, а есть дополнительная фильтрация, и если нет сигнала от базового условия, то и индикаторы фильтры не опрашиваются.
Т.е. опрашивать надо не реже, чем раз в час?
нет, это просто примерно, у меня нет таких проблем, если индикатор(график) проспал и бар не обновился в таблице, то один тик пропустится, на втором/третьем точно сработает..., если использовать newbar, то пропуск будет уже до следующего newbar...
нет, это просто примерно, у меня нет таких проблем, если индикатор(график) проспал и бар не обновился в таблице, то один тик пропустится, на втором/третьем точно сработает..., если использовать newbar, то пропуск будет уже до следующего newbar...
Я использую проверку на новый бар, иначе слишком большая нагрузка.
Я использую проверку на новый бар, иначе слишком большая нагрузка.
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
Можно посмотреть такую функцию определения нового бара, которая так криво работает?
в момент newbar
момент образования бара
один из вариантов newbar, остальные удалил вроде, еще 2-3 разных было
момент образования бара
один из вариантов newbar, остальные удалил вроде, еще 2-3 разных было
Ну, так класс криво написан. Чего же Вы от него ждёте?
Как это криво, пол дня все 3 терминала исправно открывают, и тут раз да проскочит бар, больше года не пользуюсь, сейчас может и поменялось что-то.
покажите где,
еще было несколько других вариантов и без, и из статей... и из форума примеры.
и с
SERIES_LASTBAR_DATEи просто по времени, разные были.
на рейтинг участника пожалуйста не смотрите)
у меня на одном компе, 3 копии терминала на разных счетах были пропуски сигнала то, на одном, то на другом терминале, принт показал что в момент newbar были данные прошлого бара, по этому сигнала не было, перепробовал все варианты newbar
помогло только вообще убрать newbar
пропускать часть тиков можно через static переменную и GetTickCount();
У меня конструкция попроще, но тестировал - на неделю ставил - проблем не выявил с этим - данные каждую минуту писал.
Есть другое дело - индикаторы, которые никогда не рассчитываются на первом баре, и их я проверяю отдельно и, если данные не готовы - пропускаю тик.
А счетчик GetTickCount() - надо как то синхронизировать с открытием бара и он имеет свойство переполняться, т.е. работать будет не более 50 дней - потом компьютер надо перезагружать - не очень удобно для работы советников на выделенном компьютере - можно забыть это сделать.