Всем привет! Подскажите что за колдунство происходит в MQL5.
Такой код будет ждать нового тика чтобы посчитаться:
У меня к вам вопрос: как вы вставляли код? Просто хочу понять, откуда лишние переносы строки. Откуда копипастили?
а, я сначала накидал просто как текст, не знал что тут можно просто "alt+s" тыкнуть. Ну и потом просто скопировал и вставил. По идее компилироваться должно.
upd. криво вставлял, короче)
Прикол в том: зачем вам первый запрос в функции, если вы возвращаете значение, полученное во втором запросе?
Даже в "просто пример" нужно делать все правильно.
Теперь еще раз о "проблеме". Обращение в базу должно выполняться ОДИН раз в пределах тика. А дальше уже работать с полученными данными так, как требует ваш алгоритм. Поучение данных - это трудоемкая операция, поэтому разработчики и вводят ограничение ОДИН ТИК = ОДНО ОБРАЩЕНИЕ. Если не ввести такое ограничение, то найдутся "умники", которые в бесконечном цикле на каждой итерации будут запрашивать данные. В результате рухнет сервер. Теперь понятно?
Ситуация, с которой вы столкнулись, относится к вашему алгоритму, а не к платформе и разработчикам. :)
Т.е. MqlRates обращается непосредственно к серверу, а не к данным в терминале?
Так я, в принципе, могу накопипастить кучу всего, просто меняя название переменной "MqlRates" типа:
MqlRates rates[]; int Arr1 = CopyRates(_Symbol, PERIOD_CURRENT, time, time, rates); MqlRates rates1[]; int Arr2 = CopyRates(_Symbol, PERIOD_CURRENT, time, time, rates1); MqlRates rates2[]; int Arr2 = CopyRates(_Symbol, PERIOD_CURRENT, time, time, rates2); // ... // ... MqlRates ratesN[]; int Arr2 = CopyRates(_Symbol, PERIOD_CURRENT, time, time, ratesN);
и грохнуть их сервер? (данный код будет выполняться в один тик)
Просто мне кажется что данное поведение несколько странное (я его не понимаю). Если бы CopyRates или MqlRates срабатывали только один раз за тик - я бы смирился. Но нет, они срабатывают странно. А в третьем примере вообще колдунство - там переменная локальная (и, как я понимаю) каждый раз должна создаваться заново. Но не создается.
Мне кажется - после работы с ней её нужно удалять, но гугл не захотел мне подсказывать как удалять подобные штуки. delete() и ZeroMemory() не подходят.
Даже в "просто пример" нужно делать все правильно.
Камон, я ща просто отрдактирую вопрос и вообще буду ретёрнить 0
upd. Как сделать так, чтобы функция TakeArraySize срабатывала без ожидания следующего тика при повторном вызове?
Не воспроизвести.
Всем привет! Подскажите что за колдунство происходит в MQL5.
запрос не корректный по своей сути:
CopyRates(_Symbol, PERIOD_CURRENT, time, time, rates);
Обращение по начальной и конечной датам требуемого интервала времени int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период datetime start_time, // с какой даты datetime stop_time, // по какую дату MqlRates rates_array[] // массив, куда будут скопированы данные );
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Подскажите что за колдунство происходит в MQL5.
Такой код будет ждать нового тика чтобы посчитаться:
А этот код выполнится нормально во время одного тика:
А, да, даже если просто два раза подряд вызвать "TakeArraySize" (как в следующем куске кода) мы все равно будем ждать один тик
В чем прикол? Как это можно исправить? Ну или что я делаю не так в данном примере?
Заранее спасибо.
upd. Как сделать так, чтобы функция TakeArraySize срабатывала без ожидания следующего тика при повторном вызове?