Defined-risk premium-selling structures (verticals, condors): close at 50% of max profit. The remaining 50% takes 70%+ of the time to capture and exposes you to whipsaw. Long-premium structures: close at 50–100% return on premium paid. Time-based exit on every position: close at 21 DTE if you haven't hit your profit or stop target. The 21-day rule exists because gamma exposure beyond that point exceeds the remaining theta decay you're collecting.
Rolling a losing position is sometimes correct and sometimes a doom loop. The honest test: can you roll for a credit, and is the new strike one you're genuinely happy to defend? If yes, roll. If you're rolling for a debit or to a strike you wouldn't have entered fresh, close the position and take the loss. Rolling losers indefinitely turns small defined losses into large undefined ones.