Trading settings
The Trading strategy tab controls how the automation runner buys and sells, which profit target it uses, how it protects against bad market conditions, and how aggressively it acts.
These settings can place real Steam buy orders, create listings, accept confirmations, and remove or reprice listings. No automation can promise returns, account safety, or stable market conditions. Start with low exposure, small item scopes, and conservative delays before scaling live trading.
This guide follows the same sections you see in the UI. Where helpful, the internal setting key is shown in code, but the UI label is the primary reference.
Every new Steam account is seeded with a conservative Default strategy (see below). Do not configure every field manually on day one: tune only the settings you understand and need.
The tab shows the effective value the engine uses. Clearing a field does not turn the rule off — it removes your override, and the field falls back to the strategy value. To switch a threshold off, enter the "off" value from the tables below (usually 0 or -1).
Scope: account or group
The selector in the top-right chooses where settings apply:
- Default — account-wide settings.
- Group · name — overrides for one item group only.
Group settings are layered on top of account settings, so one Steam account can run different strategies for different item sets.
How price is calculated
Pricing has two stages: a market algorithm calculates the base price, then Steam fees, target profit, and minimum-profit clamps are applied.
The sell price shown and sent to Steam is the amount the seller receives after Steam fees. The buyer pays the higher gross amount. Sending gross as the listing price would overprice the listing by roughly the fee.
Sale history is built from price snapshots collected every 6–8 hours, not from one-off Steam calls per item. Order-book data for OG and live buy guards is fetched at decision time.
Main settings
Section names below match the UI. The main card shows Buying and Selling; the remaining sections are under Advanced settings.
Game
| UI label | Meaning | Units | Default |
|---|---|---|---|
Game (appid) | Item catalog and game-specific guards. CS2 is 730, Rust is 252490. | select | account game |
Profit targets
| UI label | Meaning | Units | 0 means |
|---|---|---|---|
Target margin (profitPercent) | Desired margin on top of the buy price. | % | no markup |
Min margin (profitPercentMin) | Lower margin bound; items below it are rejected. | % | no lower bound |
Min profit (minProfit) | Absolute minimum profit per trade. Uses major currency units, not cents. | currency | no absolute minimum |
Financial safety
| UI label | Meaning | Units | 0 / empty means |
|---|---|---|---|
Max total exposure ($) (maxOrderExposure) | Hard cap for the value of all open buy orders. | currency | automatic balance-only guard |
Per-item position limit (maxInventory) | Max units per item: inventory (including held copies) + your active listings + open buy-order quantity. | pcs | no limit |
If the exposure cap is not set, the only guard is 10× wallet balance (already open buy orders count toward it). When wallet balance is unknown, the planner treats it as 0 and skips buying.
Selling
| UI label | Meaning | Off / neutral value |
|---|---|---|
Algorithm (sellAlgorithm) | Sell price algorithm. | — |
Price multiplier (sellAlgorithmCoefficient) | Multiplier applied to the algorithm result. | 1 |
Reprice deviation % (repriceDeviationPercent) | Removes a listing whose price drifted from the fresh market price; the next sell cycle relists it. | 0 = repricing off |
Auto-undercut guard (removeFromSaleIfCompetitor) | Remove a listing when a competitor undercuts it, so the next sell cycle can relist. | off |
Validate sell listings (checkHistogramBeforeSell) | Currently does not change the price: sell listings are placed at exactly the strategy price, without order-book undercutting. | — |
Buying
| UI label | Meaning | Off / neutral value |
|---|---|---|
Algorithm (buyAlgorithm) | Buy price algorithm. | — |
Price multiplier (buyAlgorithmCoefficient) | Multiplier applied to the algorithm result. | 1 |
Bid offset (Order book) (orderBidOffset) | For OG: percentage below the top buy order. Negative values bid above the top. | 0 = exactly at top buy order |
Buy order quantity (% sales) (orderQuantityPercent, % mode) | Quantity = monthly sales × percent / 100, capped by Max units per buy order. | quantity 1 |
Units per buy order (orderFixedQuantity, Fixed mode) | Fixed item count, ignoring liquidity percentage and cap. | 1 |
Validate buy orders (checkHistogramBeforeBuy) | Before placing an order, read the live order book: lower the bid to top buy order + 1 cent when possible, skip if even that exceeds your price, and skip if the order book cannot be read. Required for the live depth guards below. | on for new accounts |
When Steam reports a full inventory or insufficient funds, buying is paused temporarily while selling continues. Item-level flags are not changed.
Market filters
| UI label | Meaning | Off means |
|---|---|---|
Min monthly sales (cntSalesMonth) | Liquidity filter. Missing sales data fails closed. | 0 / -1 |
Buy depth relative to sales (ordersPlace) | Buy depth gate as a multiplier of monthly sales: limit = max(1, round(monthly sales × ordersPlace)). 1 ≈ monthly sales, 0.5 = half. Not an item count. | 0 / -1 |
Max units ahead of buy order (maxBuyQueueAhead) | Absolute cap on buy-order units ahead of our price in the live order book. | empty / 0 |
Skip buys far below top buy (maxBuyBehindTopPct) | Skip the item if our planned bid is more than this % below the current top buy order. Does not raise the price. | empty / 0 |
Sell depth relative to sales (listingPlace) | Sell-side depth gate as a percent of monthly sales: 100 = up to monthly sales volume, not 100 listings. | 0 / -1 |
Max units per buy order (maxItemsForOrders) | Cap for % order-size mode. | 0 / unset = 1 unit (new accounts start at 5) |
Max units ahead of buy order and Skip buys far below top buy are checked only against the live order book, so they run only when Validate buy orders is on. Buy depth relative to sales is checked both during analysis (stored order-book data) and, with validation on, against the live order book.
Analysis depth
| UI label | Meaning | Default |
|---|---|---|
Price-history days (countDayHistoryGraph) | Days of sale history used by algorithms, 1–90. | 7 (also used for empty, 0, or invalid values) |
Outlier filter % (corridor) (percentLimit) | Drops abnormal points outside a corridor. | 0 = no outlier filter |
Trend guard
Trend thresholds are percentages. An item is not bought if its price fell (or rose) more than the threshold over the period; selling existing inventory continues.
| UI label | Meaning | Off means |
|---|---|---|
Monthly → Down % / Up % (monthTrend / monthTrendUp) | Monthly trend thresholds. | 0 / -1 |
Weekly → Down % / Up % (weekTrend / weekTrendUp) | Weekly trend thresholds. | 0 / -1 |
Daily → Down % / Up % (dayTrend / dayTrendUp) | Daily trend thresholds. | 0 / -1 |
If there is not yet enough price history for a period, that trend gate is skipped for the item.
Maintenance & guards
Maintenance runs automatically about once per hour while trading is started for the account.
| UI label | Meaning | Off means |
|---|---|---|
Cancel if profit exceeds % (cancelOrderIfProfitMoreThen) | Cancels a stale buy order when potential profit becomes suspiciously high. Use high values such as 50%+. | empty / 0 |
Remove from sale after (days) (removeFromSaleDays) | Removes live Steam listings older than N days, including listings created outside SteamMarketRunner. | empty / 0 |
Cancel buy orders after (days) (cancelBuyOrderDays) | Cancels buy orders older than N days. | empty / 0 |
Recheck open buy orders (autoCancelUnprofitableBuyOrders) | Cancels an open buy order only when a fresh catalog snapshot proves it no longer meets minimum profit. No extra Steam requests. | off |
Remove even with an active order (removeFromSaleDaysIgnoreOrders) | Allows old-listing removal even when a buy order exists for the item. | off |
Keep sticker items (removeFromSaleDaysSkipWithStickers) | Do not auto-remove old listings with stickers. | off |
Cancel oversupplied orders (cancelOrderIfLow) | Cancels a buy order once your listings + inventory of the item reach half of the order quantity. | off |
CS2 sticker and float guards
These controls are shown for CS2 (appid 730) only.
| UI label | Meaning | Off means |
|---|---|---|
Block sell if sticker $ > (dontSellIfStickersPrice) | Block selling when sticker value exceeds the threshold. Uses major currency units. | no threshold |
Block sell if sticker streak > (dontSellIfStickersStreak) | Block when N identical stickers appear in a row. | off |
Float guard (checkFloat) | Enable float range checks. | off |
Float min / Float max (floatMin / floatMax) | Allowed float range; one boundary is enough. | no bound |
Sticker/float guards only fire when enrichment data exists. Without inspect data they are safe no-ops.
Trading speed
| UI label | Meaning | Default |
|---|---|---|
Items per cycle (maxCandidates) | How many items one buy/sell cycle processes. Platform caps apply. | 25 when empty |
Delay between actions (requestDelayMs) | Pause between Steam mutations inside a cycle. Higher is safer but slower. | 0 = fastest allowed |
Choosing an algorithm
| Code · UI label | Basis | Best for |
|---|---|---|
| MS · Most frequent | mode of sale graph | stable liquid items |
| HG · Maximum | median of daily highs | selling near the upper range |
| HSG · Maximum (safe) | minimum daily high | more conservative selling than HG |
| AVG · Average | weighted median of sales | balanced buy/sell |
| LG · Lowest | median of daily lows | quick sell or cheap buy |
| BG · Buy at lows | daily lows as buy price | aggressive low buying |
| OG · From order book | top buy order minus Bid offset | queueing relative to live top buy order |
Buy and sell algorithms are chosen separately.
Default strategy for new accounts
There are no strategy presets in the UI. A new Steam account is seeded with a Default strategy; the tab shows these as effective values until you override them:
| Field | Default |
|---|---|
| Sell / buy algorithm | AVG / AVG |
| Target margin / Min margin | 8% / 4% |
| Min profit | 0.03 (major units) |
| Min monthly sales | 5 |
Buy depth relative to sales (ordersPlace) | 10 |
Sell depth relative to sales (listingPlace) | 10 |
| Trend guard, Down % | month 30 · week 25 · day 20 (Up: off) |
| Price-history days | 7 |
| Max units per buy order | 5 |
| Validate buy orders / Validate sell listings | on / on |
What maintenance does
About once per hour, while trading is started, SteamMarketRunner can:
- cancel unprofitable or suspiciously stale buy orders;
- remove drifted listings for repricing by the next sell cycle;
- remove old listings after a configured age;
- cancel old buy orders.