void OnStart() { ResetLastError(); MqlTick ticks[]; datetime dt1 = (TimeCurrent() - 900) * 1000, dt2 = TimeCurrent() * 1000; int received = CopyTicksRange(Symbol(), ticks, COPY_TICKS_ALL, dt1, dt2); if (received > 0) { double min = INT_MAX; double max = 0; for(int i = 0; i < received; i++) { if (ticks[i].bid > 0.0) { if (ticks[i].bid > max) { max = ticks[i].bid; } if (ticks[i].bid < min) { min = ticks[i].bid; } } } double sym_point = SymbolInfoDouble(Symbol(), SYMBOL_POINT); if (sym_point > 0.0) { Comment("\nmax = " + DoubleToString(max) + "\nmin = " + DoubleToString(min) + "\nsym_point = " + DoubleToString(sym_point) +"\ndev = " + DoubleToString(double(max - min) / double(sym_point)) + "\nGetLastError = " + IntegerToString(GetLastError()) + "\nreceived = " + IntegerToString(received)); } } }Подскажите, как правильно пользоваться CopyTicksRange
Ilnur Khasanov:
Тоже что то не понял. На демо счете от метаквотов на Si-6.18, например, не правильно показывает.. На eurusd - вроде правильно.. Причем, это не в тестере
Подскажите, как правильно пользоваться CopyTicksRange
datetime dt1 = (TimeCurrent() - 900) * 1000, dt2 = TimeCurrent() * 1000;
Столкнулся с такой проблемой, что при подсчете дельты за свечу, в тестере стратегий сбиваются тиковые данные. Функцию прикладываю
copied_ticks=CopyTicksRange(Symbol(),CD_ticks,COPY_TICKS_TRADE,1000*(ulong)CD_time,1000*(ulong)(CD_time+PeriodSeconds(_Period)));
Это что такое Вы со временем хитрое вытворяете?
Зачем Вы ищите тики в далеком будущем , а именно примерно в 50450 году?
Это что такое Вы со временем хитрое вытворяете?
Зачем Вы ищите тики в далеком будущем , а именно примерно в 50450 году?
Покажите, плз, строчку кода как брать за последние n секунд.
Сори, за нехороший код... Я пробовал разные варианты. В CopyTicksRange в миллисекундах надо указывать, указывал в его параметрах умноженное на 1000 - результат такой же..
Ой, это я сори. Был не прав. Забыл что там миллисекунды.
может так без последней даты будет лучше, т.к. TimeCurrent() это время в секундах и мы можем потерять тики пришедшие за остаток округленной секунды:
int N=900; ulong dt1 = 1000*(TimeCurrent()-N); int received = CopyTicksRange(Symbol(), ticks, COPY_TICKS_ALL, dt1);
Тоже что то не понял. На демо счете от метаквотов на Si-6.18, например, не правильно показывает.. На eurusd - вроде правильно.. Причем, это не в тестере
Подскажите, как правильно пользоваться CopyTicksRange
Да, действительно, проблема существует. На Si-6.18 CopyTicksRange жестко врет.
Может быть проблема, что это скрипт. Сейчас не могу проверить, т.к. нет котировок по этому символу. Нужно попробовать CopyTicksRange на индикаторе когда пойдут котировки.
Какой сервер? MQ-Demo?
На демо-счете от MQ тиковые данные поступают с некорректными флагами! Не используйте его для работы с торговыми тиками.
Какой сервер? MQ-Demo?
На демо-счете от MQ тиковые данные поступают с некорректными флагами! Не используйте его для работы с торговыми тиками.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся с такой проблемой, что при подсчете дельты за свечу, в тестере стратегий сбиваются тиковые данные. Функцию прикладываю
При дальнейшей распечатке получалось так, что первый копируемый тик становился не в начале выбранного таймфрейма, а по сути с первого дня тестирования.
Понять не могу, то ли у меня какая-то ошибка, или это сбой в тестере стратегий в тиковых данных.