MeowQuant — незалежний сторонній інформаційний сайт, а не офіційний OKX. Кнопка реєстрації містить код запрошення OK30001, і ми можемо отримати за це винагороду за просування. Повне розкриття →

OKX · Основи

Як користуватися демо OKX: обкатай стратегію на фейкових грошах

Написав скрипт-стратегію, палець завис над клавішею Enter — чи варто запускати його на справжньому рахунку? Це вагання правильне. Найдорожча плата за навчання в кванті для новачка найчастіше не в програші на ринку, а в перевернутій умові, у загубленій комі — а ці помилки спливли б на демо за п'ять хвилин.

У цій статті ми (команда MeowQuant) розкладаємо демо OKX до кінця: що це таке, чому перед справжніми грошима через нього обов'язково треба пройти, як його відкрити, як під'єднатися через ccxt (ключове — лише один рядок) і де воно тихцем тебе обдурить. Прочитавши, ти зможеш безпечно ганяти свій скрипт на демо скільки завгодно, переконатися, що все гаразд, а потім ціною зміни одного рядка коду повернутися на справжні гроші.

invite_codes.env1

Що таке демо (Demo Trading)

Демо в OKX зветься Demo Trading (демо-торгівля). Просто кажучи, це паралельний рахунок, що працює на віртуальних коштах: котирування, інтерфейс, процес виставлення ордерів — усе як на реалі, тільки за ордери ти платиш не справжніми грошима, а фейковими USDT, які видала система. Ти там купуєш-продаєш, ставиш сітки, ганяєш скрипти — і заробив чи програв ніяк не стосується твого реального балансу.

Для кванту тут є річ, яку треба з'ясувати одразу: у демо свій власний API-ключ. Окремий Demo Trading API Key доведеться створити всередині демо-середовища; офіційна документація дає саме шлях окремого створення, тож не розраховуй на перемикач, який вмикають на реальному ключі. Добра новина в тому, що з боку коду майже нічого не змінюється: підставляєш облікові дані демо, вмикаєш перемикач демо — і скрипт, написаний для реалу, майже без змін можна спершу перевірити на демо.

Чому через нього обов'язково треба пройти перед реалом

Логіка проста: програма не вагається. Людина при ручному ордері перед «Підтвердити» ще раз гляне на напрямок і кількість; скрипт — ні, він чесно й безперервно виконуватиме хибно написану логіку. Перевернутий напрямок купівлі/продажу, забута в циклі умова виходу — на реалі це справжні гроші, що безперервно витікають.

Демо зводить ціну таких помилок до нуля. Можеш спокійно давати скрипту врізатися в стіну — хибний ордер, помилкове скасування, ціна, написана біля ринкової й тому миттєво виконана — усе це на демо лише витрачає віртуальні USDT, і кожне таке «врізання» наперед виловлює тобі баг, який на реалі коштував би тобі шкури. Наш досвід: нова стратегія на перших кількох циклах демо у вісьмох випадках із десяти виловить хоча б одну проблему, якої ти не передбачив.

Окрім ловлі багів, демо допомагає підтвердити ще дві базові речі: чи проходить автентифікація (чи правильно вписані три облікові дані) і чи правильний колбек (чи поля у відповіді на ордер, статус скасування, зміна балансу саме такі, як ти думав). Усе це ніяк не стосується справжніх грошей — суто перевірка процесу, і робити її на демо найвигідніше.

Як відкрити демо-рахунок

Відкрити демо набагато простіше, ніж API, додаткового погодження не треба. Нижче приблизний шлях, актуальний для поточного інтерфейсу OKX (місце входу інколи трохи зсувається):

  1. Увійди в OKX, у застосунку чи на вебсайті знайди в зоні рахунку/торгівлі вхід «Demo Trading» (демо-торгівля), зазвичай біля перемикача рахунків на торговій сторінці чи в особистому кабінеті.
  2. Зайди й перемкнися в середовище демо. Після перемикання інтерфейс матиме помітну позначку (наприклад, угорі з'явиться напис «Демо»), нагадуючи, що зараз ти витрачаєш фейкові гроші.
  3. Система видасть тобі віртуальні кошти. Коли ліміт скінчиться, його зазвичай можна вручну скинути в інтерфейсі демо й продовжити практику.
  4. Якщо ти лише хочеш покликами на вебсайті/в застосунку випробувати сітку, копітрейдинг та інших вбудованих ботів — цього кроку достатньо: просто налаштовуй параметри й запускай у середовищі демо.
  5. Якщо хочеш під'єднати демо скриптом — спершу створи всередині демо-середовища окремий 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.

📋 Приклад підключення й ордера
Коли цим самим ccxt-скриптом під'єднуєшся до демо OKX, найчастіше все ламає саме пропущений рядок 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. Це й є перевага попереднього запуску на демо: логіку перевіряєш на фейкових грошах, а переконавшись, одним рядком переходиш на справжні. Але перший раз на реалі обов'язково лише на дуже малу суму й постеж за ним, бо демо не відтворює справжнього прослизання й глибини.

Опанувавши демо, ти отримуєш безкоштовний полігон — будь-яку нову стратегію, будь-який змінений код спершу кидай туди й налагоджуй. Далі можна глянути, як вписати ризик-менеджмент у скрипт, або калькулятором сітки спершу порахувати параметри. Хоч яким шляхом підеш, пам'ятай порядок сьогоднішньої статті: спершу демо, потім реал малою сумою.