Ринкова тенденція минулої ночі для Big Pie і Two Pie була справді своєчасною. Такої гладкої тенденції не було вже давно.
Цього разу давайте поговоримо про те, як використовувати історичні записи транзакцій B.
Представники B'an поділилися багатьма даними про транзакції. Існує сторінка Github, де ви можете детально переглянути, які категорії даних доступні та як їх завантажити. Тут я в основному розповідаю про завантаження, організацію та використання агрегованих записів транзакцій aggTrades.
aggTrades — це запис транзакцій після агрегації, тобто Binance об’єднує кілька послідовних транзакцій, виконаних одночасно, в одному напрямку та за тією самою ціною, в один запис, подібний до K-лінії, але лише з однією ціною і без найвища ціна і так далі. Наприклад, якщо на ринку розміщено велике замовлення, і багато маленьких замовлень розміщено, щоб його з’їсти, тоді ці замовлення, які надходять одночасно за дуже короткий час (мілісекунди), будуть об’єднані разом. Або це може бути порядок, який відповідна система може відповідати одночасно.
Перевага даних aggTrades полягає в тому, що вони можуть мати записи транзакцій на рівні мілісекунд, але вони не мають такого великого обсягу даних, як чисті угоди (тобто найоригінальніші дані, не агреговані за однаковою ціною), що є хороший компроміс для високочастотних даних.
Як правило, квазівисокочастотні стратегії використовують такі агреговані дані. Ці дійсно високочастотні дані, як правило, використовують дані про операції та книги замовлень, і їх незручно обробляти. Це не тільки споживає ресурси, але й ускладнює програмування.
aggTrades можна використовувати для синтезу коротких K-ліній будь-якого рівня, таких як короткі K-лінії тривалістю 5, 10 і 15 секунд. Такі K-лінії все ще можна використовувати для деяких стратегій внутрішньоденної торгівлі.
Наприклад, нижче наведено k-рядок рівня 1 секунди, опублікований раніше.
Також є високочастотний арбітраж. Заробити на звичайному арбітражі зараз дуже ризиковано, можливо, є якісь можливості.
Такий тип даних можна також використовувати для синтезу альтернативних k-ліній, таких як рівні бари тощо порівняно зі звичайними стратегіями k-line. Я можу написати про те, як синтезувати цей вид батончика, у кількох наступних статтях.
Далі йде вступ до коду (більша частина коду знаходиться у вкладенні, тому що він занадто великий і довгий, я не буду розміщувати його в тексті). Код для завантаження є прикладом Binance, але з деякими невеликими змінами, і моїм кодом обробки.
Ось приклад місячних даних (Binance також надає щоденні дані). Весь код є однопоточним і виконується синхронно, без асинхронного або багатопотокового виконання. Оскільки такі завантаження виконуються раз на місяць або n днів, ви можете просто почекати деякий час, і не потрібно це ускладнювати.
Як правило, немає проблем із використанням старих даних для базового ретестування, тому що ретестування високочастотних даних в основному відіграє аналітичну роль і в основному залежить від фактичної ціни, оскільки прослизання може бути великим або відкладений ордер може не бути завершеним, і подальші дії. Замовлення не було отримано, обмін було відкладено тощо.
Але пізніше у мене також є код для завантаження даних у реальному часі, тобто завантаження даних aggTrades за день, щоб миттєво перевірити пропущені ринкові ціни. Щоденні дані Binance доступні лише з затримкою в кілька днів. Якщо ви хочете використати його терміново, ви повинні сканувати його самостійно за допомогою API обміну.
1 завантаження
Перша частина коду - це два файли agg.py і utility.py, а потім використовуйте
python3 agg.py -y 2022 -m 6 -t um -папка /вказаний шлях
Ось приклад команди для завантаження всіх даних безстрокового контракту aggTrades за червень 2022 року. Зазвичай завантаження займає близько десяти хвилин. Дані завантажуються стиснутими, тому наступним кроком є їх розпакування.
2. Розпакуйте
Щоб розпакувати, скористайтеся файлом unzip.py. Це дуже короткий код із двома функціями: одна для розпаковування місячних даних, а друга – для розпаковування щоденних даних.
Після розпакування zip-файлу він стає файлом CSV. Проблема з файлами csv полягає в тому, що вони займають більше місця на жорсткому диску і швидкість завантаження нижча. Тож наступним кроком є перетворення файлу csv у файл pickle. Ви можете стискати або не стискати відповідно до вашої власної ситуації. Якщо ваш жорсткий диск великий, рекомендується не стискати його. Загалом стабільний обсяг даних становить близько 50 ГБ на місяць, тому це залежить від вашої ситуації. Як правило, ви можете придбати швидший зовнішній жорсткий диск, 1 ТБ коштує лише кілька сотень юанів, і це також дуже швидко завантажується під час тестування.
3. Перетворення стиснення в маринування
Код перетворення знаходиться в csv_to_pkl.py. Як згадувалося вище, його легше зберегти та використовувати після перетворення.
Після перетворення я вручну видалив файл csv, інакше він займав би жорсткий диск. Немає коду для реалізації цього кроку. Як згадувалося раніше, це дуже низькочастотні операції, і їх не потрібно повністю автоматизувати. У прикладі коду я використовую стиснення gzip 2. Як правило, дані за один місяць становлять менше 10 ГБ після стиснення.
CSV не тільки займає місце, але й повільно завантажується. Рекомендується використовувати формат розсольника. Загалом його продуктивність хороша, але головне — хороша сумісність. Якщо ви хочете використовувати хмарні сервери або багато інших пакетів з відкритим кодом, вони більш сумісні, ніж перо тощо.
Гаразд, тепер, коли дані готові, можна починати вивчати стратегії.
4. Миттєве завантаження даних
Як згадувалося раніше, дані на сервері даних Binance відстають на один-два дні. Якщо вам потрібно перевірити ефективність вашої стратегії за поточних ринкових умов, але ви не опублікували реальну ціну певної валюти вчасно, ви можете використати наступний код, щоб завантажити aggTrades назад до вказаного часу. Зазвичай я використовую його для завантаження даних за поточні 12 годин, щоб побачити, як може працювати стратегія.
Якщо використовується наступний код, його потрібно змінити до останнього часу початку.
Завантажені дані виглядають так. Ви можете переглянути документацію Binance та останні транзакції (накопичення), щоб побачити їх конкретне значення.
З такими необробленими даними ви можете використовувати df.resample(bar_size).agg(), щоб агрегувати їх у будь-який потрібний k-рядок рівня, і ви можете робити все, що забажаєте.
нарешті
По суті, це підготовка даних aggTrades, які я використовував раніше. Сучасні стратегії стають все більш об’ємними, і можна розробити більше категорій стратегій, використовуючи більш детальні дані. Взаємодоповнюваність між стратегіями є ключем до мультистратегії.
Якщо вам потрібен код вище, ви можете зв’язатися з нами, щоб отримати його.