Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2000
- Рейтинг:
- Опубликован:
- 2021.12.24 21:09
- Обновлен:
- 2022.01.14 18:27
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Назначение
Скрипт позволяет загружать тиковые или баровые данные из файлов формата CSV из архивов истории биржи Binance в пользовательский символ Metatrader 5 в том случае когда прямое получение данных через API громоздко или нежелательно.
Внимание: скрипт не синхронизирует данные в реальном времени, а предназначен только для разовой загрузки истории, для полноценной синхронизации следует использовать другие решения!
Форматы файлов данных описаны здесь: https://github.com/binance/binance-public-data/
Данные истории доступны здесь: https://data.binance.vision/?prefix=data/futures/
Параметры
- tickmode - режим загрузки тиков (true) либо баров (false)
- symbol - символ в который следует загрузить данные
- threshold - пороговое значение изменений цены для разрядки тиков
- ticksize - размер тика контракта
- timeframe - целевой таймфрейм (для баров)
- barvolume - принудительная перезапись тикового объема
- cleanup - предварительная очистка
Использование
При запуске скрипта открывается окно, в котором нужно выбрать файлы данных для загрузки: файлы с тиками если выбран режим tickmode=true либо файлы с барами если выбран режим tickmode=false, далее скрипт будет последовательно обрабатывать все файлы, отмечая свою активность комментарием на экране и в логе, до тех пор пока не закончит загрузку.
Пользовательский (custom) символ должен быть заранее создан самостоятельно с правильными настройками.
Файлы данных должны быть скопированы в папку MQL5\Files чтобы скрипт смог их увидеть.
Файлы данных
Скрипт может загружать дневные (daily) или месячные (monthly) файлы данных из соответствующих каталогов.
Для загрузки тиковых данных следует скачивать файлы-таблицы trades, например: BTCUSDT-trades-2021-11.
Для загрузки баровых данных следует скачивать файлы-таблицы klines, например: BTCUSDT-1m-2021-11.
Разрядка тиков
Поскольку тиковые данные довольно большие и в них есть множество микро-колебаний цен, то для уменьшения объема используется разрядка, а именно: если изменения цены меньше чем заданное пороговое значение параметром threshold, то эти тики игнорируются, но их объем суммируется, и записывается только последний новый тик, изменение цены которого превысит значение threshold.
За счет разрядки тиков экономится место на диске, число тиков может уменьшиться в разы, без существенной потери качества, и улучшается скорость тестирования торговых советников.
Разрядка выполняется раздельно для цен bid и ask.
Ограничения и допущения для тиковых данных
При загрузке тиковых данных важна интерпретации таблицы сделок (trades) для определения стороны сделки (buy/sell) для того чтобы понять какой это был тик ask или bid, с учетом следующих допущений:
Если поле isBuyerMaker=true, то это означает, что ордер принадлежал тому, кто был на стороне покупки, некоторое время находился в качестве заявки в книге заявок (увеличивал ликвидность), а затем другой участник вошел и немедленно забрал эту заявку. Таким образом, эта конкретная сделка теперь будет квалифицироваться как продажа, и наоборот, если isBuyerMaker=false, тогда сделка будет квалифицироваться как покупка.
Строго говоря, из таблицы сделок мы можем знать только цену last, но не состояние стакана, поэтому трактовка таблицы сделок (trades) это лишь приближение к пониманию какие были цены ask и bid в ближайшие моменты времени.
Также, судя по данным истории, возможна ситуация, когда после длительной серии покупок, сдвигающих рынок вверх, случается отдельная сделка на продажу, но по цене еще выше всех предыдущих (или наоборот после серии продаж случается покупка ниже всех предыдущих) и тогда получается как будто бы bid>ask, что конечно же неверно, потому что мы не знаем состояние стакана (DOM) в этот момент.
Чтобы разрешить эту ситуацию скрипт записывает разницу (спред) между bid и ask равную одному тику, параметр ticksize, просто потому что из таблицы сделок (trades) нельзя сказать какой был спред в тот момент.
Возможно это не самая лучшая и не самая правильная интерпретация данных, и возможно будут предложены другие более эффективные алгоритмы.
Загрузка баровых данных
Должно быть самоочевидно, что баровые данные всегда хуже тиковых данных для целей тестирования, так как тики в барах при этом эмулируются в тестере (не являются реальными), и прежде чем использовать баровые данные нужно убедиться что торговая идея не слишком чувствительна к тикам, иначе результаты тестирования будут недостоверны!
Обычно всегда следует выбирать детализацию M1 (1 минута) оставляя значение параметра timeframe=1 по умолчанию и загружать соответствующие файлы с минутными данными.
Следует иметь в виду, что данные объемов в исходных файлах имеют тип double, но вынужденно преобразуются к целочисленному long.
Тиковый объем заполняется значением "Number of trades" - число сделок, но иногда это число слишком велико или слишком мало, что неудобно для тестирования, поэтому можно переопределить тиковый объем для каждого бара с помощью параметра barvolume.
Предварительная очистка истории
Параметр cleanup позволяет предварительно очистить историю для инструмента перед загрузкой данных.
Прочие замечания
Скрипт служит только как быстрое и простое решение для загрузки, чтобы быстро проверить какие-то торговые идеи на данных биржи Binance, скрипт не позиционируется как универсальный загрузчик, но при желании можно подправить форматы данных под другие источники.
![Two Stochastic Custom Filling](https://c.mql5.com/i/code/indicator.png)
Две линии 'Main' от двух индикаторов iStochastic (Stochastic Oscillator, STO) с заливкой областей между линиями
![Sma with NET EA](https://c.mql5.com/i/code/expert.png)
Простая стратегий на базе пользовательского индикатора 'Sma with NET' - в рынке всегда одна позиция, нет ни Стоп лосс, ни Тейк профит, ни Трейлинга. Торгуем по смене цвета индикатора
![Time interval](https://c.mql5.com/i/code/indicator.png)
Линия между заданными часами по цене 'High' на таймфрейме 'Timeframe'
![Spread Control 3](https://c.mql5.com/i/code/indicator.png)
Просмотр спреда: максимальный и минимальный спред (используется CopyTicksRange и поиск) и значение массива spread[] (берётся из Oncalculate)