Тенденция на рынке «Большого пирога» и «Двух пирогов», произошедшая вчера вечером, оказалась очень своевременной: уже давно она не была такой гладкой.
На этот раз давайте поговорим о том, как использовать исторические записи транзакций B.
Представители B'an поделились большим количеством данных о транзакциях. Есть страница на Github, где можно подробно просмотреть, какие категории данных доступны и как их загрузить. Здесь я в основном рассказываю о загрузке, организации и использовании агрегированных записей транзакций aggTrades.
aggTrades — это запись транзакции после агрегации, то есть Binance объединяет несколько последовательных транзакций, выполненных в одно и то же время, в одном направлении и по одной и той же цене, в одну запись, похожую на K-линию, но только с одной ценой и без самая высокая цена, самая низкая цена и так далее. Например, если на рынке размещен большой ордер и на его съедание размещено множество мелких ордеров, то эти ордера, поступившие одновременно за очень короткое время (миллисекунды), будут агрегированы вместе. Или это может быть порядок, который механизм сопоставления может сопоставить одновременно.
Преимущество данных aggTrades заключается в том, что они могут содержать записи транзакций на уровне миллисекунд, но не имеют такого большого объема данных, как чистые сделки (то есть самые оригинальные данные, не агрегированные по одной и той же цене), что является хороший компромисс для высокочастотных данных.
Обычно квазивысокочастотные стратегии используют такие агрегированные данные. Те, кто действительно высокочастотный, обычно используют данные о сделках и стаканах.Объем данных очень большой и их очень неудобно обрабатывать.Если они не используются, то нет необходимости. Не только потребляет ресурсы, но и увеличивает сложность программирования.
aggTrades можно использовать для синтеза коротких К-линий любого уровня, например, коротких К-линий продолжительностью 5, 10 и 15 секунд. Такие К-линии по-прежнему можно использовать для некоторых внутридневных торговых стратегий.
Например, ниже приведена k-линия 1-секундного уровня, опубликованная ранее.

Есть еще высокочастотный арбитраж, на обычном арбитраже сейчас сложно заработать, да и очень рискованно, если частота выше, то могут быть какие-то возможности.
Такого рода потиковые данные также можно использовать для синтеза альтернативных K-линий, таких как равные бары и т. п. Использование aggTrades гораздо точнее, чем использование минутных K-линий. Стратегия CTA, созданная таким образом, может быть по сравнению с обычной стратегией K-line. О том, как синтезировать такой брусок, я, возможно, напишу в следующих нескольких статьях.
Далее следует введение кода (большая часть кода находится во вложении, поскольку он слишком большой и длинный, в тексте его выкладывать не буду). Код загрузки — это пример Binance, но с некоторыми небольшими изменениями, а также мой код обработки.
Вот пример ежемесячных данных (Binance также предоставляет ежедневные данные). Весь код однопоточный и выполняется синхронно, без асинхронной или многопоточной обработки. Поскольку такие загрузки выполняются раз в месяц или n дней, вы можете просто подождать некоторое время, и нет необходимости усложнять задачу.
Как правило, нет проблем с использованием более старых данных для базового тестирования на истории, поскольку высокочастотное тестирование на данных в основном играет аналитическую роль и в основном зависит от фактической цены, поскольку проскальзывание может быть большим или отложенный ордер не завершен, и последующий заказ не был пойман, обмен задержался и т.д.
Но позже у меня также есть код для загрузки данных в реальном времени, то есть для загрузки данных aggTrades за день, чтобы мгновенно проверить пропущенные рыночные цены. Ежедневные данные Binance доступны только с задержкой в несколько дней. Если вы хотите использовать его срочно, вам придется просканировать его самостоятельно, используя API обмена.
1 загрузка
Первая часть кода — это два файла agg.py и Utility.py, а затем используйте
python3 agg.py -y 2022 -m 6 -t um -folder/указанный вами путь
Вот пример команды для загрузки всех данных aggTrades по бессрочным контрактам за июнь 2022 года. Обычно загрузка занимает около десяти минут. Данные загружаются в сжатом виде, поэтому следующим шагом будет их распаковка.
2. Разархивируйте
Для распаковки используйте файл unzip.py. Это очень короткий код, содержащий всего две функции: одна для распаковки ежемесячных данных, а другая — для распаковки ежедневных данных.
После извлечения zip-файла он становится CSV-файлом. Проблема с файлами CSV заключается в том, что они занимают больше места на жестком диске и медленнее загружаются. Итак, следующим шагом будет преобразование файла csv в файл рассола. Вы можете сжимать или не сжимать в зависимости от вашей ситуации. Если ваш жесткий диск большой, рекомендуется не сжимать его.Как правило, устойчивый объем данных составляет около 50 ГБ в месяц, поэтому это зависит от вашей ситуации. Как правило, вы можете купить более быстрый внешний жесткий диск SSD.В настоящее время 1 ТБ стоит всего несколько сотен юаней, что уже дешево.Он также очень быстро загружается во время тестирования на истории.
3. Преобразование сжатия в рассол
Код преобразования находится в csv_to_pkl.py. Как упоминалось выше, после конвертации его легче сохранить и использовать.
После конвертации я вручную удалил файл csv, иначе он занял бы жесткий диск. Кода для реализации этого шага не существует. Как упоминалось ранее, это очень низкочастотные операции, и их не нужно полностью автоматизировать. В примере кода я использую сжатие gzip уровня 2. Обычно после сжатия данные за один месяц занимают менее 10 ГБ.
CSV не только занимает место, но и медленно загружается. Рекомендуется использовать формат рассола. В целом его производительность хорошая, но главное — хорошая совместимость. Если вы хотите использовать облачные серверы или многие другие пакеты с открытым исходным кодом, они более совместимы, чем перо и тому подобное.
Хорошо, теперь, когда данные готовы, можно приступать к изучению стратегий.
4. Мгновенная загрузка данных
Как упоминалось ранее, данные на сервере данных Binance отстают на один или два дня. Если вам нужно проверить, как ваша стратегия будет работать в текущих рыночных условиях, но вы не опубликовали реальную цену определенной валюты вовремя, вы можете использовать следующий код, чтобы загрузить aggTrades обратно на указанное время. Обычно я использую его для загрузки данных за текущие 12 часов, чтобы увидеть, как стратегия может работать.
Если используется следующий код, его необходимо изменить на самое позднее время начала.

Загруженные данные выглядят следующим образом. Вы можете обратиться к документации Binance и недавним транзакциям (накоплениям), чтобы увидеть их конкретное значение.

Имея такие необработанные данные, вы можете использовать df.resample(bar_size).agg(), чтобы агрегировать их в k-строку любого уровня, которая вам нужна, и делать все, что захотите.
наконец
По сути, это подготовка данных aggTrades, которые я использовал ранее. Сегодняшние стратегии становятся все более объемными, и на основе более детальных данных можно разработать больше категорий стратегий. Взаимодополняемость стратегий является ключом к мультистратегии.
Если вам нужен приведенный выше код, вы можете связаться с нами, чтобы получить его.