Криптоарбітраж із NetworkX і Python PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Криптоарбітраж із NetworkX і Python

Аналіз криптоданих з Coingecko API для створення сканера криптоарбітражу на python

Макклейн Маршалл

У співавторстві з Ісаак Рея

Фото Аліна Грубняк on Unsplash

Валютні ринки по всьому світу торгуються 24 години на добу в обсягах, значно вищих за облігації, акції чи ф’ючерси ринки. Учасники валютних ринків хеджують ризик або спекулюють на майбутніх змінах вартості валюти.

Іншим джерелом прибутку є використання короткострокових дисбалансів у валютних оцінках. Використовуючи блискавичні алгоритми, високочастотні трейдери визначають арбітражні можливості та швидко виконують серію обмінів, що призводить до невеликого прибутку. Дивіться це стаття від Інституту корпоративних фінансів для більш глибоких пояснень і прикладів.

Інститут корпоративних фінансів

Через високу конкуренцію та обсяг торгівлі на валютних ринках ці можливості є короткочасними, а прибутки мізерними. Хоча прибутки від валютного арбітражу можуть накопичуватися з часом завдяки великій кількості угод, подібна можливість існує на ринках криптовалюти, яка може бути навіть більш прибутковою.

Оскільки існує багато криптовалют для торгівлі, існує багато можливих комбінацій для перевірки арбітражних можливостей. Структура даних Graph (Network) ідеально підходить для відстеження різних обмінних курсів між монетами та швидкого визначення випадків дисбалансу, якими ми можемо скористатися. Щоб дізнатися більше про Graphs/Networks і пакети Python для роботи з ними, перегляньте це книга в Прагматичні програмісти серії.

Щоб створити графік для криптовалют, ми будемо використовувати пакет NetworkX. Це потужний інструмент, який дозволяє легко аналізувати монети, які нас цікавлять, і знаходити торгові можливості. По-перше, ми отримаємо курси криптовалюти з API CoinGecko. Потім ми ініціалізуємо графік і визначимо співвідношення (курси обміну) між кожною монетою, яка нас цікавить. Нарешті, ми прокрутимо всі шляхи від однієї монети до іншої та назад, щоб визначити можливості арбітражу.

Якщо у вас є досвід роботи з JSON API, Кобінко API відносно простий у використанні. За допомогою цього фрагмента коду я отримав поточні обмінні курси для п’яти різних монет (Bitcoin, Bitcoin Cash, Ethereum, Litecoin і EOS).

URL-адреса для виклику API виглядатиме приблизно так, залежно від монет, для яких ви хочете отримати дані:

https://api.coingecko.com/api/v3/simple/price?ids=bitcoin-cash,ethereum,bitcoin,litecoin,eos&vs_currencies=bch,eth,btc,ltc,eos

Використовуючи пакети Request і JSON для Python, ми можемо завантажити ці дані як словник із ключами для кожного шифру, який ми включили до нашого списку. Значення, пов’язане з кожним із цих ключів, є ще одним словником із записами про курси обміну для цієї валютної пари. Наприклад, для Bitcoin Cash ми отримуємо такий результат:

Це показує, що 0.25 Ethereum або 0.16 Bitcoin можна придбати за 1 Bitcoin Cash. З цими результатами для кожної з криптовалют ми готові визначити графік.

Кожна з монет представляє «вершину» на графіку, а обмінний курс між двома монетами є «ребром». Після ініціалізації порожнього об’єкта Graph ми визначаємо список кортежів для кожної пари монет і їх курс обміну в обох напрямках.

Список країв буде виглядати приблизно так:

З додаванням ребер до графіка ми готові шукати арбітражні можливості. Використовуючи функцію комбінацій із пакету itertools, ми визначаємо всі можливі пари монет. Потім ми використовуємо функцію all_simple_paths від NetworkX, щоб визначити всі можливі шляхи від першої монети до другої.

Наприклад, якщо ми розглядаємо Litecoin і Bitcoin Cash, існує багато можливих шляхів, враховуючи монети, які ми розглядаємо. Ми можемо просто купити Bitcoin Cash за Litecoin або ми можемо купити Bitcoin за Litecoin, а потім використовувати Bitcoin для покупки Bitcoin Cash.

Ми проходимо кожен шлях і виконуємо наведені нижче обчислення на кожному кроці. Спочатку ми припускаємо, що починаємо з однієї з початкових монет. Ми множимо це число на обмінний курс від однієї монети до іншої, поки не дійдемо до кінця шляху.

Наприклад, якщо ми починаємо з одного Bitcoin Cash, ми можемо купити 0.24 Ethereum, тому ми множимо 1 x 0.24197529 = 0.24197529. Обмінний курс Ethereum до Bitcoin становить 0.06, тому ми множимо 0.24197529 x 0.06484324 = 0.0156904618035396. Це значення дуже близьке до обмінного курсу між Bitcoin Cash і Bitcoin, але не зовсім те саме.

На цьому етапі ми перевіряємо зворотний шлях, тобто від Bitcoin до Ethereum до Bitcoin Cash, помноживши 1 x 15.414849 x 4.132739 = 63.705547641411. Ми множимо ці два результати разом для остаточної оцінки шляху (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Наскільки мені відомо, немає визначеного терміну для цього значення. Ми можемо назвати це фактором арбітражу.

Якби обмінні курси були синхронізовані, коефіцієнт арбітражу був би рівно один. Значення, менше за одиницю, означає, що ми пройшли серію обмінів і закінчили з меншим, ніж почали. Отже, ми шукаємо, щоб це значення було більше одиниці, оскільки здійснення обміну призведе до прибутку. Якби ми знайшли коефіцієнт арбітражу 1.005 у нашому попередньому прикладі, це означало б, що, пройшовши цей шлях обміну від однієї криптовалюти до іншої та назад, ми могли б отримати 0.005 Bitcoin Cash (вартістю близько 3 доларів США).

Можливості арбітражу з’являються та зникають для різних криптовалют протягом дня, і можна перевірити всі комбінації для кількох монет, не знаходячи коефіцієнт арбітражу, який значно перевищує одиницю. Однак я бачив коефіцієнти арбітражу вище 1.01, що вказує на те, що 1% прибутку можна отримати за лічені моменти через прості обміни криптовалютою.

Використовуючи три описані вище функції, ми можемо створити сканер криптографічного арбітражу.

Валютний арбітраж є добре відомим і малоризикованим методом торгівлі, але ринок традиційних валют дуже ефективний і конкурентний. Більші можливості існують у криптовалютах, і кілька простих інструментів Python можуть допомогти полегшити стратегію. NetworkX можна використовувати для створення графіка та швидкого пошуку арбітражних можливостей.

Проте ще є труднощі, які потрібно подолати. По-перше, плата за торгівлю криптовалютами може бути дуже високою. Це означає, що будь-які дисбаланси між криптовалютами мають бути значними, щоб бути прибутковими. У той же час стратегія буде найбільш ефективною, якщо автоматизована і налаштована на періодичне або цілодобове виконання. Слідкуйте за майбутніми статтями про впровадження стратегій криптотрейдингу за допомогою екземплярів AWS EC2 або функцій Lambda.

Більше вмісту на plainenglish.io

Джерело: https://python.plainenglish.io/crypto-arbitrage-with-networkx-and-python-638166e5a947?source=rss——-8—————–cryptocurrency

Часова мітка:

Більше від Medium