# SteamMarketRunner Docs > Автоматизация торговли на Steam Community Market This file contains all documentation content in a single document following the llmstxt.org standard. ## Агенты и MCP # Агенты и MCP SteamMarketRunner рассчитан на работу не только людей, но и AI-агентов. Для этого есть три уровня поддержки. ## 1. llms.txt Сайт документации публикует машиночитаемые сводки по стандарту [llmstxt.org](https://llmstxt.org): - `https://docs.steammarketrunner.com/llms.txt` — оглавление со ссылками на все разделы; - `https://docs.steammarketrunner.com/llms-full.txt` — полный текст документации одним файлом. Агенту достаточно загрузить `llms-full.txt`, чтобы получить весь контекст по продукту. Используйте **абсолютные** URL — относительные пути агент не сможет разрешить вне сайта. ## 2. OpenAPI Публичная спецификация API доступна: - интерактивно — на странице [API Reference](/api); - как файл — `https://docs.steammarketrunner.com/openapi.json` (абсолютный URL). Из публичной спеки скрыты внутренние и операторские ручки — остаются только эндпоинты, нужные для пользовательских интеграций. Для автоматизации заведите [**сервис-ключ**](/guides/glossary) в своём кабинете: ключи привязаны к вашему пользователю (тенанту), хранится только их хеш, а сам ключ показывается единожды при создании. Мутации, ставящие задачи, идемпотентны через заголовок `x-idempotency-key`. Управление аккаунтами и торговлей — через per-account роуты `/steam-accounts/{id}/trading/*` (start/stop), список своих задач — `/steam-accounts/{id}/decisions/jobs`, свой аудит — `/audit-log`. ### Модель работы: ставим задачу, опрашиваем результат Торговые действия **асинхронны и идемпотентны**: вы ставите задачу в очередь (получаете её id), фоновый воркер её исполняет, а вы опрашиваете результат по id. ```mermaid sequenceDiagram participant A as Агент participant API as SteamMarketRunner API participant W as Раннер / воркер A->>API: POST /steam-accounts/{id}/decisions/jobs(x-api-key + x-idempotency-key) API-->>A: 200 { id: jobId } (или существующая задача при повторе ключа) API->>W: задача в очереди W->>W: исполнение (анализ / Steam-вызовы) loop опрос A->>API: GET /steam-accounts/{id}/decisions/jobs/{jobId}/result API-->>A: статус + результат (queued / running / succeeded / failed) end ``` Повтор того же `x-idempotency-key` по тому же аккаунту вернёт **уже существующую** задачу, а не создаст дубль — безопасно ретраить. ### Сквозной пример **Аутентификация** — сервис-ключ передаётся в заголовке `x-api-key` (cookie-сессия владельца — только для браузера). Дополнительно рекомендуется слать `x-steammarketrunner-actor` (кто вы) и `x-request-id` (для корреляции в аудите). **1. Получить сервис-ключ.** В кабинете под сессией владельца (plaintext-ключ возвращается **только** при создании — сохраните его сразу): ```bash curl -X POST https://api.steammarketrunner.com/auth/service-keys \ -H "content-type: application/json" \ -H "cookie: steammarketrunner_session=..." \ -d '{"name":"my-agent"}' # → { "id": "...", "key": "", ... } ``` **2. Поставить задачу** (здесь — dry-run buy-анализ; начинайте с `dryRun:true`): ```bash curl -X POST https://api.steammarketrunner.com/steam-accounts/$STEAM_ACCOUNT_ID/decisions/jobs \ -H "content-type: application/json" \ -H "x-api-key: $STEAMMARKETRUNNER_SERVICE_API_KEY" \ -H "x-steammarketrunner-actor: my-agent" \ -H "x-request-id: my-agent-2026-06-14-0001" \ -H "x-idempotency-key: my-agent-buy-analysis-0001" \ -d '{"type":"buy_analysis","appid":252490,"dryRun":true}' # → { "id": "$JOB_QUEUE_ID", ... } ``` **3. Забрать результат** по id задачи: ```bash curl "https://api.steammarketrunner.com/steam-accounts/$STEAM_ACCOUNT_ID/decisions/jobs/$JOB_QUEUE_ID/result" \ -H "x-api-key: $STEAMMARKETRUNNER_SERVICE_API_KEY" \ -H "x-steammarketrunner-actor: my-agent" ``` Список своих задач — `GET /steam-accounts/{id}/decisions/jobs?status=queued&type=buy_analysis`. Глобальные операторские ручки (`/jobs*`, `/audit-events`) — только для роли `admin`. Полный набор примеров (recover-stale, requeue, cancel, проверка ключа через `/auth/service/me`) — в технической документации бэкенда (`docs/backend/SERVICE_API.md`). ## 3. MCP-сервер Пакет `@steammarketrunner/mcp` поднимает [MCP](https://modelcontextprotocol.io)-сервер над документацией и OpenAPI-спекой. Агент получает их как инструменты, а не как «простыню» текста. Сервер предоставляет ровно **6 инструментов**: | Инструмент | Что делает | |------------|-----------| | `list_docs` | список всех страниц документации (id, заголовок, url) | | `read_doc` | полный markdown одной страницы по её id | | `search_docs` | поиск по документации с ранжированием и сниппетами | | `list_api_operations` | список операций API (метод, путь, теги; фильтр по тегу/методу) | | `search_api` | поиск операций API по ключевым словам | | `get_api_operation` | полная схема операции (параметры, тело, ответы) | Транспорт — stdio, поэтому сервер подключается к Claude Code, Claude Desktop, Cursor и другим MCP-клиентам. ### Подключение к Claude Code ```bash pnpm --filter @steammarketrunner/mcp build claude mcp add steammarketrunner -- node /абсолютный/путь/steammarketrunner/apps/mcp/dist/index.js ``` ### Подключение через конфиг клиента ```json { "mcpServers": { "steammarketrunner": { "command": "node", "args": ["/абсолютный/путь/steammarketrunner/apps/mcp/dist/index.js"] } } } ``` :::caution[Путь к серверу — абсолютный] `args` должен содержать **абсолютный** путь до `dist/index.js`. Относительный путь не разрешится: рабочая директория MCP-клиента, как правило, не совпадает с корнем репозитория. ::: Подробности — в `apps/mcp/README.md`. ## Дальше - [Глоссарий → сервис-ключ](/guides/glossary) --- ## Подключение Steam-аккаунта # Подключение Steam-аккаунта Чтобы SteamMarketRunner торговал от вашего имени, аккаунту нужны три вещи: учётные данные Steam, файл аутентификатора **maFile** (для мобильных подтверждений) и **прокси**. Аккаунт добавляется кнопкой **«Добавить аккаунт»** на дашборде через короткий мастер из четырёх шагов: **«Подключение»** → **«Прокси»** → **«Стратегия»** → **«Обзор»**. **SteamID вручную вводить не нужно** — он определяется автоматически после первого входа. ## Что понадобится | Что | Зачем | |---|---| | **Логин и пароль Steam** | вход и поддержание веб-сессии | | **Файл maFile** | генерация кодов Steam Guard и **подтверждение** ордеров/листингов (мобильные подтверждения) | | **Прокси** | весь трафик к Steam идёт через ваш прокси — изоляция и стабильность сессии | ## Где взять maFile **maFile** — это экспорт мобильного аутентификатора Steam: JSON-файл с секретами `shared_secret` (генерация кодов Steam Guard) и `identity_secret` (подпись подтверждений сделок). Без него мастер **не пропустит** дальше первого шага — это обязательное поле. Получить maFile можно одним из способов: - **Steam Desktop Authenticator (SDA)** — десктопная программа, которая подключает ваш телефон как аутентификатор и сохраняет maFile на компьютере (папка `maFiles`). Самый распространённый способ. - **Экспорт с телефона с root-доступом** — выгрузка файла аутентификатора напрямую из приложения Steam на Android. В мастере на шаге **«Подключение»** перетащите этот файл в зону **«Нажмите или перетащите maFile»** (принимаются `.maFile` и `.json`). Подсказка под полем: _«Включает автоматические мобильные подтверждения. Нужен для торговли.»_ :::warning[maFile обязателен] Если файла нет — добавить аккаунт не получится. Без maFile система не сможет подтверждать сделки, и торговля работать не будет. Если файл повреждён или это не JSON, мастер покажет ошибку «Прикрепите корректный maFile в формате JSON». ::: :::info[🖼 Скриншот] Шаг 1 мастера («Подключение»): поля «Отображаемое имя», «Логин Steam», «Пароль Steam» и пунктирная зона загрузки «Нажмите или перетащите maFile». Подпишите зону drop как обязательную. ::: ## Шаги мастера ### Шаг 1 — «Подключение» Заполните: **«Отображаемое имя»** (как аккаунт будет называться в кабинете), **«Логин Steam»**, **«Пароль Steam»** и прикрепите **maFile**. SteamID подставится сам после входа. ### Шаг 2 — «Прокси» Укажите **«Строка прокси»**. Формат строки — URL: ``` http://user:pass@ip:port ``` Поддерживаются протоколы `http`, `https`, `socks4`, `socks5`. Если логин/пароль не нужны, можно короче: `http://ip:port` или просто `ip:port` (тогда подставится `http://`). Поле **«Ожидаемый IP»** необязательное — это IP выхода прокси для самопроверки. :::info[🖼 Скриншот] Шаг 2 мастера («Прокси»): поле «Строка прокси» с placeholder `http://user:pass@ip:port` и необязательное поле «Ожидаемый IP». ::: :::warning[Прокси обязателен и проверяется] Адрес прокси валидируется: запрещены loopback/локальные/приватные/служебные адреса (защита от обращения во внутреннюю сеть) — проверка идёт и при сохранении, и при самом подключении. Используйте **выделенный** внешний прокси, который Steam не режет как датацентр; жилые/мобильные прокси надёжнее датацентровых. ::: ### Шаг 3 — «Стратегия» Выберите стартовый пресет — это базовый набор настроек, который потом можно изменить на вкладке **«Стратегия»**: - **«Консервативная»** — широкая маржа, низкий объём, сохранение капитала. - **«Сбалансированная»** — по умолчанию: медианные цены с разумными ограничениями. - **«Агрессивная»** — плотный андеркат, быстрый оборот, выше риск. :::info[🖼 Скриншот] Шаг 3 мастера («Стратегия»): три карточки пресетов — «Консервативная», «Сбалансированная» (выбрана по умолчанию) и «Агрессивная», каждая с коротким описанием. ::: ### Шаг 4 — «Обзор» Проверьте сводку (аккаунт, логин Steam, прокси, стратегия) и нажмите **«Добавить аккаунт»**. После создания откроется страница настройки аккаунта. ## Безопасность аккаунта - Секреты (логин, пароль, maFile, строка прокси) хранятся **зашифрованными** и отдельно для каждого владельца. В открытом виде они не логируются и не отдаются обратно; расшифровка происходит только в момент запроса к Steam. - **Микробан Steam.** Слишком частые или агрессивные действия с одной сессии Steam может временно ограничить (микробан). SteamMarketRunner растягивает действия во времени и сериализует запросы по одному аккаунту, но при «Агрессивной» стратегии риск выше. Дайте каждому аккаунту **отдельный** прокси (не общий с другими аккаунтами и не датацентровый), чтобы изолировать сессию. Подробнее — в [глоссарии](/guides/glossary). ## Статусы аккаунта После подключения аккаунт проходит несколько состояний. На дашборде и на странице аккаунта они показываются «чипами»: | Статус | Что значит | |---|---| | **Черновик** | создан, но ещё не готов (не хватает секретов, прокси или первого синка) | | **«Готов»** | сессия валидна, кошелёк и инвентарь синхронизированы — можно торговать | | **«Заблокирован»** | торговля остановлена системой (истекла сессия / не удалось перелогиниться) — см. ниже | | **«Кулдаун Steam»** | микробан: Steam временно ограничил аккаунт, торговля возобновится автоматически | | **«Покупка на паузе»** | инвентарь полон или мало средств — покупка приостановлена и возобновится сама (продажа продолжается) | | **«Нет синка»** | давно не было контакта со Steam; следующий синк обновит данные | ```mermaid stateDiagram-v2 [*] --> Черновик: «Добавить аккаунт» Черновик --> Готов: секреты + прокси + первый синк Готов --> Торгует: «Запустить торговлю» Торгует --> Заблокирован: сессия истекла / перелогин не удался Торгует --> КулдаунSteam: микробан Торгует --> ПокупкаНаПаузе: инвентарь полон / мало средств Заблокирован --> Готов: подключение починено КулдаунSteam --> Торгует: ограничение снято (авто) ПокупкаНаПаузе --> Торгует: пауза истекла (авто) ``` ## Что синхронизируется После подключения система периодически (и при необходимости) подтягивает: - **Баланс кошелька** и валюту (USD/RUB); - **Инвентарь** по каждой игре — какие предметы и сколько у вас есть; - **Активные листинги** и ожидающие подтверждения. Это работает **даже до** запуска торговли — чтобы на дашборде были свежие данные. Отдельных кнопок «Подключить Steam / Обновить кошелёк / Синхронизировать инвентарь» в кабинете нет: цикл синхронизации автоматический. Текущее состояние сессии, кошелька и инвентаря пассивно отображается на вкладке **«Система»** аккаунта. ## Автоблокировка и авто-переподключение - Если Steam-сессия истекла, система сначала пробует **сама перелогиниться** по maFile. При успехе торговля продолжается. - Если переподключение не удалось — аккаунт переходит в **«Заблокирован»**, и раннер перестаёт ставить сделки, пока проблема не решена. Откройте вкладку **«Система»** и почините подключение. ## Дальше - [Быстрый старт](/guides/getting-started) - [Настройки торговли](/guides/trading-settings) - [Глоссарий](/guides/glossary) — что такое микробан, андеркат, экспозиция. - [FAQ](/guides/faq) — если аккаунт не переходит в «Готов» или ушёл в «Заблокирован». --- ## Дашборд # Дашборд Главная страница кабинета — сводка по **вашим** аккаунтам и портфелю. Видны только ваши ресурсы. ## Сводка портфеля Вверху — крупная карточка **«Чистая стоимость · все аккаунты»** (суммарная оценка по всем аккаунтам) с мини-графиком динамики, а под ней — ряд ключевых метрик. | Метрика на дашборде | Что значит | |---|---| | **«Кошелёк»** | суммарный баланс кошельков Steam | | **«На удержании»** | под строкой «Кошелёк» (со значком 🔒) — средства Steam, которые временно недоступны | | **«На продаже»** | суммарная стоимость активных листингов | | **«Инвентарь»** | оценочная стоимость инвентаря | | **«В заказах»** | сумма открытых ордеров на покупку | | **«Общий P&L»** | суммарная прибыль/убыток | :::info[🖼 Скриншот] Сводка дашборда: карточка «Чистая стоимость · все аккаунты» с мини-графиком и подписанные метрики «Кошелёк» (с под-строкой 🔒 «На удержании»), «На продаже», «Инвентарь», «В заказах», «Общий P&L». ::: ### «На удержании» — что это Под суммой кошелька отдельной строкой со значком 🔒 показывается **«На удержании»** — это деньги Steam, которые **ещё недоступны** (например, средства от недавних продаж, которые Steam придерживает). Они есть, но потратить их прямо сейчас нельзя. :::note[Маленькая нестыковка в названиях] На сводке дашборда метрика открытых ордеров называется **«В заказах»**, а на странице аккаунта та же величина — **«В ордерах»**. Это про одно и то же: сумма ваших открытых ордеров на покупку. ::: ### Валюта отображения Кросс-аккаунтные суммы приводятся к **единой валюте отображения** (например, USD или RUB), которую вы выбираете в настройках профиля. Если у вас аккаунты в разных валютах, суммы конвертируются по рыночному курсу — значок `≈` означает оценку. Страница каждого отдельного аккаунта при этом всегда остаётся в своей валюте. Под сводкой — баннер **«Требуют внимания»** (аккаунты с проблемами) и таблица всех ваших аккаунтов. Добавить новый — кнопка **«Добавить аккаунт»**. ## Метрики аккаунта Внутри аккаунта в шапке показаны его собственные метрики: | Метрика | Что значит | |---|---| | **«Кошелёк»** | баланс кошелька Steam; под ним строкой 🔒 — часть «На удержании» (недоступные средства) | | **«В продаже»** | суммарная стоимость активных листингов | | **«Инвентарь»** | оценочная стоимость инвентаря | | **«В ордерах»** | сумма открытых ордеров на покупку | | **«Капитал»** | общая оценка стоимости аккаунта (формула ниже) | :::info[🖼 Скриншот] Шапка аккаунта: метрики «Кошелёк» (с 🔒-строкой), «В продаже», «Инвентарь», «В ордерах», крупная «Капитал», значок статуса раннера, чипы здоровья, индикатор прокси и кнопка «Запустить торговлю» / «Остановить торговлю». ::: ### Как считается «Капитал» Подсказка в интерфейсе формулирует это точно: > **«Капитал» = «Кошелёк» + «Инвентарь» + «В продаже».** > > Открытые ордера на покупку **не входят** (они не блокируют средства). Удержанная часть баланса в формулу тоже не добавляется отдельно. :::warning[Значение может на момент просесть] Во время активной торговли «Капитал» может ненадолго проседать: исполненная покупка переводит деньги в инвентарь раньше, чем пройдёт синхронизация инвентаря. После ближайшего синка значение выравнивается — это нормально. ::: В шапке аккаунта также: значок статуса раннера (**«Торгует»** / **«Простой»** / **«Заблок.»** / **«Настройка»**), чипы здоровья, индикатор прокси и кнопка управления раннером — **«Запустить торговлю»** или **«Остановить торговлю»** (по каждому аккаунту отдельно). Подробнее о состояниях — в гайде [Как работает торговля](/guides/how-trading-works). :::note[Если в стоимости инвентаря «0»] Если у вас есть предметы, а «Инвентарь» показывает 0, обычно данные просто ещё не подтянулись — ближайшая синхронизация со Steam их обновит. ::: ## Вкладки аккаунта Внутри аккаунта четыре вкладки: - **«Маркет»** — предметы, их статус, тумблеры покупки/продажи, импорт инвентаря, группы и массовые действия. - **«Стратегия»** — параметры торговли (алгоритм цены, прибыль, размер ордера, лимиты). См. [Настройки торговли](/guides/trading-settings). - **«Статистика»** — история и метрики по **этому** аккаунту (см. ниже). - **«Система»** — состояние сессии Steam, кошелёк, прокси, журнал событий и управление секретами/удаление аккаунта. ## Статистика аккаунта и кривая капитала Вкладка **«Статистика»** показывает развёрнутые метрики по аккаунту и **график капитала** с переключателем режима: - **«Портфель»** — стоимость с переоценкой по рынку: «Кошелёк» + «Инвентарь» + «В продаже». - **«Реализовано»** — только реализованная прибыль/убыток по закрытым сделкам. Среди метрик вкладки: - **«Реализованный P&L»** — прибыль по уже закрытым сделкам, с разбивкой на валовую выручку, чистую выручку и комиссии; - **«Нереализованный P&L»** — бумажная прибыль по открытым позициям; - **«ROI»** и **«Доля прибыльных»** (винрейт); - **«Среднее удержание»** — сколько дней в среднем держится позиция; - **«Закрытых сделок»**, **«Покупок»**, **«Продаж»**. Ниже — таблица **«Дневной баланс и прибыль»**: по строке на каждый день со снапшотом капитала, его составных частей и изменением относительно прошлого дня. :::note[Графику нужно минимум 2 дня] Сразу после подключения график капитала пуст — появится сообщение **«Для графика нужно минимум 2 дня снапшотов.»**. Снапшоты записываются раз в день, так что кривая начнёт строиться со второго дня. Аналогично кривая «Реализовано» заполняется по мере закрытия сделок. ::: :::info[🖼 Скриншот] Вкладка «Статистика»: график капитала с переключателем «Портфель» / «Реализовано», подписанные карточки «Реализованный P&L», «Нереализованный P&L», «ROI», «Винрейт», «Среднее удержание» и таблица «Дневной баланс и прибыль». ::: ### «Статистика» аккаунта vs «Портфель» по всем аккаунтам Не путайте две страницы: - вкладка **«Статистика»** внутри аккаунта — метрики и кривая **одного** аккаунта; - отдельная страница **«Портфель»** — сводная статистика и кривая **по всем** вашим аккаунтам сразу (в общей валюте отображения). ## Журнал событий Неизменяемый журнал: размещение и отмена ордеров, создание и снятие листингов, подтверждения, блокировки. Каждое событие привязано к аккаунту и времени. Если что-то «не происходит», начните отсюда — причина обычно видна в последних событиях. ## Дальше - [Как работает торговля](/guides/how-trading-works) - [Инвентарь и холды](/guides/inventory-and-holds) - [FAQ и решение проблем](/guides/faq) - [Глоссарий](/guides/glossary) --- ## FAQ и решение проблем # FAQ и решение проблем Вопросы сгруппированы по темам. Если не нашли ответ — загляните в [Глоссарий](/guides/glossary) (разбор терминов) и [Как работает торговля](/guides/how-trading-works). :::tip[Где смотреть, почему предмет не торгуется] Статус предмета в таблице **«Маркет»** (**«Готов»** / **«Пропущен»**, причина — в подсказке к статусу) и блок **«Диагностика»** во вкладке **«Система»** отвечают почти на любой вопрос «почему предмет не торгуется» — см. [раздел ниже](#как-прочитать-причину-отказа). ::: --- ## Подключение Steam-аккаунта ### Аккаунт не переходит в статус «Готов» (`ready`) Проверьте: заданы ли все секреты (логин, пароль, [`maFile`](/guides/glossary)), указан ли валидный [прокси](/guides/glossary) (не локальный и не приватный адрес — такие отклоняются защитой от SSRF), прошла ли первая синхронизация. Что означают статусы — в [Подключении Steam-аккаунта](/guides/connecting-steam-account) и [Глоссарии](/guides/glossary). ### Аккаунт ушёл в «Заблокирован» (`blocked`) Чаще всего истекла Steam-сессия и [авто-переподключение](/guides/glossary) не справилось (причина `session_expired` или `auth_failed`). На дашборде это видно как чип **«Заблокирован»** с пояснением. Что делать: 1. Откройте вкладку **System** аккаунта. 2. Убедитесь, что [`maFile`](/guides/glossary) и пароль актуальны, а [прокси](/guides/glossary) доступен. 3. Если меняли пароль/Steam Guard — перевыгрузите свежий `maFile`. 4. После исправления снова нажмите **«Запустить торговлю»**. ### Сессия истекла — нужно ли что-то делать вручную Обычно нет. Система сама пытается **переподключиться** (перелогин по [`maFile`](/guides/glossary)) при первом же признаке протухшей сессии; если это удаётся — торговля не прерывается. Вмешательство нужно, только когда авто-переподключение не сработало (см. [выше](#аккаунт-ушёл-в-заблокирован-blocked)) — как правило, потому что устарел `maFile` или пароль. ### Аккаунт под «Кулдаун Steam» (микробан) — что делать **Ничего.** [Микробан](/guides/glossary) — это мягкое временное ограничение Steam за слишком частые запросы. На дашборде показывается чип **«Кулдаун Steam»** с таймером. Цикл торговли по этому аккаунту автоматически ставится на паузу и **сам возобновится**, когда кулдаун спадёт. Не запускайте массовые действия в этот момент — это только продлит ограничение. --- ## Покупка ### Buy-ордер не ставится Возможные причины (точную подскажет статус предмета в таблице «Маркет»): - исчерпан лимит [экспозиции](/guides/glossary) (`maxOrderExposure` или гейт «баланс × множитель»); - сработал [depth-гейт](/guides/glossary) (`ordersPlace`) — очередь buy-ордеров на нашей цене слишком глубокая; - цена упёрлась в [профит-флор](/guides/glossary) (`minProfit` / `profitPercent`); - баланс кошелька неизвестен — тогда покупка пропускается из соображений безопасности ([fail-closed](/guides/glossary)). Подробнее о настройках — [Настройки торговли](/guides/trading-settings). ### Покупка «на паузе» Steam сообщил «инвентарь полон» или «мало средств» — покупка временно приостановлена (чип **«Покупка на паузе»** с таймером). Продажа при этом продолжается, чтобы освободить место в инвентаре. Возобновится автоматически после кулдауна. --- ## Продажа ### Предмет не продаётся — листинг не появляется Самая частая причина — предмет **в холде** ([market hold](/guides/glossary), ограничение Steam на недавно полученные предметы). В колонке OWN такие копии помечены `🔒`. Дождитесь, пока холд спадёт — продажа пойдёт сама. Подробнее: [Инвентарь и холды](/guides/inventory-and-holds). Если холда нет — посмотрите статус предмета в таблице «Маркет» и причину пропуска в подсказке к нему (см. [ниже](#как-прочитать-причину-отказа)). ### OWN показывает 0, хотя предмет есть в Steam Предмет не добавлен в отслеживаемый список. Нажмите **«Импорт инвентаря»** — он просканирует Steam-инвентарь, подтянет недостающие предметы (покупка/продажа у них будут выключены, пока вы не включите) и проставит количество. ### Хочу выставить всё сразу, не дожидаясь циклов раннера Нажмите **«Выставить всё»** — это один проход с троттлингом, который выставляет на продажу все подходящие предметы (реальные листинги Steam), минуя обычный лимит «несколько штук за тик». ### Цена продажи кажется заниженной Вы смотрите на [**net**](/guides/glossary) — сумму, которую получает продавец за вычетом комиссий Steam. Покупатель платит больше (gross, +~15%). Это нормально и так и должно быть. ### Что такое «реприайс» и «снять с продажи через N дней» Это операции [обслуживания (maintenance)](/guides/glossary), которые раннер выполняет примерно раз в час: - **Реприайс** — если ваш листинг ушёл по цене от рынка больше заданного процента (`repriceDeviationPercent`), система снимает его, а следующий цикл продажи выставит по свежей цене. При `repriceDeviationPercent=0` реприайс выключен. - **«Снять с продажи через N дней»** (`removeFromSaleDays`) — снимает листинги старше заданного порога. Выключено, пока значение не задано. Можно исключить листинги со стикерами или с активными ордерами. Настройки — [Настройки торговли](/guides/trading-settings). --- ## Деньги и уведомления ### В какой валюте показываются суммы Торговые расчёты идут в валюте кошелька каждого Steam-аккаунта. Сводные кросс-аккаунтные суммы в кабинете показываются в выбранной вами [**валюте отображения**](/guides/glossary) и конвертируются по рыночному курсу — на сами ордера это не влияет. ### Стоимость инвентаря на дашборде = 0 Обычно временный рассинхрон валют или [снапшотов](/guides/glossary) — подтянется следующей синхронизацией. Если не уходит — проверьте, что у аккаунта корректно определилась валюта кошелька (при неизвестной валюте анализ намеренно пропускается, чтобы не записать цены не в той валюте). ### Как настроить уведомления (обязательно перед включением) Уведомления о важных событиях аккаунта (блокировки, пауза покупок, [микробан](/guides/glossary)) приходят в **Telegram** и/или на **webhook**. Раздел — вкладка **«Уведомления»** в кабинете (заголовок **«Алерты»**). Шаги: 1. Заполните **«ID чата Telegram»** (доставка идёт через общий бот платформы — нужен именно ваш chat id) **и/или** **«URL вебхука»**. 2. Выберите **«Минимальная важность»** (Инфо / Предупреждение / Ошибка). 3. Сохраните и включите алерты. :::caution[Нельзя включить алерты «вхолостую»] Пока не задан хотя бы один канал доставки, система покажет: **«Добавьте Telegram chat ID или URL вебхука перед включением алертов.»** Сначала канал — потом переключатель. ::: Критичные события (блокировка раннера, остановка торговли) приходят **всегда**, независимо от выбранного порога важности. Webhook хранится зашифрованным и в открытом виде больше не показывается. ### Что даёт платный тариф Тарифные планы (Pro/Business поверх бесплатного) поднимают лимиты: число Steam-аккаунтов, объём [decision-задач](/guides/glossary), частоту синхронизации рыночных данных и доступ к расширенной аналитике каталога. Текущий план и его лимиты — в кабинете; каталог планов ведёт администратор платформы. --- ## Диагностика ### Как прочитать причину отказа Результат отбора движка виден в двух местах интерфейса: - **Колонка «Статус» в таблице «Маркет».** У предмета статус **«Готов»** (участвует в торговле) или **«Пропущен»** (отсеян на этом цикле); во всплывающей подсказке к статусу — результат отбора и причина, по которой он получен. - **Блок «Диагностика» во вкладке «Система».** Если торговля стоит по всему аккаунту, здесь будет строка **«Торговля заблокирована: …»** или **«Безопасность раннера блокирует live-режим: …»** с причинами уровня аккаунта. Типичные причины пропуска предмета и что они значат: | Причина | Что это значит | |---|---| | Цена продажи ещё не рассчитана (прогрев) | Снапшотов цены пока мало — подождите накопления истории. | | Все копии под market-hold Steam | Весь инвентарь в [холде](/guides/glossary) — ждать снятия. | | Нет marketable-ассета для листинга | Нет свободной (не-held) копии, которую можно выставить. | | Уже выставлен | Активный листинг уже существует. | | Достигнут лимит экспозиции | Упёрлись в `maxOrderExposure` или гейт баланса. | | Очередь buy-ордеров слишком глубокая | Сработал [depth-гейт](/guides/glossary) `ordersPlace`. | | Недостаточно средств на балансе | Не хватает [баланса кошелька](/guides/glossary). | | Предмет не проходит текущие фильтры | Не [eligible](/guides/glossary): тренд вниз, ликвидность ниже порога и т.п. | | Заблокировано гардом стикеров / флоата | Сработала защита для CS2-предметов со стикерами/флоатом. | Полную картину по конкретному отказу можно посмотреть в журнале задач/аудита аккаунта на дашборде. :::note[Планируется] Отдельная панель **«Превью торгов (dry-run)»** — холостой прогон движка со списками «выставит / закупит / пропустит» — в разработке. Пока пользуйтесь статусами предметов и блоком «Диагностика». ::: ### Изменил настройки — почему ничего не поменялось сразу Раннер работает циклами (тик ~5 мин), а [обслуживание (maintenance)](/guides/glossary) — примерно раз в час. Новые цены применяются при следующем анализе и зависят от накопленной истории [снапшотов](/guides/glossary). Большинство операций автоматизированы — отдельных кнопок «подключить Steam», «обновить кошелёк», «синхронизировать инвентарь», «анализировать» нет: подключение, синк кошелька/инвентаря и анализ идут фоновыми шедулерами сами. --- ## Дальше - [Глоссарий](/guides/glossary) - [Как работает торговля](/guides/how-trading-works) - [Настройки торговли](/guides/trading-settings) - [Агенты и MCP](/guides/agents-and-mcp) --- ## Быстрый старт # Быстрый старт Этот путь проведёт от регистрации до первой автоматической сделки. Занимает ~10 минут плюс время на прогрев данных. :::tip[Итог] Зарегистрироваться → подключить Steam-аккаунт → добавить предметы → задать стратегию → **«Запустить торговлю»**. ::: ```mermaid flowchart LR A[Регистрация] --> B[ПодключитьSteam-аккаунт] B --> C[Добавитьпредметы] C --> D[Задатьстратегию] D --> E[«Запуститьторговлю»] E --> F[Раннерторгует сам] ``` ## Шаг 1. Регистрация и вход Зарегистрируйтесь самостоятельно: на странице входа перейдите к **регистрации** и создайте аккаунт (email + пароль). Никакой ручной выдачи доступа не требуется. После входа вы попадёте в **кабинет** — здесь живут ваши Steam-аккаунты, предметы и настройки. Вы видите только свои ресурсы. ## Шаг 2. Подключить Steam-аккаунт Нажмите **«Добавить аккаунт»** на дашборде и пройдите короткий мастер из четырёх шагов: **«Подключение»** (имя, логин, пароль, файл maFile для мобильных подтверждений) → **«Прокси»** → **«Стратегия»** (пресет) → **«Обзор»**. SteamID указывать вручную не нужно — он определяется автоматически после первого входа. Подробно и про безопасность — в [Подключении Steam-аккаунта](/guides/connecting-steam-account). :::info[🖼 Скриншот] Первый шаг мастера «Добавить аккаунт» (вкладка «Подключение»): поля «Отображаемое имя», «Логин Steam», «Пароль Steam» и зона загрузки «Нажмите или перетащите maFile». Подпишите, что maFile обязателен. ::: Дальше система **сама** подтянет данные: подключит сессию, синхронизирует кошелёк и инвентарь. Дождитесь, пока аккаунт перейдёт в статус **«Готов»** — никаких кнопок «Подключить» / «Синхронизировать» нажимать не нужно. ## Шаг 3. Добавить предметы Предметы берутся из **каталога** (общая база, наполняется автоматически). Способы: - **«Добавить предметы»** — по фильтрам (цена, ликвидность, игра). - **«Импорт инвентаря»** — одноимённая кнопка на вкладке **«Маркет»** добавит предметы, которые уже лежат в вашем Steam-инвентаре. См. [Инвентарь и холды](/guides/inventory-and-holds). Предметы можно объединять в **группы** и задавать группе отдельную стратегию. :::note Импортированные/добавленные предметы по умолчанию идут с **выключенной** торговлей (buy/sell off) — ничего не произойдёт, пока вы их не включите. ::: ## Шаг 4. Задать стратегию Откройте вкладку **«Стратегия»** аккаунта и задайте как минимум: - **«Алгоритм»** цены (покупки и продажи) — например «Максимум (медиана дневных максимумов)». - **«Целевая доходность»** — целевая маржа в процентах. - **«Размер ордера»** — процент от месячных продаж или фиксированное число. - **«Макс. суммарная экспозиция ($)»** — потолок суммы открытых ордеров. Все параметры разобраны в [Настройках торговли](/guides/trading-settings). Затем включите buy/sell на нужных предметах. ## Шаг 5. Прогрев данных (важно) Цены считаются по **накопленным ценовым снапшотам** (каждые ~6–8 часов). На свежем аккаунте истории мало — дайте системе поработать **несколько суток**, чтобы цены стали устойчивыми. Покупать можно раньше, но качество цены растёт с историей. ## Шаг 6. Запустить торговлю Нажмите **«Запустить торговлю»** (по каждому аккаунту отдельно). Дальше раннер работает сам: - каждые ~5 минут — анализ покупки/продажи + подтверждения; - каждые ~10 минут — проверка сессии/кошелька; - раз в ~час — обслуживание (переоценка, отмена невыгодных ордеров). Наблюдайте за результатом на [дашборде](/guides/dashboard) и в журнале событий (вкладка **«Система»**). Остановить можно в любой момент кнопкой **«Остановить торговлю»**. Чтобы выставить весь подходящий инвентарь разом, не дожидаясь цикла, на вкладке **«Маркет»** есть кнопка **«Выставить всё»**. ### Жизненный цикл аккаунта ```mermaid stateDiagram-v2 [*] --> Черновик: «Добавить аккаунт» Черновик --> Готов: секреты + прокси + первый синк Готов --> Торгует: «Запустить торговлю» Торгует --> Готов: «Остановить торговлю» Торгует --> Заблокирован: сессия истекла / перелогин не удался Торгует --> КулдаунSteam: микробан Торгует --> ПокупкаНаПаузе: инвентарь полон / мало средств Заблокирован --> Готов: подключение починено КулдаунSteam --> Торгует: ограничение снято (авто) ПокупкаНаПаузе --> Торгует: пауза истекла (авто) ``` Подробнее о статусах — в [Подключении Steam-аккаунта](/guides/connecting-steam-account#статусы-аккаунта). ## Рекомендация для первого запуска Стартуйте узко: **1 аккаунт, 2–3 дешёвых предмета, маленькая «Макс. суммарная экспозиция ($)»**. Убедитесь, что проходит реальный buy-ордер и продаётся хотя бы один листинг — затем расширяйтесь. ## Что дальше - [Как работает торговля](/guides/how-trading-works) - [Настройки торговли](/guides/trading-settings) - [FAQ и решение проблем](/guides/faq) --- ## Глоссарий # Глоссарий Термины сгруппированы по темам. См. также [FAQ](/guides/faq), [Как работает торговля](/guides/how-trading-works) и [Настройки торговли](/guides/trading-settings). ## Аккаунт и сессия **Статусы аккаунта** — что показано на дашборде про состояние аккаунта: - **«Готов» (`ready`)** — аккаунт подключён, синхронизирован и пригоден для торговли. Только в этом статусе раннер реально торгует. - **«Заблокирован» (`blocked`)** — торговля по аккаунту остановлена (обычно истекла сессия и авто-переподключение не справилось). Нужно починить подключение во вкладке System и снова нажать **«Запустить торговлю»**. См. [FAQ](/guides/faq). - **Остановлен (`stopped`)** — раннер не запущен. Синк кошелька/инвентаря продолжает работать, но buy/sell не выполняются, пока вы не нажмёте **«Запустить торговлю»**. **maFile** — файл мобильного аутентификатора Steam (Steam Desktop Authenticator). Содержит `shared secret` для кодов Steam Guard и `identity secret` для **подтверждения** торговых действий. Нужен, чтобы система могла подтверждать ордера и листинги. Подробнее: [Подключение Steam-аккаунта](/guides/connecting-steam-account). **SDA (мобильное подтверждение)** — подтверждение действия через мобильный аутентификатор. Новый листинг/ордер часто требует подтверждения, прежде чем станет активным. **авто-переподключение** — система сама пытается перелогиниться по [`maFile`](#аккаунт-и-сессия) при первом признаке протухшей сессии. Если удаётся — торговля не прерывается; если нет — аккаунт уходит в «Заблокирован». **прокси** — отдельный HTTP-прокси на каждый Steam-аккаунт. Локальные/приватные/метадата-адреса запрещены (защита от SSRF). См. [Подключение Steam-аккаунта](/guides/connecting-steam-account). **microban (микробан)** — временное мягкое ограничение Steam за слишком частые запросы (rate-limit). На дашборде — чип **«Кулдаун Steam»** с таймером. Цикл торговли по аккаунту автоматически **ставится на паузу** и сам возобновляется, когда ограничение спадёт. См. [FAQ](/guides/faq). ## Цена: net, gross, алгоритмы **net / gross** — *net* = сумма, которую **получает продавец** (за вычетом комиссий Steam); *gross* = сумма, которую **платит покупатель**. В кабинете цена продажи показывается как net. При продаже в Steam тоже отправляется net. **алгоритм цены** — способ расчёта цены покупки/продажи. Доступно **7 алгоритмов**: **MS** (мода), **HG** (медиана дневных максимумов), **HSG** (минимум дневных максимумов), **AVG** (взвешенная медиана), **LG** (медиана дневных минимумов), **BG** (медиана дневных минимумов как цена покупки) и **OG** (от верхнего buy-ордера в [стакане](#рынок-стакан-снапшоты)). Первые шесть редуцируют график продаж, OG работает по стакану. Выбор — в [Настройках торговли](/guides/trading-settings). **профит-флор (`minProfit` / `profitPercent`)** — минимальная прибыль, ниже которой сделка не имеет смысла. `profitPercent` — целевая наценка (процент к чистой цене), `minProfit` — абсолютный минимум прибыли. Если рассчитанная цена не оставляет этой прибыли, цена клэмпится или сделка пропускается. Задаётся в [Настройках торговли](/guides/trading-settings). ## Рынок: стакан, снапшоты **стакан (order book) / histogram** — список buy- и sell-ордеров по предмету с ценами и объёмами. Используется для OG-алгоритма и live-гардов (подрезка цены, depth-гейт). **снапшот цены** — периодический срез рыночных данных по предмету (каждые ~6–8 ч). Из накопленных снапшотов строится график продаж для [алгоритмов цены](#цена-net-gross-алгоритмы). Пока снапшотов мало — идёт «прогрев», и цены могут быть ещё не рассчитаны. ## Фильтры и лимиты **eligibility (пригодность)** — проходит ли предмет ваши фильтры (прибыль, ликвидность, тренды). Только «eligible»-предметы участвуют в торговле, даже если для них включён buy/sell. **depth-гейт (`ordersPlace`)** — правило: не покупать, если очередь buy-ордеров на нашей цене слишком глубокая. `ordersPlace` — это **процент** от месячных продаж: лимит = `max(1, round(месячные_продажи × ordersPlace / 100))`. Значения `0` / `-1` / без значения = гейт выключен. **экспозиция (exposure)** — суммарная стоимость открытых buy-ордеров. Ограничивается `maxOrderExposure` (жёсткий лимит в деньгах) либо гейтом «баланс × множитель». **кошелёк / баланс (fail-closed)** — баланс кошелька Steam-аккаунта. Если он **неизвестен** (аккаунт ещё не синкнут), планировщик покупок трактует баланс как **0** и пропускает ордера — а не как «бесконечность». Это [fail-closed](#фильтры-и-лимиты): при неопределённости система выбирает безопасный вариант, чтобы не уйти в неконтролируемую экспозицию. **fail-closed** — принцип «при сомнении — не делать». При недостающих данных (неизвестный баланс, нет данных о продажах) система блокирует операцию, а не разрешает её «на всякий случай». ## Обслуживание (maintenance) **обслуживание (maintenance)** — набор операций, которые раннер выполняет примерно раз в час, чтобы держать листинги и ордера в порядке: - **реприайс** — снять листинг, ушедший по цене от рынка больше `repriceDeviationPercent` (следующий цикл выставит по свежей цене; `0` = выключено); - **отмена ордеров** — снять buy-ордер, переставший быть выгодным; - **снять с продажи через N дней** (`removeFromSaleDays`) — снять листинги старше порога (выключено, пока не задано); - **вытеснение конкурентом** — отреагировать, если нас перебили в стакане. Подробнее — [FAQ](/guides/faq) и [Настройки торговли](/guides/trading-settings). ## Холд и предметы **холд / market hold** — временное ограничение Steam на продажу/обмен предмета (типично на недавно полученные). Под холдом предмет нельзя листить. В колонке OWN такие копии помечены `🔒`. См. [Инвентарь и холды](/guides/inventory-and-holds). **marketable** — флаг Steam «можно ли продавать на Маркете». Per-asset значение из живого инвентаря; `0` = под холдом/ограничением. **dry-run / «Превью»** — прогон движка покупки/продажи **вхолостую**: ничего не размещается, но показывается, что бы сторговалось и **почему предметы пропускаются**. Кнопка **«Превью»** в кабинете — главный инструмент диагностики. См. [FAQ → «Превью»](/guides/faq). **inspect link / float / стикеры** *(для CS2)* — inspect-ссылка ведёт к точным характеристикам предмета: **float** (степень износа) и наклеенные **стикеры**. Используются гардами продажи (не продавать предметы с дорогими стикерами или вне диапазона float). Для Rust неактуально. ## Платформа и автоматизация **раннер (runner)** — фоновый исполнитель, который по расписанию (тик ~5 мин) крутит цикл buy/sell/подтверждение/синк для запущенных аккаунтов. Запускается/останавливается по каждому аккаунту кнопками **«Запустить торговлю»** / **«Остановить торговлю»**. **decision job (задача)** — единица фоновой работы (анализ buy/sell/maintenance, проверка сессии, синк рынка), поставленная в очередь. Свои задачи видно на дашборде. **группа** — набор предметов с общей (переопределяющей) стратегией. Группа должна принадлежать тому же Steam-аккаунту, иначе её настройки не применятся. **appid / contextid** — идентификаторы игры и контекста инвентаря Steam (напр. Rust = `252490`, контекст `2`). **тенант / пользователь (tenant / user)** — ваш аккаунт в SteamMarketRunner. Все ресурсы (Steam-аккаунты, ключи, настройки) изолированы: вы видите только свои. **сервис-ключ (service key)** — ключ для агент/API-интеграций, привязанный к вашему пользователю. Хранится только хеш; сам ключ показывается один раз при создании. См. [Агенты и MCP](/guides/agents-and-mcp). **валюта отображения (display currency)** — валюта, в которой кабинет показывает сводные суммы по всем аккаунтам. Кросс-аккаунтные итоги конвертируются по рыночному курсу; на сами торговые расчёты (они идут в валюте кошелька аккаунта) не влияет. **уведомления (алерты)** — оповещения о важных событиях аккаунта через Telegram и/или webhook, с настройкой минимальной важности (severity). Настраиваются на вкладке **«Уведомления»**; webhook хранится зашифрованным. См. [FAQ → уведомления](/guides/faq). --- ## Как работает торговля # Как работает торговля После нажатия **«Запустить торговлю»** раннер работает по расписанию сам — вам не нужно ничего нажимать вручную. Понимание цикла помогает читать [дашборд](/guides/dashboard) и журнал событий. В шапке аккаунта статус раннера показан коротким значком: | Значок | Что значит | |---|---| | **«Торгует»** | раннер запущен и активно работает по аккаунту | | **«Простой»** | раннер остановлен — новые ордера и листинги не ставятся | | **«Заблок.»** | торговля приостановлена из-за проблемы (см. чипы здоровья ниже) | | **«Настройка»** | аккаунт ещё не готов — нужно завершить подключение | ## Один тик раннера Каждые **~5 минут** раннер выполняет один тик. Шаги идут строго по порядку, поэтому листинг, созданный в начале тика, успевает подтвердиться в этом же тике. ```mermaid flowchart TD A["Проверка сессии Steam"] --> B["Анализ продажи"] B --> C["Анализ покупки"] C --> D["Подтверждение действий"] D --> E(["Тик завершён · следующий через ~5 мин"]) ``` 1. **Проверка сессии** — жива ли веб-сессия Steam. Если истекла, раннер сначала пробует переподключиться сам, и только если не вышло — переходит в «Заблок.». 2. **Анализ продажи** — для предметов с включённой продажей считается цена и создаётся листинг (см. [колонку «Свои» и холды](/guides/inventory-and-holds)). 3. **Анализ покупки** — для предметов с включённой покупкой считается цена, проверяется баланс и глубина стакана, выставляется ордер на покупку. 4. **Подтверждение** — мобильные подтверждения (Steam Guard) принимаются автоматически. Этот шаг идёт **после** продажи и покупки, поэтому только что созданный листинг сразу становится активным. :::note[Почему листинг сначала «Ожидает подтверждения»] Steam на создание листинга отвечает «успех, но пока ожидает». Листинг становится **активным** только после мобильного подтверждения — его принимает шаг подтверждения в том же тике. Поэтому в журнале вы увидите пару событий: **«Лот на продажу создан»** → **«Подтверждения приняты»**. В таблице подтверждений такой лот недолго числится как **«Ожидает»**. ::: ## Расписание: что и как часто Помимо основного тика работают фоновые циклы: | Цикл | Частота | Что делает | |---|---|---| | **Тик раннера** | ~5 мин | проверка сессии → анализ продажи → анализ покупки → подтверждение | | **Синхронизация со Steam** | ~10 мин (каждые 2 тика) | подтягивает свежий инвентарь, листинги и баланс кошелька | | **Проверка здоровья** | ~10 мин | держит кошелёк и сессию свежими — работает даже до запуска торговли | | **Обслуживание** | ~1 час | переоценка листингов, отмена невыгодных ордеров, снятие старых лотов | ```mermaid timeline title Ритм работы раннера Каждые ~5 мин : Тик торговли (продажа, покупка, подтверждения) Каждые ~10 мин : Синхронизация со Steam : Проверка здоровья аккаунта Каждый ~1 час : Обслуживание (переоценка, отмена, снятие старых лотов) ``` ## Когда предмет участвует в торговле Раннер не торгует «всем подряд». Чтобы предмет попал в работу, должны совпасть несколько условий: - **Покупка** — включён тумблер **«BUY»** у предмета, есть рассчитанная цена покупки, хватает баланса и стакан достаточно глубокий. - **Продажа** — включён тумблер **«SELL»**, в инвентаре есть **доступная** (не заблокированная) копия и рассчитана цена продажи. - **Обслуживание** — запускается раз в час: переоценивает листинги, ушедшие от рынка, отменяет зависшие ордера и снимает слишком старые лоты (если вы задали соответствующие настройки в [Стратегии](/guides/trading-settings)). Цены и право на торговлю пересчитываются автоматически по мере накопления свежих рыночных данных — отдельных кнопок «обновить» в интерфейсе нет. ## Почему предмет не торгуется: где смотреть Раннер берёт в работу не каждый предмет — движок отбора может его отсеять. Результат отбора виден сразу в двух местах интерфейса. **1. Колонка «Статус» в таблице вкладки «Маркет».** У каждого предмета есть статус: - **«Готов»** — предмет прошёл отбор и участвует в торговле; - **«Пропущен»** — отсеян движком на этом цикле; - **«Наблюдение»** / **«Торгуется»** — промежуточные состояния. Наведите курсор на статус — подсказка покажет результат отбора и причину, по которой он получен. **2. Вкладка «Система», блок «Диагностика».** Если торговля по аккаунту целиком стоит, здесь будет строка вида **«Торговля заблокирована: …»** или **«Безопасность раннера блокирует live-режим: …»** с перечнем причин уровня аккаунта (истёкшая сессия, защитные гейты и т.п.). Движок отбора отсеивает предметы по объективным причинам. Типичные из них: | Причина | Что значит | |---|---| | Цена продажи ещё не рассчитана (прогрев) | данных пока мало — подождите следующих синков | | Все копии под market-hold Steam | весь инвентарь по предмету заблокирован (см. [холды](/guides/inventory-and-holds)) | | Нет marketable-ассета для листинга | ни одна копия сейчас не пригодна к продаже | | Уже выставлен | листинг по предмету уже активен | | Недостаточно средств на балансе | не хватает денег под ордер на покупку | | Уже есть открытый buy-ордер | ордер уже стоит — второй не нужен | | Предмет не проходит текущие фильтры | отсеян настройками стратегии (прибыль, объём, диапазон цены) | :::tip Если предмет в таблице — «Пропущен», наведите курсор на его статус: подсказка покажет причину. Если же торговля стоит по всему аккаунту, причину ищите во вкладке «Система» → «Диагностика». ::: :::note[Планируется] Отдельная панель **«Превью торгов (dry-run)»** — холостой прогон движка с разбивкой «что бы выставилось / закупилось / пропустилось» — в разработке. Пока пользуйтесь статусами предметов и блоком «Диагностика». ::: ## Состояния раннера и автоматическое восстановление Раннер переходит между несколькими состояниями и **в большинстве случаев восстанавливается сам**. ```mermaid stateDiagram-v2 [*] --> Простой Простой --> Торгует: «Запустить торговлю» Торгует --> Простой: «Остановить торговлю» Торгует --> Заблокирован: сессия не восстановилась Торгует --> ПокупкаНаПаузе: инвентарь полон / мало средств Торгует --> КулдаунSteam: Steam ограничил аккаунт Заблокирован --> Торгует: подключение починено ПокупкаНаПаузе --> Торгует: пауза истекла (авто) КулдаунSteam --> Торгует: ограничение снято (авто) ``` Чипы здоровья в шапке аккаунта подсказывают, что происходит: - **«Покупка на паузе»** — Steam сообщил «инвентарь полон» или «мало средств». Раннер временно не ставит ордера на покупку, но **продолжает продавать** (продажа освобождает место и деньги). Пауза снимается автоматически. - **«Кулдаун Steam»** — Steam временно ограничил аккаунт (микробан). Раннер делает паузу, чтобы не усугублять, и **сам возобновит торговлю**, когда ограничение спадёт. Делать ничего не нужно. - **«Заблокирован»** — веб-сессия Steam не восстановилась автоматически. Это единственный случай, который требует вашего вмешательства: откройте вкладку **«Система»** и почините подключение (обновите данные Steam). - **«Нет синка»** — давно не было контакта со Steam. Обычно временно; следующий синк обновит данные. ## Почему покупка иногда пропускается — и это правильно SteamMarketRunner сознательно осторожен с вашими деньгами: - **Ордер засчитывается только если Steam реально его подтвердил.** Ответ «вроде успех, но без подтверждения» ордером не считается — так в учёт не попадают «фантомные» сделки. - **Цена листинга считается от суммы, которую вы получаете на руки** (после комиссии Steam), а не от суммы, которую платит покупатель. Иначе лот был бы завышен примерно на комиссию и просто не продавался бы. - **Если баланс кошелька неизвестен** (например, аккаунт ещё не синхронизировался), система считает его нулём и **пропускает покупку**. Лучше пропустить тик, чем поставить ордер вслепую и уйти в неконтролируемую трату. Поэтому периодические пропуски покупки — норма, а не сбой. Точную причину по конкретному предмету покажет его статус в таблице «Маркет» (наведите курсор), а если стоит весь аккаунт — блок «Диагностика» во вкладке «Система». ## Остановка торговли Кнопка **«Остановить торговлю»** переводит аккаунт в «Простой» — новые тики ничего не ставят. **Открытые ордера и активные листинги при этом остаются** и продолжают работать на стороне Steam; ничего не отменяется. Снять их можно вручную во вкладке «Маркет» или через обслуживание. Возобновить торговлю можно в любой момент кнопкой **«Запустить торговлю»**. ## Дальше - [Настройки торговли](/guides/trading-settings) — алгоритмы цен, прибыль, фильтры, обслуживание - [Инвентарь и холды](/guides/inventory-and-holds) — почему предмет не продаётся - [Дашборд](/guides/dashboard) — что означают метрики - [Глоссарий](/guides/glossary) --- ## Инвентарь и холды # Инвентарь и холды ## Колонка «Свои» В таблице предметов на вкладке **«Маркет»** колонка **«Свои»** показывает, сколько единиц предмета у вас есть, с разбивкой на доступные и заблокированные. Если часть копий заблокирована, рядом с числом появляется значок 🔒 с количеством. Наведите курсор — во всплывающей подсказке будет: > **«Доступно 3, в блокировке 2»** — то есть всего 5 копий, из них 2 под блокировкой. а ниже — построчная раскладка по срокам: - **«N предметов разблокируются через N дн.»** — сколько копий и через сколько дней освободятся; - **«N предметов разблокируются сегодня»** — освободятся в течение дня; - **«N предметов в блокировке (дата неизвестна)»** — заблокированы, но точный срок Steam не сообщил. :::info[🖼 Скриншот] Колонка «Свои» с раскрытой подсказкой: значок 🔒, строка «Доступно … , в блокировке …» и раскладка «разблокируются через N дн.» по срокам. ::: ## Что значит «блокировка» Steam накладывает временное **ограничение на продажу и обмен** на недавно полученные предметы (после трейда, покупки на маркете или дропа). Такой предмет лежит в инвентаре, но продать его пока нельзя — на стороне Steam это называется **market-hold** (холд). В SteamMarketRunner мы говорим про это привычными словами: предмет **«в блокировке»** и **«разблокируется»** через какое-то время. :::warning[Это не ошибка системы] Если копии «в блокировке», SteamMarketRunner просто **не пытается** их продавать — так устроен Steam, это не сбой. Как только блокировка спадёт (обычно несколько дней), предмет станет доступен и продастся автоматически. ::: Состояние берётся из **живого** инвентаря Steam при каждой синхронизации, поэтому колонка «Свои» отражает реальную текущую картину: сколько копий прямо сейчас можно продать, а сколько ещё ждут. ```mermaid flowchart LR A["Предмет получен"] --> B["🔒 В блокировкеN дней"] B --> C["Разблокируется"] C --> D["Доступен — раннер продаёт"] ``` ## Почему предмет не продаётся: не только блокировка Блокировка — лишь одна из причин. У «непродажи» их больше. Точную причину по предмету видно прямо в таблице вкладки **«Маркет»**: колонка **«Статус»** показывает **«Готов»** или **«Пропущен»**, а во всплывающей подсказке к статусу — результат отбора и причина, по которой он получен (см. [Как работает торговля](/guides/how-trading-works#почему-предмет-не-торгуется-где-смотреть)). Движок отсеивает предметы из продажи по объективным причинам. Типичные: | Причина | Что значит | |---|---| | Все копии под market-hold Steam | весь инвентарь по предмету заблокирован | | Нет marketable-ассета для листинга | ни одна копия сейчас не пригодна к продаже | | Уже выставлен | листинг по предмету уже активен | | Заблокировано гардом стикеров | сработала защита «не продавать со стикерами» | | Заблокировано гардом флоата | сработала защита по флоату (износу) | | Цена продажи ещё не рассчитана (прогрев) | данных пока мало — подождите следующих синков | :::tip Если предмет «Пропущен» — наведите курсор на статус и прочитайте причину. «Все копии под market-hold Steam» — нужно просто подождать. Что-то другое — причина в настройках или прогреве данных, а не в Steam. ::: ## Импорт инвентаря Кнопка **«Импорт инвентаря»** во вкладке «Маркет» сканирует ваш Steam-инвентарь и добавляет в отслеживаемый список те предметы, которых там ещё не было. Зачем это нужно: предмет может лежать в инвентаре, но если он не добавлен в аккаунт, он **невидим** для торговли — раннер его не увидит и не продаст. Импорт закрывает этот пробел. ```mermaid flowchart TB subgraph До["До импорта"] I1["Предмет в инвентаре Steam"] -. не отслеживается .-> X["Раннер не видит → не продаёт"] end subgraph После["После «Импорт инвентаря»"] I2["Предмет в инвентаре Steam"] --> T["Добавлен в список(покупка/продажа выключены)"] T --> R["Виден раннеру — можно включить торговлю"] end ``` После импорта появится сводка вида **«Импорт: добавлено N, уже отслеживается N, нет в каталоге N»**: - **добавлено** — новые предметы, подобранные из каталога по названию; - **уже отслеживается** — были в списке раньше, пропущены; - **нет в каталоге** — найдены в инвентаре, но в каталоге их пока нет, поэтому добавить не удалось. Импортированные предметы добавляются с **выключенной** покупкой и продажей — они только отслеживаются, пока вы сами не включите нужные тумблеры **«BUY»** / **«SELL»**. ## Группы Предметы можно объединять в **группы**, чтобы задавать им отдельную стратегию. Группы живут на вкладке **«Маркет»**: создать новую можно через **«Создать группу»**, а перемещать предметы — массовым действием **«Переместить…»**. Главное про группы: **стратегия группы переопределяет стратегию аккаунта** для входящих в неё предметов. Это удобно, когда для разных наборов нужен разный подход — например, осторожные настройки для дорогих предметов и более агрессивные для ликвидных. Параметры стратегии описаны в гайде [Настройки торговли](/guides/trading-settings). :::info[🖼 Скриншот] Вкладка «Маркет»: панель групп с кнопкой «Создать группу» и выбранной группой, рядом таблица предметов этой группы. ::: ## Дальше - [Как работает торговля](/guides/how-trading-works) — циклы, статусы предметов, состояния раннера - [Настройки торговли](/guides/trading-settings) — стратегии аккаунта и групп - [FAQ](/guides/faq) — «предмет не продаётся», «в колонке Свои ноль» - [Глоссарий](/guides/glossary) --- ## Настройки торговли # Настройки торговли Это вкладка **«Стратегия торговли»** в рабочем пространстве аккаунта. Здесь вы задаёте, по какой цене бот покупает и продаёт, какую прибыль закладывает, как защищается от падающего рынка и насколько агрессивно действует. Документ разобран **ровно по тем же секциям, что вы видите на экране**, и каждый параметр назван его **точной русской подписью из интерфейса** «в кавычках». Где это полезно, рядом в `коде` приведён внутренний ключ — но ориентируйтесь на подпись. :::tip[Начните с пресета, потом тюнингуйте] Не настраивайте 30 полей вручную. Вверху вкладки есть три **пресета** — **«Безопасная» / «Сбалансированная» / «Агрессивная»**. Нажмите один (он заполнит ключевые поля разумными значениями), затем меняйте только то, что вам важно. Реальные значения пресетов — в [таблице ниже](#пресеты-стратегий). ::: :::info[🖼 Скриншот] Вкладка **«Стратегия торговли»** целиком. Подписать: (1) переключатель пресетов слева вверху («Безопасная / Сбалансированная / Агрессивная»), (2) выпадающий список области применения справа («По умолчанию» / «Группа · …»), (3) кнопки **«Сбросить»** и **«Сохранить»**. ::: ## Область применения: аккаунт или группа Справа вверху — выпадающий список: - **«По умолчанию»** — настройки действуют на **весь аккаунт**. - **«Группа · _имя_»** — переопределения **только для предметов этой группы**. Под переключателем показывается «затронуто предметов: N». Настройки группы накладываются поверх аккаунтных, так что один аккаунт может вести разные стратегии для разных наборов предметов. После правок жмите **«Сохранить»**, либо **«Сбросить»**, чтобы откатить несохранённое. --- ## Как считается цена Цена формируется в два этапа: алгоритм даёт **базовую** цену из рыночных данных, затем поверх неё накручиваются комиссия Steam, ваш процент прибыли и клэмпы (минимумы прибыли). ```mermaid flowchart LR A["Рыночные данные(снапшоты продаж / стакан)"] --> B["Алгоритм цены(MS / HG / HSG / AVG / LG / BG / OG)"] B --> C["Базовая цена"] C --> D["× Множитель цены"] D --> E["+ комиссия Steam+ Целевая доходность %"] E --> F["Клэмп по Мин. доходностии Мин. прибыли"] F --> G["Итоговая цена(для продажи — NET)"] ``` :::note[Цена продажи — это NET] Цена, которую вы задаёте/получаете при продаже, — это сумма, которую **получает продавец** (за вычетом комиссий Steam). Покупатель платит больше (gross). Система считает обе величины и отправляет в Steam именно **net** — иначе листинг был бы завышен примерно на 15 % и не продавался. Подробнее — [Глоссарий](/guides/glossary). ::: :::note[Откуда берутся данные о ценах] «График продаж» для алгоритмов строится из **снапшотов**, которые сервис накапливает каждые ~6–8 часов, а не из разовых обращений к Steam. Чем дольше работает накопление, тем устойчивее цена. Стакан ордеров (для алгоритма «Стакан» и для live-проверок) подтягивается в момент решения. ::: --- ## Полная таблица настроек Ниже — все поля, сгруппированные **по секциям экрана**. Колонка «0 / пусто = …» — самый важный столбец: у многих настроек ноль или пустое значение означает «выключено», а не «лимит 1». :::caution[Мажорные единицы против центов] Большинство денежных полей задаются в **мажорной валюте** (доллары/рубли, например `2` = 2 $), а **не** в центах. Это касается, в частности, **«Мин. прибыль»** и **«Не продавать, если стикеры $ >»**. Проценты и количества — как обычно. ::: ### Игра | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Игра»** (`appid`) | Каталог предметов, по которому идёт анализ (CS2 = `730`, Rust = `252490`). Управляет тем, какие гарды показываются (стикеры/float — только для CS2). | выбор | текущий аккаунта | — | ### Цели по прибыли | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Целевая доходность»** (`profitPercent`) | Целевая маржа поверх базовой цены. | % | по пресету | без наценки | | **«Мин. доходность»** (`profitPercentMin`) | Нижняя граница маржи — цена не опустится ниже неё. | % | по пресету | без нижней границы | | **«Мин. прибыль»** (`minProfit`) | Минимальная абсолютная прибыль на сделку. **Мажорные единицы** (не центы!). | валюта | — | без абсолютного минимума | ### Финансовая защита | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Макс. суммарная экспозиция ($)»** (`maxOrderExposure`) | Жёсткий потолок суммы всех открытых buy-ордеров. | валюта | — | **авто**: ограничивает только баланс (10× баланса кошелька) | :::warning[Лимит экспозиции] Если **«Макс. суммарная экспозиция»** не задана, единственный ограничитель — **баланс × 10**. На реальном балансе это разрешит крупную суммарную экспозицию. **Перед боевым запуском задайте конкретный потолок.** При неизвестном балансе (аккаунт ещё не синкнут) система считает баланс равным **0** и ордера не ставит — это защита, а не ошибка. ::: ### Продажа | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Алгоритм»** (`sellAlgorithm`) | Алгоритм цены продажи (см. [таблицу алгоритмов](#какой-алгоритм-выбрать)). | выбор | по пресету | — | | **«Множитель цены»** (`sellAlgorithmCoefficient`) | Коэффициент к базовой цене алгоритма. | множитель | `1` | — | | **«Авто-перебивание»** (`removeFromSaleIfCompetitor`) | Снимать листинг, если конкурент встал ниже (перебил), чтобы перевыставиться. | вкл/выкл | выкл | выкл | ### Покупка | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Алгоритм»** (`buyAlgorithm`) | Алгоритм цены покупки. | выбор | по пресету | — | | **«Множитель цены»** (`buyAlgorithmCoefficient`) | Коэффициент к базовой цене алгоритма. | множитель | `1` | — | | **«Смещение цены (стакан)»** (`orderBidOffset`) | Только для алгоритма «Стакан»: на сколько процентов **ниже верхнего buy-ордера** встать. **Может быть отрицательным** (встать выше топ-ордера). | % | по пресету (−0.5…0.5) | ровно на уровне верхнего ордера | | **«Размер ордера»** — режим **`%`** (`orderQuantityPercent`, `orderSizeMode='percent'`) | Количество = `round(месячные_продажи × % / 100)`, ограничено «Макс. предметов для ордеров». Объём масштабируется под ликвидность. | % | по умолчанию | — | | **«Размер ордера»** — режим **«Фикс»** (`orderFixedQuantity`, `orderSizeMode='fixed'`) | Ровно столько штук в ордере, игнорируя ликвидность и потолок. | шт | `1` | — | | **«Лимит позиции»** (`maxInventory`) | Потолок **общего** количества предмета на руках (инвентарь + открытые ордера). Достигнут — покупка по предмету пропускается. | шт | — | без лимита | :::info[Транзиентная пауза покупки] Если Steam отвечает «инвентарь полон» или «недостаточно средств», система **временно** ставит покупку на паузу (cooldown), при этом продажа продолжается (освобождает инвентарь и средства). Покупка возобновляется автоматически. Ваши per-item флаги при этом не трогаются. ::: ### Фильтры рынка | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Мин. продаж в месяц»** (`cntSalesMonth`) | Не торговать предметы, у которых меньше N продаж в месяц (фильтр неликвида). При отсутствии данных о продажах — fail-closed (режется). | шт/мес | по пресету | без фильтра ликвидности | | **«Глубина очереди покупки (× продажи)»** (`ordersPlace`) | Depth-гейт покупки: лимит = `месячные_продажи × ordersPlace / 100`. Если очередь на нашей цене глубже — покупку пропускаем. | % от мес. продаж | — | `0` / `-1` / пусто = **выкл** | | **«Глубина очереди продажи (% продаж)»** (`listingPlace`) | Аналогичный depth-гейт со стороны продажи. | % от мес. продаж | — | `0` = **выкл** (не «лимит 1») | | **«Макс. предметов для ордеров»** (`maxItemsForOrders`) | Потолок штук на один buy-ордер в режиме `%`. | шт | **`1`** при 0/пусто | по умолчанию 1 предмет на ордер | ### Глубина анализа | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Дней истории цен»** (`countDayHistoryGraph`) | Сколько дней истории продаж берётся в расчёт алгоритма. | дни | по умолчанию | — | | **«Фильтр выбросов % (коридор)»** (`percentLimit`) | Отсекает аномальные точки цены вне коридора ±%. | % | по умолчанию | без отсечки выбросов | | **«Проверять ордера на покупку»** (`checkHistogramBeforeBuy`) | Перед покупкой сверяться с живым стаканом, подрезать цену до `верхний_ордер + 1`; если уходим выше потолка — пропустить. | вкл/выкл | выкл | выкл | | **«Проверять листинги на продажу»** (`checkHistogramBeforeSell`) | Перед листингом сверяться с рынком и при необходимости встать на 1 единицу ниже самого дешёвого листинга, но не ниже профит-флора. | вкл/выкл | выкл | выкл | ### Защита по тренду Таблица «период × направление». Значение — порог в процентах: при движении сильнее порога предмет блокируется в соответствующую сторону. Падение блокирует **покупку** (не ловим падающий нож); рост может блокировать сторону по логике тренда. **Важно:** блок «падение» — buy-only, продажа уже имеющегося инвентаря при этом продолжается. | Метка в UI | Что делает | Единицы | 0 / пусто = … | |---|---|---|---| | **«Месяц» → «Падение %» / «Рост %»** (`monthTrend` / `monthTrendUp`) | Порог месячного тренда вниз / вверх. | % | выкл | | **«Неделя» → «Падение %» / «Рост %»** (`weekTrend` / `weekTrendUp`) | Порог недельного тренда. | % | выкл | | **«День» → «Падение %» / «Рост %»** (`dayTrend` / `dayTrendUp`) | Порог дневного тренда. | % | выкл | ### Обслуживание и защита Запускается автоматически примерно раз в час. | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Отменять, если прибыль превышает %»** (`cancelOrderIfProfitMoreThen`) | Отменяет зависший **buy-ордер**, если потенциальная прибыль по нему стала слишком велика (рынок ушёл). Ставьте **высоко (≥50 %)** — низкие значения отменяют здоровые ордера. | % | — | пусто = **выкл** | | **«Отклонение для переоценки %»** (`repriceDeviationPercent`) | Если цена листинга «уехала» от свежей рыночной больше чем на этот %, листинг снимается; следующий цикл продажи перевыставит его по новой цене. | % | по умолчанию | `0` = переоценка **выключена** (не «нулевая толерантность») | | **«Снимать с продажи через (дней)»** (`removeFromSaleDays`) | Снимать листинги старше N дней. Работает по **живым листингам Steam**, включая созданные вне SteamMarketRunner. | дни | — | `0` / пусто = **выкл** | | **«Отменять buy-ордера через (дней)»** (`cancelBuyOrderDays`) | Авто-отмена buy-ордеров старше N дней (каждый час). | дни | — | `0` / пусто = **выкл** | | **«Снимать даже при активном ордере»** (`removeFromSaleDaysIgnoreOrders`) | Снимать старый листинг, даже если по предмету есть активный buy-ордер. | вкл/выкл | выкл | выкл | | **«Keep sticker items»** ⚠ (`removeFromSaleDaysSkipWithStickers`) | Не снимать автоматически старые листинги, несущие стикеры. | вкл/выкл | выкл | выкл | | **«Отменять ордера при переизбытке»** (`cancelOrderIfLow`) | Отменять buy-ордера, когда наше предложение по предмету стало велико. | вкл/выкл | выкл | выкл | #### Гарды по стикерам и float (только CS2) Эти поля **видны только если «Игра» = CS2** (`appid 730`). Для Rust секции нет. | Метка в UI | Что делает | Единицы | 0 / пусто = … | |---|---|---|---| | **«Не продавать, если стикеры $ >»** (`dontSellIfStickersPrice`) | Не продавать предмет, если суммарная цена стикеров выше порога. **Мажорные единицы.** | валюта | без порога | | **«Не продавать, если серия стикеров >»** (`dontSellIfStickersStreak`) | Не продавать при N одинаковых стикеров подряд. | шт | без проверки | | **«Float guard»** ⚠ (`checkFloat`) | Включает фильтр по float; открывает поля «Float min/max». | вкл/выкл | выкл | | **«Float min» / «Float max»** ⚠ (`floatMin` / `floatMax`) | Не продавать предметы вне диапазона float. Достаточно одной границы (min→0, max→1). | 0…1 | — | :::note[Не все CS2-подписи переведены] В текущей версии подписи **«Keep sticker items», «Float guard», «Float min», «Float max»** ещё **не локализованы** — в интерфейсе они показываются по-английски (резервные значения). Остальные стикер-поля переведены. Не пугайтесь английского текста в этой подсекции. ::: :::note[Когда гарды float/стикеров реально срабатывают] Гарды активируются **только при наличии данных**. Резолв float требует включённого внешнего inspect-сервиса (по умолчанию выключен). Без данных гард — безопасный no-op: он не блокирует продажу «на пустом месте». ::: ### Скорость торговли | Метка в UI | Что делает | Единицы | По умолчанию | 0 / пусто = … | |---|---|---|---|---| | **«Предметов за цикл»** (`maxCandidates`) | Сколько предметов обрабатывается за один цикл продажи/покупки. Клампится потолком платформы. | шт | **25** | по умолчанию 25 | | **«Задержка между действиями»** (`requestDelayMs`) | Пауза между действиями Steam внутри цикла. **Главный анти-микробан-рычаг:** больше = безопаснее (меньше риск микробана), но медленнее. | мс | минимум платформы | `0` = максимально быстро | :::tip[Микробан-защита] **«Задержка между действиями»** — ваш главный инструмент против микробанов. Если Steam начинает «капризничать» (отказы, временные блоки), увеличьте задержку (например, 500–1500 мс). Риск от агрессии изолирован на вашем аккаунте, но Steam не любит спам по одной сессии. ::: --- ## Какой алгоритм выбрать Семь алгоритмов. Шесть редуцируют **график продаж** (накопленные снапшоты), седьмой — **«Стакан»** — работает по живому order-book. Алгоритм покупки и продажи выбираются **раздельно**. | Код / подпись в UI | Что берёт за основу | Для | Когда брать | |---|---|---|---| | **MS** · «Самая частая (модальная цена)» | мода (самая частая цена) графика продаж | прод./покуп. | стабильные ходовые предметы | | **HG** · «Максимум (медиана дневных максимумов)» | медиана дневных **максимумов** | продажа | продавать ближе к верхней границе | | **HSG** · «Максимум — безопасно (мин. дневной максимум)» | **минимум** дневных максимумов | продажа | осторожнее, чем HG | | **AVG** · «Среднее (медиана продаж)» | взвешенная медиана | прод./покуп. | сбалансированно | | **LG** · «Минимум (медиана дневных минимумов)» | медиана дневных **минимумов** | прод./покуп. | продавать быстро / закупать дёшево | | **BG** · «Покупка (дневные минимумы как цена покупки)» | медиана дневных минимумов как **цена покупки** | покупка | агрессивная закупка по низу | | **OG** · «Стакан (% от верхнего ордера)» | верхний buy-ордер ± **«Смещение цены (стакан)»** | покупка | вставать в очередь относительно топ-ордера | Куда «приземляется» каждый алгоритм относительно дневного коридора цены: ```text высоко ┌─────────────── HG (медиана дневных максимумов) │ HSG (мин. дневной максимум) цена │ MS / AVG (центр массы продаж) │ LG / BG (медиана дневных минимумов) низко └─────────────── OG: не из графика продаж, а от верхнего buy-ордера в стакане ── смещение «Смещение цены (стакан)» (±%, может быть отрицательным) ``` :::note[Алгоритм «Стакан» (OG) и «Смещение цены (стакан)»] OG не использует график продаж. Он берёт **верхний buy-ордер** из стакана и сдвигает на **«Смещение цены (стакан)»** (`orderBidOffset`) процентов **ниже**. Положительное смещение → встаём ниже топ-ордера (дешевле, дольше ждать исполнения); **отрицательное** → встаём выше (быстрее, но дороже). Пресеты используют −0.5 / 0 / 0.5. ::: --- ## Пресеты стратегий Реальные значения трёх пресетов (кнопки вверху вкладки). Нажатие пресета заполняет именно эти поля; остальные не трогаются. | Поле | **«Безопасная»** | **«Сбалансированная»** | **«Агрессивная»** | |---|---|---|---| | «Целевая доходность» (`profitPercent`) | 12 % | 8 % | 4 % | | «Мин. доходность» (`profitPercentMin`) | 8 % | 4 % | 2 % | | «Алгоритм» продажи (`sellAlgorithm`) | HG | HG | AVG | | «Алгоритм» покупки (`buyAlgorithm`) | LG | HG | HG | | «Смещение цены (стакан)» (`orderBidOffset`) | 0.5 | 0 | −0.5 | | «Мин. продаж в месяц» (`cntSalesMonth`) | 20 | 5 | 1 | | «Неделя · Падение %» (`weekTrend`) | 10 | 15 | 30 | | «День · Падение %» (`dayTrend`) | 3 | 5 | 10 | Логика: - **«Безопасная»** — высокая маржа, продаём дорого (HG) и покупаем дёшево (LG), берём только ликвид (≥20 продаж/мес), жёсткая защита по тренду. - **«Сбалансированная»** — умеренная маржа, тот же алгоритм на обе стороны (HG), средний фильтр ликвидности. - **«Агрессивная»** — тонкая маржа, продаём по среднему (AVG), покупаем по HG со смещением выше топ-ордера, торгуем даже неликвид (≥1 продажа/мес), широкие пороги тренда. --- ## Обслуживание (что происходит автоматически) Раз в ~час, без вашего участия: - **Отмена невыгодных/зависших ордеров** — по **«Отменять, если прибыль превышает %»** и по логике переизбытка. - **Переоценка** — снимает «уехавшие» листинги (порог **«Отклонение для переоценки %»**); следующий цикл продажи перевыставит их по свежей цене. - **Снятие старых листингов** — по **«Снимать с продажи через (дней)»** и сопутствующим флагам. - **Отмена старых buy-ордеров** — по **«Отменять buy-ордера через (дней)»**. Подробный разбор цикла — в [Как работает торговля](/guides/how-trading-works). --- ## Дальше - [Как работает торговля](/guides/how-trading-works) — что система делает в каждом цикле. - [Подключение Steam-аккаунта](/guides/connecting-steam-account) — прежде чем настраивать стратегию. - [Инвентарь и холды](/guides/inventory-and-holds) — почему предмет может не продаваться. - [Глоссарий](/guides/glossary) — net/gross, eligibility, microban, депт-гейт и др. --- ## Что такое SteamMarketRunner # Что такое SteamMarketRunner **SteamMarketRunner** — сервис, который автоматизирует торговлю предметами на **Steam Community Market**. Вы подключаете свои Steam-аккаунты, выбираете предметы и стратегию, нажимаете **«Запустить торговлю»** — дальше система сама выставляет ордера на покупку, листинги на продажу, подтверждает их и поддерживает в актуальном состоянии. :::tip[Коротко] Вы задаёте **что** торговать и **по каким правилам** (цена, прибыль, объём). SteamMarketRunner крутит цикл buy → sell → подтверждение → реконсиляция за вас, по расписанию. ::: ## Что делает система - **Покупка** — выставляет buy-ордера по рассчитанной цене (один из 7 алгоритмов + ваш процент прибыли), с учётом баланса и глубины стакана. - **Продажа** — листингует предметы из инвентаря, автоматически подтверждает листинги (мобильное подтверждение), при необходимости подрезает цену под рынок. - **Обслуживание** — отменяет невыгодные ордера, реценит «уехавшие» листинги, снимает старые листинги (если включено). - **Здоровье аккаунта** — держит свежими баланс кошелька, сессию Steam и состояние инвентаря; сам перелогинивается при истёкшей сессии. ## С чего начать 1. [**Быстрый старт**](/guides/getting-started) — путь от регистрации до первой сделки. 2. [**Подключение Steam-аккаунта**](/guides/connecting-steam-account) — что нужно и как это безопасно. 3. [**Настройки торговли**](/guides/trading-settings) — все параметры человеческим языком (алгоритмы цены, прибыль, объём ордера). ## Полезное - [Как работает торговля](/guides/how-trading-works) — что происходит в каждом цикле. - [Инвентарь и холды](/guides/inventory-and-holds) — почему предмет иногда не продаётся. - [Дашборд](/guides/dashboard) — что означают цифры. - [FAQ и решение проблем](/guides/faq) · [Глоссарий](/guides/glossary) :::info[Для AI-агентов] Документация доступна в машинно-читаемом виде: [`/llms.txt`](/llms.txt) (индекс) и [`/llms-full.txt`](/llms-full.txt) (полный текст). На этой же базе работает MCP-сервер (`@steammarketrunner/mcp`) — он уже доступен и даёт агентам поиск по докам и API. См. [Агенты и MCP](/guides/agents-and-mcp). :::