Execution
14 settings on this page.
Stale Order Max Age
What it does
Working orders still open (PENDING, ACCEPTED, or PARTIAL fill) after this many minutes are treated as stale and cancelled at the broker. If the stale order was the open leg of a roll, the roll is flagged as HALF_ROLLED for manual review. Prevents stale orders from cluttering the order book and occupying buying power indefinitely.
When to change it
Raise to 60 if you frequently trade illiquid names where fills take longer. Lower to 15 for highly liquid names where a 30-minute unfilled order is likely mispriced.
Safe range
15 (fast cancel) to 60 (patient).
Example
Iron condor close order submitted at 10:00 AM at mid. Not filled by 10:30 AM. Stale order cancel fires. Bot may re-evaluate and resubmit at adjusted price on the next cycle.
Exit Price Concession
What it does
How much ground a closing order gives up after an earlier attempt to close the same position failed to fill, measured in price ticks. A close is first offered at the midpoint between the bid and the ask. If nobody takes it the order is cancelled, and the position is reconsidered on the next cycle. At the default of 0 every attempt is offered at the midpoint again, so a close the market will not take at the midpoint may never fill at all. Set above 0 and each failed attempt moves the next offer one tick further toward the market: paying a little more on a position you are buying back, accepting a little less on one you are selling. A hard limit tied to what the position is currently worth caps how far this can go, so the bot cannot chase a price. Entry orders have worked this way since August.
When to change it
Set to 1 if closing orders are cancelled repeatedly while a take-profit or stop rule keeps firing, which usually means the midpoint is not a real price on that underlying. Raise to 2 on wide markets where one tick is small next to the spread. Leave it at 0 only if you would rather a close not fill than give up any edge.
Safe range
0 (always at the midpoint) to 3. Beyond 3 the built-in limit tied to the position's value usually stops it first.
Example
A position hits its take-profit target. The close is offered at the midpoint, does not fill, and is cancelled. On the next cycle, with the setting at 1, the bot offers one tick worse than the midpoint. Each further failed attempt gives up one more tick, until it either fills or reaches the limit set by the position's own value.
Order Retry Attempts
What it does
Number of retries when tastytrade returns an HTTP 429 (rate limit) response on order submission. Uses exponential backoff: 1 second, 2 seconds, 4 seconds. Non-429 errors (rejections, bad parameters) fail immediately without retrying: never retry a rejection.
When to change it
Raise to 5 if you see frequent rate-limit errors during peak market hours. Lower to 1 if you prefer faster failure over retrying.
Safe range
1 (fail fast) to 5 (patient on rate limits).
Example
Bot submits an iron condor entry at 9:31 AM. Tastytrade returns 429. Bot waits 1 second, retries. Gets 429 again. Waits 2 seconds, retries. Third attempt succeeds.
Entry Wait After Open
What it does
Blackout window after market open (9:30 AM ET) during which no new entries fire. The first 30 minutes have wide bid-ask spreads, unreliable opening prints, and elevated gamma. Waiting lets the market settle before entering new positions.
When to change it
Lower to 15 if you observe good liquidity in the first 30 minutes for your specific underlyings. Raise to 60 to wait for the full open-hour volatility to settle.
Safe range
15 (accept some open noise) to 60 (conservative).
Example
Market opens 9:30 AM. With entry_wait_after_open_minutes=30, no new entries fire until 10:00 AM. The 9:33 AM cycle runs management only.
Entry Stop Before Close
What it does
Blackout window before market close (4:00 PM ET) during which no new entries fire. Prevents entering new positions in the final 15 minutes when liquidity drops and bid-ask spreads widen.
When to change it
Raise to 30 for more conservative end-of-day behavior. Lower to 5 only if you have evidence of good liquidity late in the session.
Safe range
5 (aggressive) to 30 (conservative).
Example
With entry_stop_before_close_minutes=15, no new entries fire after 3:45 PM ET.
Sandbox Use Market Close
What it does
In the tastytrade sandbox only, submit closing orders as market orders instead of limit orders. The sandbox never fills limit orders above $3, so multi-leg closes sit in closing_working state forever. Market orders fill at $1 in sandbox, exercising the real fill-event path. An environment guard in broker.py enforces this OFF for live accounts regardless of this flag.
When to change it
Turn ON during sandbox validation to allow the bot to exercise the full fill path for multi-leg exits. Must be OFF for all live accounts.
Safe range
ON (sandbox only) or OFF (always for live).
Example
Iron condor close order at $2.40 debit sits unfilled in sandbox (limit above $3 cap). With sandbox_use_market_close=ON, it submits as market and fills at $1, booking the close.
Order Retry Base Delay (seconds)
What it does
Base delay in seconds between order submission retry attempts when tastytrade returns a rate limit error (HTTP 429). ACondor uses exponential backoff: the first retry waits this many seconds, the second waits 2x this, the third 4x, and so on up to the maximum retry count. This prevents hammering the API when rate limited.
When to change it
Leave at the default. Only raise if you are consistently hitting rate limits and seeing failed orders. The default 1-second base with exponential backoff is appropriate for normal trading volumes.
Safe range
0.5 seconds (aggressive retry) to 5 seconds (conservative). Default 1 second.
Example
Rate limit hit on first submission. Base delay = 1s: retry at 1s, then 2s, then 4s if max_retries=3. Total wait before giving up: approximately 7 seconds.
Known Liquid Symbols
What it does
The list of symbols that bypass the per-cycle liquidity probe and are always considered liquid. For these names, ACondor skips the real-time bid/ask spread and open interest check because they are known to be deep and liquid in all market conditions. All other symbols go through a live liquidity check each cycle before being considered for entry. Keep this list to well-established ETFs and mega-cap stocks with active options markets.
When to change it
Add a symbol if you know it is deeply liquid and want to skip the liquidity check. Remove a symbol if it has become less liquid or you want stricter per-cycle evaluation. Changes take effect on the next cycle without a restart.
Safe range
Any list of valid ticker symbols. Keep to names with daily options volume in the tens of thousands of contracts and tight bid/ask spreads.
Example
Adding AMZN to the list means ACondor never pauses to check AMZN's bid/ask before including it in the candidate list. Removing SPY would make ACondor probe SPY's liquidity each cycle, unnecessary for the most liquid ETF in the market.
Mechanical POP Floor Enabled
What it does
Enables the minimum probability of profit floor for the mechanical engine. When ON, ACondor rejects mechanical iron condor candidates whose estimated POP (probability of profit, derived from short-strike deltas) falls below the floor value. At 20-delta short strikes, mechanical iron condors typically score POP around 0.60 using the delta-based estimate (1 minus the sum of absolute short deltas). The floor is off by default because the delta-based POP metric reads lower than the true probability: enabling it at 0.70 would block nearly all standard condors until the metric is calibrated.
When to change it
Turn ON after you have measured the actual POP values for your mechanical entries in live trading and tuned the floor value to match. Do not enable without first understanding what POP values your entries actually produce.
Safe range
ON or OFF. Default OFF pending calibration.
Example
Mechanical engine proposes an SPY iron condor with 20-delta shorts. Delta-based POP estimate = 1 - 0.20 - 0.20 = 0.60. With mechanical_pop_floor_enabled ON and floor=0.70, this entry is rejected. This is why the floor is disabled by default: the metric needs calibration first.
Mechanical POP Floor Value
What it does
The minimum POP threshold for mechanical engine entries when the POP floor is enabled. Candidates whose estimated probability of profit falls below this value are rejected. Only active when mechanical_pop_floor_enabled is ON. The default 0.70 is set conservatively; see mechanical_pop_floor_enabled for calibration notes before enabling.
When to change it
Adjust after measuring real POP values from live fills. Lower the floor if your entries consistently score below 0.70 even though they are fundamentally sound trades.
Safe range
0.50 (permissive) to 0.85 (strict). Only meaningful when the floor is enabled.
Example
Floor value = 0.65. An iron condor with estimated POP 0.63 is rejected. One with POP 0.68 passes. With the floor disabled, both are evaluated on score alone.
Earnings POP Floor Enabled
What it does
Enables the minimum probability of profit floor for the earnings engine. When ON, earnings engine candidates must meet the POP floor value. Earnings plays use 30-delta shorts and shorter DTE windows, so their POP estimates are typically lower than mechanical entries. Off by default pending calibration.
When to change it
Same as mechanical: only enable after measuring actual earnings entry POP values in live trading.
Safe range
ON or OFF. Default OFF.
Example
Earnings engine evaluates AAPL before its report. 30-delta iron condor at 10 DTE has estimated POP 0.42. With floor enabled at 0.60, this entry is rejected.
Earnings POP Floor Value
What it does
The minimum POP threshold for earnings engine entries when the earnings POP floor is enabled. The default 0.60 is lower than the mechanical floor (0.70) because earnings plays accept a lower win rate in exchange for capturing the IV crush event.
When to change it
Adjust after measuring real earnings entry POP values. The earnings engine's shorter DTE and binary event risk make a lower floor appropriate.
Safe range
0.45 (permissive) to 0.75 (strict). Only meaningful when earnings_pop_floor_enabled is ON.
Example
Earnings floor = 0.58. Candidate with POP 0.56 is rejected. Candidate with POP 0.61 passes.
Contraction POP Floor Enabled
What it does
Enables the minimum probability of profit floor for the contraction engine. Contraction entries use 16-delta short strikes (approximately one standard deviation OTM), which produce higher delta-based POP estimates around 0.68. The floor is viable for contraction entries once calibrated, but is off by default until measured against real fills.
When to change it
Enable after confirming that contraction entries in your account consistently score above the floor value. At 16-delta shorts a floor of 0.60 may be workable from day one, but verify first.
Safe range
ON or OFF. Default OFF.
Example
16-delta contraction iron condor scores POP 0.68 (1 - 0.16 - 0.16 = 0.68). With contraction floor enabled at 0.60, this entry passes. Tighter short strikes that score 0.55 would be rejected.
Contraction POP Floor Value
What it does
The minimum POP threshold for contraction engine entries when the contraction POP floor is enabled. The default 0.65 is calibrated for 16-delta short strikes, contraction's typical delta selection. At 0.65, standard contraction condors (0.68 POP) pass while any entries with wider short strikes that drift below 0.65 are rejected.
When to change it
Adjust based on measured POP values from contraction entries in live trading. The 0.65 default is a reasonable starting point for 16-delta structures.
Safe range
0.50 (permissive) to 0.80 (strict). Only meaningful when contraction_pop_floor_enabled is ON.
Example
Contraction floor = 0.65. Standard 16-delta iron condor: POP = 0.68, passes. If short deltas drift to 0.20 due to market skew: POP = 0.60, rejected.