BANGER
Product status: Banger’s public beta is paper-only. References to live execution are future-looking. Venue rules and legal claims can change; verify current primary sources for your jurisdiction.
2026-10-08 · 5 min read · reviewed 2026-10-14

Stop a Paper Session and Preserve Its Research History

A bounded paper session should leave inspectable evidence: delivered observations, decisions, any simulated execution and completed shutdown. A no-order observer can meet its intended acceptance without fills. A failed or partial run can still contain useful history; preserve it while explaining its limits.

This walks through the full loop: define a bounded test, stop it cleanly, read the terminal status, and inspect what the run left behind. One distinction trips people up. Stopping a worker is not the same as deleting its history, and a paper shutdown says nothing about the state of a live account.

Run a bounded test, not an open-ended one

Define the start, stop deadline and expected observations before the run. Save the exact version and parameters. If you intentionally change them during investigation, label the new experiment rather than merging its evidence into the old baseline.

This minimal observer uses Banger 0.1.7’s actual adapter and callback. Replace the placeholder with your exact selected open ticker. It logs once and has no order methods; this bounds output, not worker lifetime:

from banger import Strategy, signals
from banger_adapter_kalshi import Kalshi


class FirstWeekObserver(Strategy):
    name = "first-week-observer"
    venues = [Kalshi()]
    universe = signals.kalshi_markets(
        status="open", tickers=["REPLACE_WITH_CURRENT_OPEN_TICKER"]
    )

    def on_start(self, ctx):
        self._observed = False

    def on_market_tick(self, market, tick, ctx):
        if self._observed:
            return
        self._observed = True
        ctx.log("first_week_observation", market_id=market.market_id,
                timestamp=tick.timestamp.isoformat(),
                bid=str(tick.bid) if tick.bid is not None else None,
                ask=str(tick.ask) if tick.ask is not None else None)
        # One log; no orders. The logging bound does not stop the worker.

Complete the account setup described in the CLI documentation and save the observer as strategy.py before using the local command below. No production strategy was started during this review; its callback was checked offline with fixture ticks.

pip install bangertrades
banger run strategy.py --paper

For the local CLI run, use Ctrl+C after a deliberately short supervised observation window and check the result. If using a hosted session instead, use its own product stop control. An ordinary risk limit is not a resource timer, and a written deadline is not proof that the worker stopped.

Stop the session and confirm it

For a hosted Banger paper session, use Stop deployment and complete its confirmation. Then inspect the stopped record, retained history and resource cleanup. For the local CLI path, Ctrl+C requests termination of the supervised process. These are different controls; verify the path you actually used.

The hosted stop implementation marks the application record stopped, revokes its runtime key and attempts worker cancellation. Cancellation can remain pending. A stopped badge therefore needs the accompanying cleanup evidence before it establishes that the hosted resource is gone. Preserve an unresolved cancellation rather than claiming a complete shutdown.

Distinguish two separate controls that often get conflated:

Read the terminal status and the retained record

Once the session is terminal, the value is in what it kept. A useful paper run retains three things you should inspect in order:

Inspect the experiment’s parameters and scope, then its delivered data and any execution. Check actual cumulative position and UTC-day loss semantics rather than an invented per-trade limit. Read logs to investigate discrepancies and keep missing telemetry visible.

Keep the run intact. The whole point of preserving history is comparison: the same strategy across two slates, or a parameter change measured against a prior baseline. If you delete the record every time you stop, you lose the only thing that makes the next test interpretable.

Stopping a worker is not deleting history

These are different operations and it is worth being blunt about it. Stopping ends the session and leaves the artifacts in place. Deleting removes the artifacts. A good workflow keeps them separate so that a routine stop never destroys evidence, and deletion is a deliberate, rare act you do when you actually want the record gone.

Preserve relevant history for the next comparison and apply your deliberate retention policy separately. A stop is a lifecycle action; it is not a request to delete records. Do not recommend keeping sensitive operational data forever merely because storage is available.

A paper shutdown is not proof of live-account cleanup

Banger’s public beta is paper-only. Public market observations need no venue trading keys; its simulated records are separate from real account holdings. Preserve the tested fill and fee model because a successful stop does not make those assumptions faithful to a real book.

So a clean paper stop with a tidy terminal status tells you the simulation ended. It is not evidence that a live account is flat, that resting orders were cancelled, or that anything on the venue was reconciled. Live and paper are separate state. If you have a real position open at a venue, closing or confirming it is a separate action you perform against that venue, not something a paper shutdown does for you.

Keep the retained paper record for analysis and treat real exposure as a separate account question. A terminal simulation state provides evidence about that resource and test, not canceled real orders, credited settlement cash or profitable execution.

Sources

Keep reading

Run your first strategy free

Paper-trade on Polymarket and Kalshi market data without venue keys.

Start free