Trade Lifecycle

The bot should treat every trade as a lifecycle, not a one-off buy/sell guess.

Entry

Entry is not “price is down.” Entry means the bot has a setup where reward is worth the risk.

Minimum entry packet:

{
  "symbol": "BTCUSDT",
  "setup": "support mean reversion",
  "thesis": "price is near support and 1h trend is stable",
  "invalidation": "breaks support for two cycles",
  "profit_plan": "partial profit near resistance, trail rest",
  "timeout_cycles": 6
}

Hold

Holding is an active decision. The bot should explain why it is still holding.

Good hold reason:

Hold BTCUSDT because thesis remains valid, price is above support, and upside target has not been reached.

Bad hold reason:

Hold because it is currently red.

Sell Or Reduce

Selling is not failure. Selling is risk control.

Good sell reasons:

  • Thesis invalidated.
  • Profit target reached and momentum faded.
  • Trailing stop hit.
  • Exposure too high.
  • Better setup needs cash.
  • Risk state worsened.

Wait

Waiting should also have a reason.

Useful wait categories:

Wait reasonMeaning
Weak signalSetup exists but evidence is not strong enough
Bad reward/riskUpside is too small compared to invalidation distance
High exposurePortfolio is already too invested
Conflicting regime5m signal disagrees with 1h trend
Poor executionSpread, liquidity, or order filters make trade unattractive

Gotcha: A bot that cannot explain why it is waiting will eventually overtrade or freeze. Wait reasons need structure.