> For the complete documentation index, see [llms.txt](https://erikino.gitbook.io/skintellect-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://erikino.gitbook.io/skintellect-docs/buy-modules/steam-buyer.md).

# Steam Buyer

Документация использования Steam Buyer

Steam Buyer — модуль для автоматической выставки и сопровождения buy orders на Steam Market по заданным фильтрам, приоритетам и алгоритмам ценообразования.

> Рекомендуется сначала проверить доступ к аккаунтам Steam и базовые лимиты, затем переходить к тонкой настройке алгоритма.

### Общая информация о модуле

В разделе **Информация о модуле** вы можете:

* проверить текущий статус модуля (включен/отключен)
* запустить или остановить процесс
* увидеть лимит операций
* проверить статус подписки и автопродления

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FzlsyWwywzv0YP70sCnNO%2Fimage.png?alt=media&amp;token=a90586f0-9437-4a48-be21-8b95b4880022" alt=""><figcaption></figcaption></figure>

***

### Аккаунты

Во вкладке **Accounts** отображаются все подключенные аккаунты для Steam Buyer. Что важно:

* у каждого аккаунта есть статус (активен / отключен и т.д.)
* можно включать/выключать участие аккаунта в модуле
* отображается текущий баланс аккаунта
* если аккаунт отключен в SDA, модуль не сможет использовать его для работы

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FcL4KWB0gozW4bj2bVsQE%2Fimage.png?alt=media&amp;token=d3ff75ab-6860-4bee-b468-768ff739c718" alt=""><figcaption></figcaption></figure>

***

### Основные фильтры кандидатов

В этой секции задаются базовые ограничения для отбора предметов:

* `price_min` / `price_max` — диапазон цены
* `percent_min` / `percent_max` — диапазон по прибыли
* `weekly_volume_min` — минимальный недельный объем продаж
* `Max Duplicates Per Item` — максимальное количество дубликатов

#### Режим сортировки кандидатов

Определяет, в каком порядке учитывать кандидатов перед выставлением ордеров:

* **Balanced** — баланс ликвидности, профита и исполнимости
* **Liquidity First** — приоритет ликвидных предметов
* **Profit First** — приоритет прибыльных предметов

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FrvDKnVlAaaCZ9Im7dKFB%2Fimage.png?alt=media&amp;token=d8a62dc8-40ad-41e5-be72-c0bc2bd1cfb2" alt=""><figcaption></figcaption></figure>

***

### Алгоритм расчета цены ордера

Steam Buyer поддерживает два режима:

## 1. Real-time Order Book

Режим **Real-time Order Book** рассчитывает цену buy order по текущему стакану Steam в реальном времени.\
Это самый точный и конкурентный режим, когда важна скорость реакции на изменения рынка.

В этом режиме модуль анализирует актуальные уровни цен и объемов, после чего формирует итоговую цену заявки с учетом выбранного метода, позиции и защитных правил.

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FRgpB1zrEeEHPi5orDLMH%2Fimage.png?alt=media&amp;token=75de1f70-0b0d-484c-a12d-9d18b581f361" alt=""><figcaption></figcaption></figure>

***

### Когда использовать

Режим лучше всего подходит, если:

* предметы достаточно ликвидные
* стакан регулярно обновляется
* нужна максимальная близость к рыночной цене здесь и сейчас
* приоритет — исполнение и конкурентность, а не «долгосрочная усредненная» цена

Если предметы малоликвидные, стакан нестабильный и вы экономите прокси трафик, стоит протестировать `Aggregated Data`

### Методы расчета

В блоке **Метод расчета** выбирается, как именно брать базовую цену из стакана.

#### 1) Позиция в стакане

Модуль берет цену по конкретной позиции `N` в списке buy orders

* `N = 1` — ближайший уровень (самая конкурентная цена)
* Чем больше `N`, тем «глубже» цена в стакане, обычно менее агрессивная
* Подходит для точной стратегии по месту в очереди

Используйте, когда нужен предсказуемый контроль: *«ставлюсь на конкретный уровень, а не по усреднению»*.

#### 2) Среднее по top N

Базовая цена считается как среднее арифметическое по первым `N` уровням стакана

* Сглаживает резкие скачки на одном уровне
* Менее чувствительно к единичным аномалиям
* Хороший компромисс между реактивностью и стабильностью

Подходит, если топ стакана иногда «шумный», но в целом ликвидный.

#### 3) Медиана по top N

Базовая цена считается как медиана по первым `N` уровням

* Лучше защищает от выбросов, чем среднее
* Более устойчива, если в топе встречаются аномальные уровни
* Чуть более консервативна, чем позиционная логика

Обычно это хороший выбор для рынков со скачками и «неровным» топом

#### 4) Первый с объемом

Модуль ищет первый уровень, где объем реально достаточный (не «пустой» уровень), и берет его как базу.

* Помогает избежать привязки к слишком тонким уровням
* Практичен, когда первые строки стакана могут быть не репрезентативны
* Повышает устойчивость при работе с «разреженным» стаканом

Используйте, если важна исполнимость, а не только место в очереди

### Позиция (N)

Параметр **Позиция (N)** задает глубину анализа для позиционного метода и методов top N.

Общая логика:

* меньше `N` -> более агрессивная и конкурентная цена
* больше `N` -> более осторожная цена, потенциально ниже шанс быстрого исполнения

Рекомендуется подбирать `N` по категории предметов:

* ликвидные: обычно низкие `N`
* менее ликвидные: умеренные `N` + проверка в live preview

### Смещение

**Смещение** — ручная прибавка/убавка к рассчитанной базовой цене

* положительное значение -> итоговая цена выше базы
* отрицательное значение -> итоговая цена ниже базы

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

Пример:

* база = `105.00`
* смещение = `+0.01`
* итог = `105.01`

### Gap Guard (Защита от дыр)

**Gap Guard** защищает от аномальных «дыр» в стакане — ситуаций, когда отдельные уровни сильно оторваны от основной массы и могут дать неадекватную цену.

Когда включен Gap Guard, модуль анализирует разрывы между соседними уровнями и применяет заданное поведение.

#### Параметры Gap Guard

* **Макс. разрыв (%)**\
  Максимально допустимый процентный разрыв между соседними уровнями, после которого уровень считается подозрительным.
* **Макс. удалений**\
  Сколько подряд аномальных уровней можно проигнорировать при поиске валидной цены.
* **При нарушении**\
  Что делать, если ограничения превышены:
  * **След. уровень** — перейти к следующему подходящему уровню
  * **Пропустить** — не выставлять заявку для такого расчета/кандидата

#### Практический смысл

Gap Guard полезен, когда:

* в стакане есть одиночные завышенные уровни
* встречаются «пустоты» между ценами
* нужно снизить риск некорректной итоговой цены из-за выбросов

### Live Preview (предпросмотр)

Справа в блоке показывается live preview стакана:

* текущие уровни цены и объема
* отметка вашего уровня (`Ваш ордер`)
* **итоговая цена заявки**, уже с учетом метода, `N`, смещения и Gap Guard

Вы можете выбрать любой существующий скин и увидеть его стакан в live

Рекомендуется проверять preview после изменения параметров

### Рекомендации по настройке

1. Начните с **Позиция в стакане** или **Медиана по top N**.
2. Установите умеренное `N` и минимальное смещение.
3. Включите Gap Guard для защиты от выбросов.
4. Проверьте результат в live preview.
5. После теста скорректируйте `N`/смещение под нужный баланс:
   * быстреее исполнение -> более агрессивные параметры
   * выше устойчивость -> более консервативные параметры

### Частые ошибки

* Слишком низкий `N` без Gap Guard -> переагрессивная цена на шумном рынке.
* Слишком высокий `N` -> заявка уходит слишком глубоко, падает шанс исполнения.
* Большое смещение без проверки preview -> итоговая цена может стать неконкурентной.
* Выключенный Gap Guard на нестабильном стакане -> риск попасть в аномальный уровень.

***

## 2. Aggregated Data

Режим **Aggregated Data** рассчитывает цену buy order на основе агрегированных метрик (медианы, средние и последние продажи), а не только по текущему стакану.\
Это более стабильный и «защитный» режим для неликвидных или шумных предметов.

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2Fs19CTiiSyyWhumkvIXMW%2Fimage.png?alt=media&amp;token=e5489a38-4a18-4893-958a-f0a0ec7076ad" alt=""><figcaption></figcaption></figure>

***

### Когда использовать

Режим **Aggregated Data** лучше подходит, если:

* стакан тонкий или часто «ломается» аномальными уровнями
* предмет торгуется нерегулярно
* важнее устойчивость цены, чем моментальная реакция на каждый тик
* нужно опираться на историю продаж, а не только на моментный order book.

Если нужен максимально агрессивный вход в очередь и повышенная real-time точность, за счёт большего количества прокси трафика, то чаще подойдет `Real-time Order Book`

### Как считается цена

Итоговая цена складывается из:

1. **Базового поля** (источник цены)
2. **Значения корректировки**
3. **Типа корректировки**
4. **Guards (защиты данных)**

Формула в общем виде:

* база = значение выбранного поля
* корректировка применяется по выбранному типу
* после этого проверяются защитные ограничения (свежесть и стабильность данных)

### Базовое поле (Base field)

В выпадающем списке выбирается, от чего считать цену.\
По твоему интерфейсу доступны:

* **Buy Order Price (Top 1)**\
  Самая верхняя цена в buy order стакане. Самый «быстрый» ориентир, но чувствителен к шуму
* **Buy Order Average**\
  Усредненная цена по buy side. Более сглаженный вариант относительно Top 1
* **Buy Order Median**\
  Медианная цена по buy side. Часто самый устойчивый выбор при выбросах
* **Safe Price**\
  Консервативная безопасная оценка (если доступна по данным), обычно менее агрессивная
* **Median 7d**\
  Медиана за 7 дней. Хороший баланс для среднесрочной стабильности
* **Latest Sell 24h**\
  Последняя/актуальная цена продаж в окне 24ч. Реактивнее недельной медианы
* **Latest Sell (All time)**\
  Последняя доступная цена продажи за весь период. Использовать осторожно, если данных мало

#### Практика выбора базы

* Для стабильности: `Buy Order Median` или `Median 7d`
* Для более реактивной работы: `Latest Sell 24h` или `Buy Order Price (Top 1)`
* Для осторожного режима: `Safe Price`

### Значение корректировки (Adjustment value)

Это ручной сдвиг относительно базы.\
Позволяет сместить итог вверх/вниз без смены источника данных.

Пример:

* база `100.00`
* корректировка `+0.01`
* итоговая цена `100.01`

### Тип корректировки

Определяет, как интерпретировать значение корректировки.

#### 1) Абсолютная

Добавляет/вычитает фиксированную сумму в рублях.

* Плюс: простой и предсказуемый контроль
* Минус: одинаковый шаг для дешевых и дорогих предметов может вести себя по-разному в процентах

Подходит для точечной подстройки в узком ценовом диапазоне.

#### 2) Процент (%)

Корректировка считается как процент от базы

* Плюс: масштабируется под цену предмета
* Минус: на дорогих предметах даже небольшой % дает заметный абсолютный сдвиг

Подходит, если нужен единый подход на широком диапазоне цен.

#### 3) Коэфф. (x)

Итог определяется умножением базы на коэффициент

* Плюс: удобно для стратегий вида «держать на X% ниже/выше базы»
* Минус: требует аккуратной настройки, чтобы не уйти в неадекватные значения

Полезен для системной нормализации ценовой политики.

### Guards (Защита данных)

Guards защищают от расчета по устаревшим или ненадежным данным.

#### Макс. возраст данных (часы)

Ограничение на свежесть данных-источников.

* Если данные старше лимита, расчет считается невалидным.
* В preview обычно появляется предупреждение наподобие **`Data is too old`**.

Рекомендация:

* Ликвидные предметы: держать лимит ниже
* Неликвидные: можно увеличить, чтобы не терять слишком много кандидатов

#### Пропускать unstable

Флаг, который исключает кандидаты с нестабильными данными.

* Включено -> осторожнее, меньше риск ошибочной цены
* Выключено -> больше охват, но выше риск шума

Лучше держать включенным.

### Рекомендации по стартовой настройке

Базовый безопасный пресет:

* `Base field`: **Buy Order Median**
* `Adjustment type`: **Абсолютная (RUB)**
* `Adjustment value`: небольшой плюс/минус (например `0.01`)
* `Макс. возраст данных`: умеренное значение (например `6`)
* `Пропускать unstable`: **включено**

Дальше корректируйте под цель:

* больше исполнения -> более реактивная база + мягче guards
* больше качества кандидатов -> более консервативная база + строже guards

### Частые ошибки

* Слишком большой допуск по возрасту -> цена строится по устаревшим данным
* Агрессивная корректировка при «медленной» базе -> рассинхрон с рынком
* Отключенный `Пропускать unstable` на шумных данных -> больше некачественных ордеров
* Выбор редкого источника (например, последний sell для неликвида) без guard-контроля

***

### Разница Real-time Order Book и **Aggregated Data**

**Real-time Order Book**:

* быстрее реагирует на стакан
* лучше для агрессивной конкуренции
* сильнее зависит от качества текущего order book
* использует больше прокси трафика

**Aggregated Data**:

* меньше шумит на неликвидах
* устойчивее к выбросам
* лучше для долгосрочной логики ценообразования
* эффективнее в использовании прокси трафика

***

### Интервал обновления ордеров

**Order Refresh Interval** — как часто отменять текущие buy orders и заново пересобирать кандидатов.

* Меньший интервал повышает реакцию на рынок, но увеличивает количество операций и нагрузку на прокси
* Больший интервал снижает нагрузку, но может ухудшить конкурентность цены

Рекомендуется подбирать интервал под активность рынка, лимиты аккаунта и ваши приоритеты

***

### Черные списки

### Черный список коллекций

Позволяет исключить целые коллекции из отбора:

* поиск по названию
* быстрый выбор из популярных
* список недавно выбранных

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FLtX7tKxWMbcuWrhzpRAX%2Fimage.png?alt=media&amp;token=173c48e2-23f5-4b3d-aff9-77bd10b2a278" alt=""><figcaption></figcaption></figure>

### Черный список скинов

Позволяет точечно исключать конкретные скины:

* поиск по названию
* быстрый выбор популярных позиций
* исключенные скины не будут участвовать в подборе кандидатов

<figure><img src="https://3875082345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7f9eJnTLDfJUD5xYmYpJ%2Fuploads%2FrlzZ9enlB3FsF91eKM05%2Fimage.png?alt=media&amp;token=7be7d172-6eba-4233-9497-d53155141237" alt=""><figcaption></figcaption></figure>

***

### Частые проблемы

#### Модуль не запускается

* Проверьте, что статус модуля **Включен**
* Проверьте подписку и лимит операций
* Убедитесь, что есть хотя бы один активный аккаунт

#### Аккаунт не участвует в работе

* Проверьте статус в Accounts (может быть отключен вручную)
* Проверьте состояние Steam Desktop Authenticator
* Проверьте баланс

#### Неадекватная цена заявки

* Переключите метод расчета (например, с позиции на медиану top N)
* Увеличьте защитные параметры (`Gap Guard`, guards в Aggregated Data)
* Пересмотрите смещение (RUB) и тип корректировки
