Скрипт для Binance от ИИ — сначала в спотовую тестовую сеть: что менять в адресах, какие эндпоинты недоступны и почему исчезают данные
Написать с помощью ИИ скрипт для торговли на Binance несложно — сложно потом безопасно его проверить. Для спотового API у Binance есть тестовая сеть: средства там виртуальные, лимиты и фильтры в целом совпадают с реальными, но доступны только эндпоинты /api, а данные обнуляются примерно раз в месяц.
1. Почему скрипту от ИИ пока рано трогать реальные деньги #
Попросите ChatGPT, Claude или DeepSeek написать скрипт, который выставляет заявку на покупку, когда цена опускается до определённого уровня, — работающий код появится очень быстро. Проблема в том, что по одному только чтению кода почти невозможно убедиться, что верна каждая деталь: сторона ордера, единицы количества, точность цены, условие выхода из цикла. Перепутано хоть что-то одно — и на реальном счёте получится реальная сделка. Чем более законченным выглядит код от ИИ, тем легче вообще пропустить этап проверки.
Для спотового API у Binance есть отдельная тестовая среда. Пользователи, зарегистрированные в спотовой тестовой сети, автоматически получают баланс в нескольких активах, но это не настоящие активы, и использовать их можно только внутри тестовой сети. Все средства в тестнете виртуальные: их нельзя ни завести, ни вывести. Скрипт может выставить здесь сотню неправильных ордеров — потери будут нулевые.
2. Подключение: сначала ключ от тестовой сети, потом замена адресов #
В документации всего два шага. Первый — войти на сайт тестовой сети и создать API-ключ. Второй — писать код по обычной документации спотового API, просто подставив адреса тестовой сети.
| Тип | Реальный адрес | Адрес тестовой сети |
|---|---|---|
| REST API | https://api.binance.com/api | https://testnet.binance.vision/api |
| WebSocket API | wss://ws-api.binance.com/ws-api/v3 | wss://ws-api.testnet.binance.vision/ws-api/v3 |
| Объединённые потоки WebSocket | wss://stream.binance.com/stream | wss://stream.testnet.binance.vision/stream |
В таблице только три строки. В оригинальной таблице документации есть ещё адреса тестовой сети для резервного REST-домена, одиночного потока рыночных данных, потоков SBE и FIX API — если понадобятся, смотрите исходную страницу.
Когда просите ИИ переделать код, сформулируйте это как одно явное требование: все адреса собраны в одном параметре конфигурации, который по умолчанию указывает на тестовую сеть. Если по скрипту разбросано несколько жёстко прописанных api.binance.com, то при смене окружения достаточно пропустить одно место — и половина запросов уйдёт в тестнет, а половина в реальную торговлю. Как следует из первого шага документации, для тестовой сети нужен отдельный API-ключ: не подключайтесь к тестнету ключом от основного аккаунта Binance и не делайте наоборот.
testnet.binance.vision возвращает такое сообщение: Service unavailable from a restricted location according to 'b. Eligibility' in https://www.binance.com/en/terms. Оно отсылает к пункту об условиях доступа (Eligibility) в пользовательском соглашении Binance. Если вы его видите — из вашей сетевой локации сервис недоступен, и обходные пути искать не стоит.
3. Эндпоинтов, которые начинаются с /sapi, в тестовой сети нет #
Документация отвечает прямо: тестовая сеть предоставляет только эндпоинты, начинающиеся с /api, а эндпоинты на /sapi недоступны. Доступное делится на такие группы:
- Рыночные данные: REST-эндпоинты, запросы WebSocket API, потоки WebSocket
- Торговля: REST-эндпоинты, запросы WebSocket API
- Аккаунт: REST-эндпоинты, запросы WebSocket API
- Пользовательские потоки данных (User Data Streams)
Для скрипта от ИИ отсюда следует прямой вывод. Если в коде есть вызовы эндпоинтов на /sapi, эта часть в тестовой сети просто никогда не выполняется, и чистый прогон в тестнете о ней ничего не говорит. Перед выходом на реальную торговлю выпишите все пути эндпоинтов из скрипта, отметьте отдельно те, что начинаются с /sapi, и чётко держите в голове: вот эти места не проверялись ни разу.
4. Деньги ненастоящие, ограничения настоящие #
Виртуальные средства не означают, что правила мягче. В документации сказано: лимиты по IP, ограничения частоты выставления ордеров, биржевые фильтры и фильтры торговых пар в тестовой сети в целом такие же, как в спотовом API; пользователям рекомендуется регулярно запрашивать у API актуальные лимиты и фильтры — например, через /api/v3/exchangeInfo.
В коде от ИИ больше всего стоит проверять жёстко прописанные числа: минимальный размер ордера, точность цены, количество запросов в секунду. Записанные в код константами, они могут быть верны для одной торговой пары и неверны для следующей. Пусть скрипт при старте читает exchangeInfo и корректирует количество и цену по полученным фильтрам — одна и та же логика и для тестовой сети, и для реальной торговли. Это надёжнее, чем держать для каждой свой набор констант. Заодно именно в тестнете выясняется, как скрипт отступает, когда запрос отклонён по лимиту, и не начинает ли он бешено повторять попытки.
5. Данные исчезнут: примерно раз в месяц и без предупреждения #
Поработайте с тестовой сетью какое-то время — и однажды обнаружите, что вся история ордеров пропала. В документации у этого вопроса так и стоит заголовок «All my data has disappeared! What happened?», а ответ сводится к следующему:
- тестовая сеть периодически сбрасывается в чистое состояние — удаляются и открытые ордера, и исполненные;
- при сбросе каждый пользователь автоматически получает новый баланс по всем активам;
- сброс происходит примерно раз в месяц и без предварительного уведомления;
- с августа 2020 года API-ключи при сбросе сохраняются, заново создавать их не нужно.
Скрипт, который исходит из того, что выставленный в прошлый раз ордер всё ещё открыт, а позиции — те же, что он оставил, в день сброса сломается. Когда просите ИИ написать скрипт, добавьте одно требование: при каждом запуске сначала запрашивать текущие открытые ордера и балансы, а потом решать, что делать дальше, а не доверять состоянию из локального кеша. И собственные записи о тестах не держите только в тестовой сети: результаты сделок, которые хотите сохранить, скрипт должен писать в локальный лог по ходу работы.
Ещё одна небольшая деталь: в документации сказано, что в тестовой сети klines и uiKlines всегда возвращают одни и те же данные. Если логика от ИИ опирается на разницу между ними, в тестнете её не проверить.
6. Подпись: кто генерирует ключ для HMAC, RSA и Ed25519 #
Попутно документация тестовой сети разбирает различия между тремя типами API-ключа. От выбора зависит, как вам придётся хранить ключевой материал:
| Тип | Кто генерирует ключ для подписи | Ключевые моменты из документации |
|---|---|---|
| HMAC-SHA-256 | Секрет за вас генерирует Binance | Представляя RSA, документация подаёт его как альтернативу этому варианту |
| RSA | Пару ключей вы генерируете сами, Binance отдаёте только публичный ключ, подписываете приватным | Поддерживаются 2048–4096 бит, рекомендуется 2048; подпись по PKCS#1 v1.5, PSS не поддерживается |
| Ed25519 | Точно так же: пару ключей генерируете вы, передаёте только публичный ключ | Ещё один асимметричный вариант помимо RSA |
У RSA и Ed25519 приватный ключ вы генерируете сами, и Binance получает только публичный. На шаге генерации приватного ключа документация пишет: этот файл не передавайте никому. И никому включает окно чата с ИИ: пусть ИИ помогает писать код подписи — показать ему формат публичного ключа или текст ошибки можно, но ни одного символа приватного ключа и секрета туда вставлять нельзя. На какой уровень открывать права боевого ключа, смотрите в разборе минимальных прав для API Binance (на английском).
7. Перед переходом на реальную торговлю пройдитесь по этому списку #
- Адреса: все адреса эндпоинтов читаются из одного параметра конфигурации, так что переход на реальную торговлю — это правка в одном месте, и нигде не осталось забытого жёстко прописанного адреса.
- Что не проверено: вы знаете, какие эндпоинты на /sapi вызывает скрипт, и понимаете, что ни один из них ни разу не выполнялся в тестовой сети.
- Фильтры: количество и точность цены корректируются по
exchangeInfoво время работы, а не берутся из констант, которые подставил ИИ. - Состояние: при запуске скрипт проверяет открытые ордера и балансы и нормально переживает ситуацию «всё обнулилось», как при сбросе тестовой сети.
- Ключи: боевой ключ создан отдельно под эту задачу, права открыты только те, что скрипту действительно нужны, а приватный ключ и секрет ни разу не попадали в переписку с ИИ.
Адреса, фильтры, состояние и ключи — эти четыре пункта лучше поднимать тогда, когда вы только просите ИИ написать код, а не переделывать всё потом. Можно вставить блок ниже перед своими требованиями:
Скрипт, который обращается к спотовому API Binance, должен удовлетворять четырём требованиям:
1. Все адреса эндпоинтов (REST, WebSocket) собраны в одном параметре конфигурации, который по умолчанию указывает на спотовую тестовую сеть https://testnet.binance.vision/api; при переходе на реальную торговлю меняется только этот параметр, а жёстко прописанных адресов больше нигде в коде быть не должно.
2. При запуске сначала запрашивай /api/v3/exchangeInfo и корректируй количество в ордере и точность цены по полученным фильтрам; не записывай минимальный размер ордера, точность цены и частоту запросов константами.
3. При запуске сначала запрашивай текущие открытые ордера и балансы счёта и решай следующий шаг по результатам запроса; не считай, что ордера или позиции, оставшиеся от прошлого запуска, ещё существуют.
4. API-ключ, секрет и приватный ключ читай из переменных окружения, в код их не записывай; и не проси меня вставлять их тебе — в примерах всегда используй заглушки.
Когда ИИ вернёт код, найдите для каждого из четырёх требований строку, где оно действительно реализовано. Не пропускайте код только потому, что ИИ написал «всё выполнено по требованиям» — логика тут та же, что и в разборе о том, как распознать ошибку ИИ.
Разбор минимальных прав для API →
— PromptDeck, 2026-09-19