Default Values
Every setting's default and accepted range in one table.
Every number on this page is a copy of one that lives in the bot's code. Nothing here is policy - the pages linked from each row are where a setting is actually explained, and this page exists only so you can see all the figures at once, and so you can tell where each one comes from.
That last part matters more than it sounds. A default has three possible sources, and they behave differently when you go looking for one:
| Source | What it means |
|---|---|
| Column default | A default declared beside the column in the bot's own model, which the app applies whenever it creates your row. It is not a database default - the database stores none for any of these columns - so it is the app, never the database, that fills it in. |
| Written at provisioning | The column has no default at all. The value is written explicitly, once, when your account is created on your first message to the bot. |
| Not stored at all | A screen's starting state, rebuilt each time you open it. Nothing is saved until you change something. |
Each table is followed by a note on when its limits are actually checked. Refusing your reply at the prompt and refusing a trade at the exchange are very different guarantees, and this is the only page where you can see which is which.
Risk Management
| Setting | Default | Accepted range | Where it is set |
|---|---|---|---|
| Max Risk Per Trade | 1% | Greater than 0, up to 10 | Written at provisioning |
| Dollar Risk Cap | Enabled | Enabled / Disabled | Column default |
| Collateral Balance | $0.00 | 0 or greater | Written at provisioning |
| Buffer Percent | 2% | 0 to 5 | Column default |
| Balance Range | 15-25% | 0 < min < max ≤ 100 | Column defaults, one per side |
| Max Loss Trades | 2 | A whole number from 1 to 100 | Column default |
| Max Percent Loss | 2% | Greater than 0, up to 100 | Column default |
| Daily Loss Limit mode | Reject Trades | Reject Trades / Cap Risk / Notify Only | Column default |
| Daily Loss Limit status | Enabled | Enabled / Disabled | Column default |
| Trading Days | Monday to Friday allowed, Saturday and Sunday off | Each of the seven, allowed or not | Column default per day |
| Trading Days mode | Reject Trades | Reject Trades / Notify Only | Column default |
| Trading Days status | Enabled | Enabled / Disabled | Column default |
| UTC Offset | UTC+0 | A real offset between -12 and +14 - whole hours, or one of -9.5, -3.5, 3.5, 4.5, 5.5, 5.75, 6.5, 8.75, 9.5, 10.5, 12.75, 13.75 | Column default |
Max Risk Per Trade and Collateral Balance are the two rows above that are not column
defaults. Their columns are NOT NULL with nothing behind them, so a new account is given
both explicitly when it is created. The result you see is identical; what differs is where
to look when the number is not what you expected.
There is one UTC Offset per person, not one per bot. Daily Loss Limit and Trading Days
both write and read the same value, and so does your web profile's time zone - three places
to change it, one clock underneath. So UTC+0 is only where a bot starts when you have no
time zone yet: a bot you add once you have one - on the website or on another bot - starts on
it instead.
Where the risk bounds are enforced
Every range in this table is checked at the prompt, when you reply to it, so a value outside the range is never stored and the panel keeps what it had.
Buffer Percent's 5% ceiling is the one bound here that lives in the trading code rather
than the settings schema - it exists so a buffer can never reserve so much of your exchange
balance that no trade fits. It is still a prompt-time check: it runs before the value is
saved, and never again. At trade time a stored buffer is only applied, not re-checked.
What the settings themselves bound is checked later, and elsewhere:
- Max Risk Per Trade is a ceiling on sizing, applied when a trade is calculated - and again at the prompt when you type an Initial Risk % into Sniper or Manual Entry.
- Daily Loss Limit and Trading Days are checked at trade time, against the day as your UTC Offset defines it.
- Balance Range never refuses anything. It only decides whether you get a warning.
Trading
Most of these are the starting values of the Sniper and Manual Entry screens rather than stored settings - they are rebuilt each time you open the panel, so an account that has never opened either screen still sees them. The three exceptions are named in the last column: Initial Risk % and Symbol are remembered per screen, and your symbol list is seeded the first time you use it.
| Setting | Default | Accepted range | Where it is set |
|---|---|---|---|
| Sniper side | Buy | Buy / Sell | Not stored |
| Timeframe | 5m | 1m, 5m, 15m, 1h, 4h | Not stored |
| Candle Lookback | 2 | A whole number | Not stored |
| SL Buffer | $10 | Dollars; 5 / 10 / 20 offered as buttons | Not stored |
| Target mode | Fixed Risk:Reward | Fixed Risk:Reward / Take Profit | Not stored |
| Fixed Risk:Reward | 2 | A number | Not stored |
| Manual Entry side | Buy | Buy / Sell | Not stored |
| Order Type | Limit | Limit / Market | Not stored |
| Initial Risk % | 0.5% | Greater than 0, up to your Max Risk Per Trade | Nullable column, remembered per screen; the default is what a screen shows before you have chosen. On Sniper an active preset's own risk wins |
| Symbol | BTCUSDT.P | Any symbol on your list | Nullable column, remembered per screen |
| Symbol list | BTCUSDT.P, ETHUSDT.P | Yours to change; no limit on its length | Seeded on first use |
| Sniper presets | BTC 5m, ETH 5m | Yours to rename, update or delete | Written at provisioning |
Where the trading bounds are enforced
Prices and numbers are validated at the prompt - a reply that is not a positive number comes straight back. Initial Risk % is the exception worth knowing: it is checked at the prompt against your current Max Risk Per Trade, and again when the trade is sized, so lowering that ceiling after typing a risk does not leave a stale value able to trade.
App Lock
| Setting | Default | Accepted range | Where it is set |
|---|---|---|---|
| App Lock | Off | On / Off | Column default |
| Password | None | At least 4 characters | Nullable column, no default |
| Auto Lock | 30 minutes | Immediately, 10 minutes, 30 minutes, 1 hour, 1 day, or a custom 45m / 2h / 1.5d up to 365 days | Column default |
Where the App Lock bounds are enforced
The password minimum and the custom-duration format are checked at the prompt. Auto Lock
is always set to something - 30 minutes until you choose - but it does nothing until App
Lock itself is turned on.
Performance
| Setting | Default | Accepted range | Where it is set |
|---|---|---|---|
| Period | None - you pick one each time | Today, This Week, This Month, Last 50 / 100 / 200, or Custom | Not stored |
| Custom trade count | - | At least 1; anything above 500 is quietly reduced to 500 | Not stored |
| Custom date range | - | YYYY-MM-DD..YYYY-MM-DD | Not stored |
Where the performance bounds are enforced
Both are checked when your reply is parsed. A count below 1 is refused with a message; a
count above 500 is not refused - it is clamped, and the report you get back is of the most
recent 500 closed trades.
Settings
| Setting | Default | Accepted range | Where it is set |
|---|---|---|---|
| Notifications | Both ON | ON or OFF each | Column default per switch. Trade Executed, Trade Rejected and Order Failed have no switch and always send |
| Collateral wallet address | None | 0x and exactly 40 hex characters | Nullable column, no default |
| Collateral wallet network | ETH | ETH / ARB / BASE | Column default |
| Collateral wallet token | USDT | USDT / USDC / ETH | Column default |
Where the settings bounds are enforced
The address format is checked at the prompt. The notification switches have nothing to validate - they are read at the moment a message would be sent, so turning one off silences the next notification, not the one already on its way.
Limits you meet at trade time
These are not settings. Nothing in the bot lets you change them, and you only ever meet them as a rejection or a retry.
| Limit | Value | What it does |
|---|---|---|
| Minimum RR after fees | 1.0 | A trade whose net reward-to-risk falls below this is rejected |
| PostOnly retries | 3 retries, 20 seconds apart | A limit order auto-cancelled for crossing the spread is re-placed; market orders never retry |
| Leverage ceiling | The symbol's own maximum, from the exchange | A trade needing more than the symbol allows is rejected; 100 is assumed only if the exchange does not answer |
| Minimum order size | The symbol's own minimum, from the exchange | A position that rounds down below it is rejected rather than placed short |
| Live exchange keys | Set by your plan - see Plans | Connecting past the limit is allowed; only the oldest connections hold a slot, and a bot outside it is refused at trade time |
| Trades per day | Set by your plan - see Plans | Counts an accepted order only, across every bot you hold, and resets at 00:00 UTC |
Billing
| Figure | Value | Where it applies |
|---|---|---|
| Plan length | 1-12 months, or 1-3 years | Checked when the invoice is created |
| Invoice lapse | 1 day after creation | An unpaid invoice closes; what arrived stays as credit |
| Shortfall forgiven | Up to 0.10 USD | An invoice this close to paid counts as paid |
| New deposit address | At most once every 24 hours | The old address still credits you |
| Confirmations | ERC-20 12, Base 30, Arbitrum 240, BEP-20 15 | Blocks deep before a payment is credited |
| Refund window | 7 days after payment | Also needs no trade placed since the payment |
| Plan reminder | 5 days before a paid plan ends | By email and on every bot you use |
Where these numbers are quoted from
If a figure on this page looks wrong, the code is right and this page is stale. These are the things to grep, in the order they are most likely to have moved:
| What | Where |
|---|---|
| Every accepted range, as the prompt states it | SETTINGS_FIELDS in apps/bot/app/services/telegram_service.py |
| The validators behind those ranges | apps/bot/app/schemas/settings.py |
| Column defaults | apps/bot/app/models/risk_management.py, apps/bot/app/models/settings.py |
| The provisioning defaults, and the Initial Risk % a draft and a seeded preset start at | DEFAULT_MAX_RISK_PERCENT, DEFAULT_COLLATERAL_BALANCE, DEFAULT_INITIAL_RISK_PERCENT in apps/bot/app/services/account_resolver.py |
| App Lock durations and the 365-day cap | _APP_LOCK_DURATION_PRESETS, _APP_LOCK_MAX_DURATION_SECONDS |
| Sniper and Manual Entry starting values | _SNIPER_DEFAULT_*, _MANUAL_ENTRY_DEFAULT_SYMBOL, _DEFAULT_SYMBOLS |
| The performance trade-count cap | MAX_TRADE_LIMIT in apps/bot/app/services/reporting/periods.py |
| Buffer ceiling and minimum RR | MAX_BUFFER_BALANCE_PERCENT_OF_BYBIT_BALANCE, MIN_RR_AFTER_FEES in apps/bot/app/services/webhook_handler.py |
| Tier limits (Free, Pro, Max) | The tiers table, edited from admin's Plans page (apps/bot/app/services/plans_admin.py); read by apps/bot/app/services/entitlements.py |
| Billing windows and the shortfall | invoice_lapse_days, refund_window_days, shortfall_tolerance_usd in billing_settings, seeded by f2a7c91d3b64_billing_schema.py, lapse shortened by e5c1a7d3f290_invoices_lapse_after_one_day.py |
| Plan lengths, address cooldown, confirmations, reminder | MAX_MONTHS, MAX_YEARS in apps/bot/app/services/billing.py; ROTATE_COOLDOWN in deposit_addresses.py; confirmations in apps/bot/app/chain/tokens.py; REMIND_BEFORE in billing_notify.py |
| Plan prices and offers | tiers.price_monthly and tiers.yearly_months_free, with campaigns in discounts; edited from admin's Plans page and priced by apps/bot/app/services/pricing.py |