⚠ Важно: Остерегайтесь манипуляций в бэктестах
К сожалению, существуют мошеннические схемы, при которых разработчики встраивают в советник скрытую логику, позволяющую управлять тем, в какие исторические периоды он торгует, а в какие — нет.
Такая манипуляция может выборочно включать или отключать торговлю в определённые даты, создавая искусственно впечатляющую историю тестирования.
В результате стратегия выглядит крайне прибыльной в тестере стратегий, хотя реальная эффективность не соответствует показанной.
Хорошая новость: подобную манипуляцию очень легко выявить, если знать, что именно проверять.
Сдвигая исторические данные на другой временной период (с сохранением структуры дней недели), можно быстро проверить — действительно ли советник адаптируется к рынку или же опирается на жёстко прописанные фильтры дат.
Представленные ниже скрипты позволяют выполнить такую проверку безопасно и самостоятельно.
📌 Обзор
Данные скрипты позволяют сдвигать даты в CSV-файлах MQL5 (как формата Bars, так и Ticks) на заданное количество недель с сохранением дня недели.
Это особенно полезно для бэктестинга и анализа исторических данных, когда требуется перенести историю в другой временной период.
✨ Основные возможности
- Поддержка форматов Bars (OHLC) и Ticks (Bid/Ask)
- Сдвиг по неделям (понедельник → понедельник)
- Поддержка сдвига вперёд и назад
- Работа с большими файлами (>3GB)
- Отображение прогресса при длительной обработке
- Автоматическое определение формата файла
- Сохранение кодировки и окончания строк
📦 Доступные версии
🐍 Версия на Python
- shift_dates.py
🖥 Версия PowerShell (Windows)
- shift_dates.ps1 – см. в комментариях
🚀 Batch-запуск
- shift_dates.bat – см. в комментариях
⚙ Требования
Python
- Python 3.x
- Дополнительные пакеты не требуются
PowerShell
- Windows PowerShell 5.1 или PowerShell 7+
- Дополнительные модули не требуются
▶ Использование
Python
Базовый запуск:
python shift_dates.py
С указанием файла:
python shift_dates.py filename.csv
PowerShell
.\shift_dates.ps1
.\shift_dates.ps1 filename.csv
📄 Поддерживаемые форматы
Bars (OHLC)
<DATE> <TIME> <OPEN> <HIGH> <LOW> <CLOSE> <TICKVOL> <VOL> <SPREAD>
2020.01.02 01:00:00 1517.97 1521.37 1517.95 1518.41 3598 0 2
Ticks (Bid/Ask)
<DATE> <TIME> <BID> <ASK> <LAST> <VOLUME> <FLAGS>
2026.02.05 01:00:00.523 4965.59 4968.23 6
Формат определяется автоматически по заголовку файла.
🧠 Принцип работы
- Поиск файла – сканируются CSV-файлы (кроме *_shifted.csv)
- Выбор файла – автоматический или интерактивный
- Определение формата – Bars или Ticks
- Обработка дат – используется timedelta(weeks=N)
- Выходной файл – создаётся файл с суффиксом _shifted.csv
📊 Производительность
- <100MB: обработка за секунды
- 1–3GB: несколько минут (с индикатором прогресса)
- >3GB: оптимизированная буферизация (1MB блоки)
📌 Типовые сценарии использования
- Проверка стратегий на разных периодах
- Сравнение год к году (сдвиг на 52 недели)
- Выравнивание данных из разных источников
- Проверка на манипуляции датами
⚠ Ограничения
- Поддерживается только формат YYYY.MM.DD
- Версия PowerShell может иметь ограничения >2GB
- Сдвиг только по неделям
- Обрабатывается один файл за раз
💡 Рекомендации
- Всегда делайте резервную копию исходного файла
- Сначала протестируйте на небольшом файле
- Для больших файлов используйте Python-версию
- Проверьте выходной файл перед импортом в MT5


