Take-profit & stop-loss

Take-profit and stop-loss are per-strategy exit rules for individual positions. A take-profit aims to close a position once it has moved in your favor by a set amount; a stop-loss aims to close it if it moves against you past a set amount. Both are optional and are configured per strategy — when enabled for a strategy, the bot manages the exits automatically on the positions that strategy opens.

Take-profit

When a position reaches your take-profit target, the bot exits by placing a resting reduce-only order — an order that can only shrink the position, never add to it or flip it to the other side. The order sits on Kalshi at your target price and fills if the market trades there. Because it only ever reduces the position, it cannot increase your exposure.

The target is set as a percentage above your entry price for that position.

A schedule that relaxes over time

Instead of one fixed target, a take-profit can follow a schedule that relaxes as a position is held: require a larger gain while the position is young, then ease the target down the longer it is held. You write it as a short list of minutes:fraction pairs — for example 0:0.10,40:0.05,120:0 means "take profit at 10% while young, relax to 5% after 40 minutes held, and turn the take-profit off after 120 minutes." Minutes are counted from when the position opened; each fraction is a percentage above entry, just like the single take-profit target.

This suits time-boxed contracts: hourly and daily markets settle on a fixed clock, so how long a position has been held is a natural thing to scale against — a target can start strict and give a winner room to run, then ease off as settlement approaches. Leave the schedule blank to use the single take-profit percentage instead; when a schedule is set, it takes over from the single value from the moment the position opens. (This is the same idea as the minimal_roi schedule in the open-source Freqtrade framework.)

Stop-loss

A stop-loss watches the price you could exit at right now. If that price falls to your stop level, the bot exits the position. The stop level is set as a percentage below your entry price.

Because a stop exit has to sell into a moving market, it includes a slippage tolerance — a small cushion, in cents, below the stop level that the bot is willing to accept while working the exit. The bot will not sell below that floor. If the order book is thin and part of the position cannot be filled within the cushion, the bot keeps trying on later checks rather than selling at any price. Every stop exit is also reduce-only, so it can only reduce the position.

Re-entry cooldown

After a stop-loss closes a position, the strategy waits before it will open a new position in that same market. This re-entry cooldown prevents the bot from immediately re-entering a market that just stopped it out and then stopping out again — churn that would repeat the exit cost without changing the outcome.

Where to set these

These are strategy settings, not account-wide switches. When they are enabled for your strategy, you configure them in the Strategy tab editor alongside the strategy's other settings. They are part of the strategy's schema-driven configuration, so they save and deploy the same way as any other setting: Save stores a draft, and Deploy publishes a new version the bot picks up on its next loop.

Stop-loss is one of the per-strategy dials intended to be adjustable by whoever runs the strategy. The settings are:

| Setting | What it controls | Range | Default | |---|---|---|---| | exit_take_profit_pct | Take-profit target, as a percentage above entry price | 0–100% | 0 (off) | | exit_roi_table | Optional take-profit schedule that relaxes with how long a position is held — comma-separated minutes:fraction pairs, e.g. 0:0.10,40:0.05,120:0. Overrides exit_take_profit_pct when set | minutes:fraction pairs | blank (off) | | exit_stop_loss_pct | Stop-loss trigger, as a percentage below entry price | 0–100% | 0 (off) | | exit_stop_slippage_cents | How many cents below the stop level the bot will accept while exiting | 1–20 cents | 5 | | exit_reentry_cooldown_minutes | How long to wait before re-entering the same market after a stop | 0–1440 minutes | 60 |

Setting a percentage to 0 turns that leg off. You can run take-profit only, stop-loss only, both, or neither.

How exits show up in your numbers

A stop-loss realizes a loss on one position, but it does so in service of the overall strategy. Positions in a strategy can offset one another, so the strategy's net result over a day can differ from the loss on the single position that was stopped out. Take-profit and stop-loss are mechanics inside a strategy — judge them by the strategy's net outcome, not by any single exit.

Take-profit and stop-loss exits are early round-trips: you enter and exit before the market settles. Your headline Total P&L stays settled-only by design — it counts positions that reached settlement — so these realized early exits are shown separately rather than folded into that figure. The split stays visible, so an early exit is never invisible, and the settled figure keeps its consistent meaning. See The dashboard for where settled P&L appears.

The daily loss limit also measures settled P&L for the day, and it is deliberately kept that way. It is a simple, out-of-loop control at the "I don't want to trade today" level — see Money safety. A stop-loss that nets out within your strategy does not, by itself, move the daily loss limit. The two operate at different levels on purpose: stop-loss is an in-strategy mechanic, and the daily loss limit is a separate account-level safety control.

Non-custodial

As with everything else, these exits run on your Kalshi account through the API credentials you provide. Parachute never takes custody of your funds — the bot can only place and manage orders, never withdraw. See Money safety.