Советник запущен на M15. Я хочу получить значения iMA для бара 1 таймфреймов M30 и H1. Для этого я 2 раза вызываю iMA: для M30 и H1 соответственно.
- OnTick() начал выполняться в 11:59. Мне нужны значения iMA с баров 11:30 M30 и 10:00 H1 - бары с индексом 1 для этих таймфреймов
- Я вызываю iMA для М30 и получаю нужное мне значение для бара 11:30
- Прежде, чем я вызову iMA еще раз, приходит новый тик, который формирует новый бар H1 со временем открытия 12:00
- Я вызываю iMA для H1 и получаю значение для бара 11:00 вместо 10:00. По тому, что между двумя вызовами iMA пришел тик
И никак ведь не обработаешь эту ситуацию по тому, что нет возможности узнать, на каких данных вычислился индикатор - цитата сверху тому доказательство. Ладно машку можно самому посчитать. А если это пользовательский индикатор и исходника нет...
На сколько возможна такая ситуация? Кто-нибудь об этом задумывался?
А кто вам мешает определить номер бара по времени вместо указания конкретно первого бара?
А кто вам мешает определить номер бара по времени вместо указания конкретно первого бара?
Наверное, вы неправильно меня поняли. Мне не нужно время/номер бара. Я хочу, что бы индикаторы на разных таймфреймах вычислялись на одних данных.
Вот эта ситуация другими словами:
void OnTick() { double ma1M30 = iMA(_Symbol, PERIOD_M30, 14, 0, MODE_SMA, PRICE_CLOSE, 1); // На графике H1 1000 баров // Между этими вызовами приходит тик, который формирует новый бар на H1 double ma1H1 = iMA(_Symbol, PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1); // На графике H1 1001 бар }
Наверное, вероятность этого - как получить метеорит на голову. И никто об этом не задумывается вообще
Наверное, вы неправильно меня поняли. Мне не нужно время/номер бара. Я хочу, что бы индикаторы на разных таймфреймах вычислялись на одних данных.
Вот эта ситуация другими словами:
Наверное, вероятность этого - как получить метеорит на голову. И никто об этом не задумывается вообще
Я об этом и сказал. В этом случае вы берёте бар № 1, а если вырос новый бар, то вам надо брать бар № 2. Я и предложил по времени посчитать какой будет это бар, первый или второй.
Я об этом и сказал. В этом случае вы берёте бар № 1, а если вырос новый бар, то вам надо брать бар № 2. Я и предложил по времени посчитать какой будет это бар, первый или второй.
Понял, спасибо.
Я пришел к следующему:
- Запросить и сохранить время бара 0 для обеих таймфреймов
- Вычислить обе iMA
- Еще раз запросить время баров 0 и сравнить с тем временем, которое сохранили в пункте 1. Если совпадает - все ок. Не совпадает - счесть некорректными результаты вычислений пункта 2.
Понял, спасибо.
Я пришел к следующему:
- Запросить и сохранить время бара 0 для обеих таймфреймов
- Вычислить обе iMA
- Еще раз запросить время баров 0 и сравнить с тем временем, которое сохранили в пункте 1. Если совпадает - все ок. Не совпадает - счесть некорректными результаты вычислений пункта 2.
Боюсь, что не правильно поняли. Я имел ввиду функцию iBarShift()
Я правильно понял, но между вызовом iBarShift() и iMA() тоже может прийти новый тик😄
Я просто немного параноик, наверное😄 Ищу железобетонное решение)
P.S. Я крайне сомневаюсь, что даже целенаправленно когда-нибудь удалось бы поймать ситуацию, когда между двумя вызовами iMA/iCustom формируется новый бар на одном из таймфреймов. Поэтому, похоже, я занимаюсь решением проблем, которые существуют только у меня в голове.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5
Renat Fatkhullin, 2023.03.19 20:08
iCustom будет просчитан на тех данных, которые будут в главной базе терминала на этот момент.
Все процессы независимы/асинхронны и запрос ArrayCopy никак не связан с последующими операциями. То есть, ни терминал, ни среда исполнения MQL5 не "тормозят мир" во время OnXXXX обработчиков.
Советник запущен на M15. Я хочу получить значения iMA для бара 1 таймфреймов M30 и H1. Для этого я 2 раза вызываю iMA: для M30 и H1 соответственно.
И никак ведь не обработаешь эту ситуацию по тому, что нет возможности узнать, на каких данных вычислился индикатор - цитата сверху тому доказательство. Ладно машку можно самому посчитать. А если это пользовательский индикатор и исходника нет...
На сколько возможна такая ситуация? Кто-нибудь об этом задумывался?