Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
у меня такая конструкция в эксперте определяла новый бар:
теоретически работать не должно, но работает даже при синхронизации данных с сервером (перерисовка)
ЗЫ: на последних билдах МТ4 не проверял
а у вас сложности с левой (datetime curbar) или правой (Time[0]) часть этой операции?
Уже никаких) Погуглил и успешно выяснил, что Time[] - это массив, элементами которого являются моменты появления баров на графике.. Только сомнения есть по поводу этого куска теперь:
if(lastbar!=curbar){
lastbar=curbar;
return (true); }
else return(false);
Не понимаю логики. Например, рассмотрим первый запуск программы: lastbar = 0; curbar = 1823589823 (к примеру. Это ведь кол-во секунд, прошедшее между 01.01.1970 и появлением последнего бара.
lastbar, как можно увидеть, не равен curbar, поэтому вернётся true. Хотя появлением нового бара там даже и не пахло вроде..
В общем, не могли бы вы пояснить, пожалуйста, как это работает?.
Ааа, нет, дошло, наконец) При первом запуске программы мы пишем в переменную время появления последнего бара, а потом уже, можно сказать, начинаем работать, то есть отлавливать новые бары.
Кстати, переменная lastbar не должна ли быть глобальной? Она же, по-моему, уничтожается каждый раз при завершении работы функции NewBar().
static
Будет, так же, как и static, но это - некорректное использование памяти. Глобальные переменные предназначены исключительно для передачи значений в специальные функции, любое другое их использование - забивание гвоздей ноутбуком :) (чуть не сказал - логарифмической линейкой, но побоялся оказаться непонятым).
Я знаю, что такое логарифмическая линейка :) Еще не так много лет прошло со времен их использования.. Но это уже оффтоп. Спасибо за помощь)
Проще данного метода у меня нет.
Отслеживает время открытия текущего бара и при каждом тике сравнивает их.
double lastTime = 0;
void OnTick() {
if(isNewBar()){
Print("New Bar");
}
}
bool isNewBar() {
double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);
if(lastTime != thisTime) {
lastTime = thisTime;
return true;
}
return false;
}
Проще данного метода у меня нет.
Отслеживает время открытия текущего бара и при каждом тике сравнивает их.
Соглашусь насчёт отслеживания iTime нулевого бара, работает как часы... но зачем его приводить к типу double? 😯
Соглашусь насчёт отслеживания iTime нулевого бара, работает как часы... но зачем его приводить к типу double? 😯
Плюс, про глобал и статик уже разобрали выше.