OKX · Основи
Як користуватися демо OKX: обкатай стратегію на фейкових грошах
Написав скрипт-стратегію, палець завис над клавішею Enter — чи варто запускати його на справжньому рахунку? Це вагання правильне. Найдорожча плата за навчання в кванті для новачка найчастіше не в програші на ринку, а в перевернутій умові, у загубленій комі — а ці помилки спливли б на демо за п'ять хвилин.
У цій статті ми (команда MeowQuant) розкладаємо демо OKX до кінця: що це таке, чому перед справжніми грошима через нього обов'язково треба пройти, як його відкрити, як під'єднатися через ccxt (ключове — лише один рядок) і де воно тихцем тебе обдурить. Прочитавши, ти зможеш безпечно ганяти свій скрипт на демо скільки завгодно, переконатися, що все гаразд, а потім ціною зміни одного рядка коду повернутися на справжні гроші.
Що таке демо (Demo Trading)
Демо в OKX зветься Demo Trading (демо-торгівля). Просто кажучи, це паралельний рахунок, що працює на віртуальних коштах: котирування, інтерфейс, процес виставлення ордерів — усе як на реалі, тільки за ордери ти платиш не справжніми грошима, а фейковими USDT, які видала система. Ти там купуєш-продаєш, ставиш сітки, ганяєш скрипти — і заробив чи програв ніяк не стосується твого реального балансу.
Для кванту тут є річ, яку треба з'ясувати одразу: у демо свій власний API-ключ. Окремий Demo Trading API Key доведеться створити всередині демо-середовища; офіційна документація дає саме шлях окремого створення, тож не розраховуй на перемикач, який вмикають на реальному ключі. Добра новина в тому, що з боку коду майже нічого не змінюється: підставляєш облікові дані демо, вмикаєш перемикач демо — і скрипт, написаний для реалу, майже без змін можна спершу перевірити на демо.
Чому через нього обов'язково треба пройти перед реалом
Логіка проста: програма не вагається. Людина при ручному ордері перед «Підтвердити» ще раз гляне на напрямок і кількість; скрипт — ні, він чесно й безперервно виконуватиме хибно написану логіку. Перевернутий напрямок купівлі/продажу, забута в циклі умова виходу — на реалі це справжні гроші, що безперервно витікають.
Демо зводить ціну таких помилок до нуля. Можеш спокійно давати скрипту врізатися в стіну — хибний ордер, помилкове скасування, ціна, написана біля ринкової й тому миттєво виконана — усе це на демо лише витрачає віртуальні USDT, і кожне таке «врізання» наперед виловлює тобі баг, який на реалі коштував би тобі шкури. Наш досвід: нова стратегія на перших кількох циклах демо у вісьмох випадках із десяти виловить хоча б одну проблему, якої ти не передбачив.
Окрім ловлі багів, демо допомагає підтвердити ще дві базові речі: чи проходить автентифікація (чи правильно вписані три облікові дані) і чи правильний колбек (чи поля у відповіді на ордер, статус скасування, зміна балансу саме такі, як ти думав). Усе це ніяк не стосується справжніх грошей — суто перевірка процесу, і робити її на демо найвигідніше.
Як відкрити демо-рахунок
Відкрити демо набагато простіше, ніж API, додаткового погодження не треба. Нижче приблизний шлях, актуальний для поточного інтерфейсу OKX (місце входу інколи трохи зсувається):
- Увійди в OKX, у застосунку чи на вебсайті знайди в зоні рахунку/торгівлі вхід «Demo Trading» (демо-торгівля), зазвичай біля перемикача рахунків на торговій сторінці чи в особистому кабінеті.
- Зайди й перемкнися в середовище демо. Після перемикання інтерфейс матиме помітну позначку (наприклад, угорі з'явиться напис «Демо»), нагадуючи, що зараз ти витрачаєш фейкові гроші.
- Система видасть тобі віртуальні кошти. Коли ліміт скінчиться, його зазвичай можна вручну скинути в інтерфейсі демо й продовжити практику.
- Якщо ти лише хочеш покликами на вебсайті/в застосунку випробувати сітку, копітрейдинг та інших вбудованих ботів — цього кроку достатньо: просто налаштовуй параметри й запускай у середовищі демо.
- Якщо хочеш під'єднати демо скриптом — спершу створи всередині демо-середовища окремий Demo Trading API Key (як створюється ключ, дивись нашу статтю Квант на OKX API), а вже тоді перемикайся на демо перемикачем у коді.
Як під'єднати демо через ccxt
Цей розділ найбільше цікавить скриптерів. Під'єднати демо через ccxt — відмінностей від реалу дві: один зайвий рядок-перемикач і те, що облікові дані беруться від ключа демо, а не від реального. За структурою це ті самі три: apiKey, secret і password (тобто Passphrase, який ти задав при створенні ключа; у ccxt це поле зветься password, новачки найчастіше його пропускають).
import ccxt
# Увага: ці три — від ключа демо (Demo Trading), а не від реального
okx = ccxt.okx({
'apiKey': 'демо_apiKey',
'secret': 'демо_secret',
'password': 'демо_Passphrase', # особливе для OKX, у ccxt зветься password
})
# Ключовий рядок: ccxt додасть до всіх наступних запитів заголовок демо
okx.set_sandbox_mode(True)
# Самоперевірка: цей рядок має надрукувати 1, інакше ти досі на реалі
print(okx.headers.get('x-simulated-trading'))
# Далі всі запити несуть позначку демо, на віртуальних коштах
balance = okx.fetch_balance()
print('USDT на демо доступно:', balance['USDT']['free'])
Рядок set_sandbox_mode(True) робить ось що: змушує ccxt додавати до всіх подальших запитів заголовок демо x-simulated-trading: 1. Демо й реал в OKX стоять на тому самому REST-хості, і те, у яке середовище потрапить запит, залежить виключно від цього заголовка — тож не сподівайся розрізнити їх за URL. З ним твоя перевірка балансу, ордери, скасування — усе йде на фейкові гроші; прибереш його (чи зміниш на False) — той самий код повернеться на справжні.
Можливо, ти бачив десь варіант, де sandboxMode пишуть в options просто при ініціалізації. Так на демо не потрапиш: у ccxt заголовок демо додає сам метод set_sandbox_mode(), а запис options у конструкторі його не викликає взагалі — заголовка немає, позначки немає, і запит іде точно як на реалі. Тож не підміняй той рядок конфігом: викликай okx.set_sandbox_mode(True), а тоді користуйся тим print як самоперевіркою.
І ще один, значно небезпечніший момент: API-ключ для демо треба створювати окремо. Шлях із офіційної документації OKX такий: увійти в OKX → Trade → Demo Trading → Personal Center → Demo Trading API, і вже там, усередині демо-середовища, створити Demo Trading API Key; саме такий шлях дає документація — це не перемикач, який вмикають на реальному ключі. А оскільки демо й реал ділять один REST-хост і відрізняються лише заголовком x-simulated-trading: 1, висновок прямий: якщо ти підставив реальний ключ і заголовок не пішов, ті ордери, які ти вважаєш симуляцією, лягають у реальну книгу. Якщо перемикач увімкнено, а помилка автентифікації все одно лізе, то проблема зазвичай у самих облікових даних (найчастіше — реальний набір, вставлений у демо-скрипт); повернись і звір із чек-листом поширених помилок API.
Під'єднавшись, цілком перенеси сюди свій готовий скрипт ордер/скасування (приклад — у вступній статті), додай цей рядок-перемикач sandbox — і можна спокійно ганяти раз по раз: навіть якщо рука дрогне й ти впишеш лімітну ціну біля ринкової, і вона реально виконається, витратиш лише віртуальні USDT.
set_sandbox_mode(True). Без нього запит іде без заголовка x-simulated-trading: 1 і лягає на реал, хоч який ключ ти підставиш: із реальним ключем fetch_balance поверне реальний баланс — і обманутися найлегше саме тоді, коли рахунок порожній, бо виглядає це як демо. Тож не визначай, на якому ти боці, за тим, чи вискочила помилка, — виведи той рядок самоперевірки згори й подивись на нього. А оскільки демо й реал стоять на тому самому REST-хості й відрізняються лише цим заголовком, визначати середовище за URL ненадійно — єдина самоперевірка, що працює, це print(okx.headers.get('x-simulated-trading')), і вивести вона має 1. Коли заголовок підтверджено, варто прогнати весь цикл: лімітний ордер на купівлю BTC/USDT (кількість 0,0001, ціна зашита набагато нижче ринкової, висить і не виконується), create_order повертає номер ордера, а після sleep(2) cancel_order скасовує його зі статусом canceled. Один такий прогін підтверджує, що ланцюжок «під'єднати демо → перевірити баланс → ордер → скасування» працює від початку до кінця, — кілька хвилин і повністю безкоштовно.
Де демо тебе обдурює
Демо чудове, але має свою стелю, і ця стеля створює оманливе враження. Кілька речей, які треба тримати в голові:
Прослизання й ціна виконання прикрашені
На реалі твій ордер матчиться зі справжніми зустрічними заявками ринку, і ціна часто не така ідеальна, як ти виставив — це прослизання. Матчинг демо найчастіше «слухняніший», ціна виконання ближча до твоєї ідеальної. У результаті: той самий набір параметрів на демо часто дає гарнішу криву прибутку, ніж на реалі. Не сприймай прибуток демо як очікування для реалу.
Глибина й ліквідність несправжні
На справжньому ринку велика заявка «проїдає» стакан і рухає ціну; непопулярну пару твою заявку взагалі може не зматчити. Демо ці речі найчастіше спрощує — хоч яку велику заявку постав, воно гладко її виконає. А вже на реалі, особливо з малоліквідними монетами, ця гладкість зникає.
Твої емоції теж фейкові
Цей пункт пропускають найчастіше, а він найфатальніший. На демо програш не болить, тож ти суворо виконуєш стоп-лос, не смикаєш параметри. На справжніх грошах число нереалізованого збитку реальне, і рука починає свербіти — передчасний тейк-профіт, утримання без стоп-лосу, дозаклад на ходу — цих емоційних дій демо тебе ніколи не навчить. Хоч як гарно стратегія йде на демо, перший урок реалу найчастіше — спершу побитися з власними емоціями.
Екстремальний ринок не розіграти
Шпильки, флеш-краши, періодичні затори й затримки біржі — саме ці екстремальні моменти й перевіряють стратегію та ризик-менеджмент по-справжньому, а демо в буденній роботі їх майже не відтворює. Тож стабільна робота на демо не означає, що твоя стратегія витримає екстремальний ринок.
Порядок переходу з демо на реал
Зведемо все вище разом: ми самі щоразу при виході нової стратегії йдемо цим сталим порядком, раджу скопіювати:
- Безперервно крути на демо якийсь час. Не «запустилося раз — і досить», а дай йому покрутитися достатньо, покрити кілька циклів зростання/падіння, переконатися, що ордер, скасування, колбек, зміна балансу — усе відповідає очікуванням.
- Перехід на реал: один перемикач і один набір ключів. Прибери
set_sandbox_mode(True)чи зміни наFalseі поверни облікові дані реального ключа (ключ Demo Trading на реалі не працює). Це й є цінність попередньої перевірки на демо — ціна переходу стиснута майже до нуля. - Перший раз на реалі — лише дуже малі гроші. Сума, яку не шкода втратити повністю, як плата за навчання. Прослизання й глибина, яких демо не відтворює, спливуть саме тоді.
- Постеж за ним перші кілька днів. Не кидай напризволяще, переконайся, що поведінка на реалі збігається з тим, що ти бачив на демо, і лише тоді поступово нарощуй.
Порядок нескладний, але він тримає «найфатальніші помилки стадії новачка» подалі від справжніх грошей. Спершу демо, потім реал малою сумою, спершу вижити, а вже потім говорити про прибуток — це фраза, яку ми повторюємо знову й знову.
Поширені запитання
Чи треба окремо створювати API-ключ для демо?
Так, потрібен окремий. Ключ для демо треба створювати всередині демо-середовища: увійти в OKX → Trade → Demo Trading → Personal Center → Demo Trading API і там створити Demo Trading API Key; саме такий шлях дає офіційна документація — це не перемикач, який вмикають на реальному ключі. Найпідступніше тут інше: демо й реал стоять на тому самому REST-хості, а розрізняються лише заголовком запиту x-simulated-trading: 1, тож зрозуміти за URL, у якому ти середовищі, неможливо. Виклик set_sandbox_mode(True) у ccxt додає цей заголовок за тебе; перед запуском один раз виведи okx.headers.get('x-simulated-trading') — якщо там не 1, ти досі на реалі.
Гроші на демо справжні? Якщо програю, треба поповнювати?
Демо працює на віртуальних коштах, не на справжніх грошах; програш не списує з твого рахунку ні копійки. Його завдання — дати тобі в безкоштовному середовищі налагодити скрипт, параметри, процес ордер-скасування. Коли ліміт скінчиться, зазвичай його можна скинути в інтерфейсі демо, конкретно — за поточним входом у кабінеті OKX.
Якщо заробив на демо, на реалі зароблю стільки ж?
Перенести один в один не можна. Виконання на демо часто ідеальніше за реал — прослизання, глибина, швидкість матчингу там спрощені, та й налаштування на фейкові гроші в тебе спокійніше. Той самий набір параметрів на реалі може дати зовсім інший результат через гіршу ціну виконання, недостатню глибину чи твою власну тремтливу руку. Демо перевіряє, чи правильний процес, а не скільки прибутку.
Чим відрізняються set_sandbox_mode і sandboxMode у конфізі?
Вони не рівнозначні: сам лише запис sandboxMode у конфізі на демо тебе не перемкне. set_sandbox_mode() у ccxt — це метод, і він робить дві речі: виставляє sandboxMode в options і додає до headers заголовок x-simulated-trading: 1 — цей заголовок додається тільки всередині методу. Запис sandboxMode в options конструктора цей метод не викликає взагалі, тож заголовка немає, позначки немає, і запит іде точно так само, як на реалі. Використовуй лише okx.set_sandbox_mode(True), а тоді виведи okx.headers.get('x-simulated-trading') для самоперевірки: доки там не 1, ти не на демо.
Налагодив на демо — скільки рядків змінити для переходу на реал?
Сам код — це фактично один рядок: прибрати set_sandbox_mode(True) чи змінити на False; але разом із ним треба міняти й облікові дані, бо ключ Demo Trading на реалі не працює — доведеться повернути реальні apiKey, secret і Passphrase. Це й є перевага попереднього запуску на демо: логіку перевіряєш на фейкових грошах, а переконавшись, одним рядком переходиш на справжні. Але перший раз на реалі обов'язково лише на дуже малу суму й постеж за ним, бо демо не відтворює справжнього прослизання й глибини.
Опанувавши демо, ти отримуєш безкоштовний полігон — будь-яку нову стратегію, будь-який змінений код спершу кидай туди й налагоджуй. Далі можна глянути, як вписати ризик-менеджмент у скрипт, або калькулятором сітки спершу порахувати параметри. Хоч яким шляхом підеш, пам'ятай порядок сьогоднішньої статті: спершу демо, потім реал малою сумою.