Pricing algorithms
How a buy price and a sell price are derived from Steam price history, and which filters can veto a purchase.
Every price the bot uses comes from one analysis run over Steam's public price history for that item. The run produces a buy price, a sell price, and a verdict on whether the item may be bought.
Two sides of every price
Steam charges the buyer; the seller receives less. XBOT tracks both:
| Name | Meaning |
|---|---|
| Steam price | What a buyer pays — the number shown on the Steam page. |
| Sell price | What the seller receives after Steam's fee. |
| Buy price | What the bot offers in a buy order. |
The conversion uses a fixed multiplier of 1.15:
steam price = sell price × 1.15
sell price = steam price ÷ 1.15The analysis window
- Steam's price history is read in the market timezone (America/Phoenix).
- Points are bucketed: period = the last Analysis period days ending yesterday, plus week (7 days), month (30 days) and today. Today's trades never enter the pricing window — only the trend filters read them.
- The Corridor filter drops points further than
corridor %from the bucket average. With0nothing is dropped. - If the period bucket is empty after filtering — or Steam returned fewer than four history points — the analysis is skipped: the item keeps its current prices and no error is raised.
Algorithms
All five run on the same window; the group picks one for the buy side and one for the sell side independently. "Daily high/low" means the highest or lowest price a calendar day traded at.
| Algorithm | Base price | Anchored to |
|---|---|---|
| Maximal | median of the daily highs | sell side |
| Safe | the lowest daily high | sell side |
| Average | mean of every trade in the window | sell side |
| Low | median of the daily lows | sell side |
| Buy | median of the daily lows | buy side |
Sell-anchored algorithms take their base price as the Steam price, strip the fee to get the sell price, then subtract the markup to get the buy price:
steam price = base
sell price = base ÷ 1.15
buy price = sell price − markup % of sell priceBuy goes the other way — the base price is the buy price, and the sell price is the price that yields the configured margin:
buy price = base
sell price = buy price ÷ (1 − markup / 100)
steam price = sell price × 1.15Low vs Buy
Both read the median of the daily lows. They differ in what that number becomes: Low treats it as the price buyers pay (so your buy order lands a markup below it), Buy treats it as your own bid (so your listing lands a markup above it). Buy is the more aggressive of the two.
The Average algorithm reads the history before the corridor filter, so it is the only mode that ignores Corridor, %.
Scaling
The chosen prices are then scaled by their own shares:
buy price = buy algorithm price × (Buy algorithm, % ÷ 100)
sell price = sell algorithm price × (Sell algorithm, % ÷ 100)The Steam price is re-derived from the scaled sell price. A share of 0 is treated as 100.
Outbidding
With Outbid the highest buy order enabled, a calculated buy price above the highest existing buy order is pulled down to that order plus one cent — enough to lead the queue, and no more. The option also forces an order-book request on every analysis.
Filters
Filters decide whether the item may be bought. They never change a price, and they never stop selling.
| Filter | Passes when |
|---|---|
| Sales per day | window volume ÷ window days (rounded down) ≥ the configured minimum |
| Weekly trend | today's average stays within the rise/drop limits around the 7-day average |
| Monthly trend | today's average stays within the rise/drop limits around the 30-day average |
| Daily trend | always — the comparison is against today's own average |
| Order book coefficient | quantity queued at or above your buy price ≤ daily sales × the coefficient |
| Position in listing | your Steam sell price lands no deeper than the configured position in the listing queue |
A filter set to 0 is disabled. One failing filter is enough to block the purchase; the item is
still listed and sold as usual.
Worked example
A group with Safe on both sides, markup 3 %, shares at 100 %, over a 5-day window whose daily
highs are 2.30, 2.20, 2.00, 2.45, 2.10:
base (lowest daily high) = 2.00 → Steam price 2.00
sell price = 2.00 / 1.15 = 1.74
buy price = 1.74 − 3 % = 1.69The bot bids 1.69, lists at a Steam price of 2.00, and nets 1.74 per sale before the market moves.