Cheap oil + airline takeover news — ride the margin tailwind on airline stocks
Created
Thesis
OPEC+ has agreed to raise output even as prices slide, and the Strait of Hormuz remains open, pointing to continued downward pressure on crude oil. For airlines, jet fuel is the single biggest cost, so cheaper oil directly boosts profit margins. Meanwhile, easyJet accepting a takeover bid shows that deep-pocketed investors see value in the sector, which could inspire a sympathy rally in US-listed airline stocks. Even though higher interest rates are a lingering headwind, the immediate catalyst of dropping fuel costs combined with M&A optimism creates a favorable short-term setup for airline stocks.
Strategy approach
Build a rule-based strategy that enters long JETS (or selected airline equitites like DAL, UAL) on D1 when front-month crude oil futures (CL1) make a 20-day low AND the JETS ETF closes up >1% on above-average volume. Use a 3% stop loss and a 21-day max hold.
Markets and timeframes
Entry and exit at a glance
These are the named rules in the shared configuration. Review the full conditions below before using a strategy.
- Entry: DONCHIAN/SMA/OBV/RSI/ATR Crossover Long (USO@1d) (7 conditions)
- Exit: ROC Threshold Exit (USO@1d) (1 condition)
- Exit: Stop Loss at 3.0% (1 condition)
- Exit: Take Profit at 6.0% (1 condition)
- Exit: SL: Fib Retracement 50.0% (USO@1d) (1 condition)
- Exit: SL: Below Support[1] (USO@1d) (1 condition)
Shared strategy rules
Rule configuration
{
"data_dependencies": [
{
"symbol": "USO",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"field": "lower",
"indicator": {
"name": "donchian",
"period": 20
},
"type": "indicator"
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 20
},
"type": "indicator"
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "obv"
},
"type": "indicator"
},
"operator": "crossed_above",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 50
},
"type": "indicator"
}
},
{
"left": {
"field": "low",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 1,
"type": "support_level"
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 40
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "atr",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 0.5
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1",
"name": "DONCHIAN/SMA/OBV/RSI/ATR Crossover Long (USO@1d)",
"priority": 1,
"trade_symbol": "USO"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 21
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"enabled": true,
"id": "exit_1",
"name": "ROC Threshold Exit (USO@1d)",
"priority": 1,
"purpose": "signal"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_2",
"name": "Stop Loss at 3.0%",
"priority": 100,
"purpose": "stop_loss"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "greater_than_or_equal",
"right": {
"type": "constant",
"value": 6
}
}
],
"enabled": true,
"id": "exit_3",
"name": "Take Profit at 6.0%",
"priority": 100,
"purpose": "take_profit"
},
{
"applies_to": "long",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"ratio": 500,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_4",
"name": "SL: Fib Retracement 50.0% (USO@1d)",
"priority": 97,
"purpose": "take_profit"
},
{
"applies_to": "long",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_5",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 100,
"purpose": "stop_loss"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"risk_percent": 2.4488666666666665,
"stop_loss_percent": 3,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Indicator configuration
{
"indicators": [
{
"name": "donchian",
"period": 20
},
{
"name": "rsi",
"period": 14
},
{
"name": "atr",
"period": 14
},
{
"name": "obv"
},
{
"name": "sma",
"period": 20
},
{
"name": "roc",
"period": 21
},
{
"name": "sma",
"period": 50
}
]
}Parsed strategy
{
"data_dependencies": [
{
"symbol": "USO",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"field": "lower",
"indicator": {
"name": "donchian",
"period": 20
},
"type": "indicator"
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 20
},
"type": "indicator"
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "obv"
},
"type": "indicator"
},
"operator": "crossed_above",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 50
},
"type": "indicator"
}
},
{
"left": {
"field": "low",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 1,
"type": "support_level"
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 40
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "atr",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 0.5
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1",
"name": "DONCHIAN/SMA/OBV/RSI/ATR Crossover Long (USO@1d)",
"priority": 1,
"trade_symbol": "USO"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 21
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"enabled": true,
"id": "exit_1",
"name": "ROC Threshold Exit (USO@1d)",
"priority": 1,
"purpose": "signal"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_2",
"name": "Stop Loss at 3.0%",
"priority": 100,
"purpose": "stop_loss"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "greater_than_or_equal",
"right": {
"type": "constant",
"value": 6
}
}
],
"enabled": true,
"id": "exit_3",
"name": "Take Profit at 6.0%",
"priority": 100,
"purpose": "take_profit"
},
{
"applies_to": "long",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"ratio": 500,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_4",
"name": "SL: Fib Retracement 50.0% (USO@1d)",
"priority": 97,
"purpose": "take_profit"
},
{
"applies_to": "long",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_5",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 100,
"purpose": "stop_loss"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"risk_percent": 2.4488666666666665,
"stop_loss_percent": 3,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Strategy instructions
Trading agent generated from recommendation idea 'Cheap oil + airline takeover news — ride the margin tailwind on airline stocks'. Thesis: OPEC+ has agreed to raise output even as prices slide, and the Strait of Hormuz remains open, pointing to continued downward pressure on crude oil. For airlines, jet fuel is the single biggest cost, so cheaper oil directly boosts profit margins. Meanwhile, easyJet accepting a takeover bid shows that deep-pocketed investors see value in the sector, which could inspire a sympathy rally in US-listed airline stocks. Even though higher interest rates are a lingering headwind, the immediate catalyst of dropping fuel costs combined with M&A optimism creates a favorable short-term setup for airline stocks.
Performance
No trade count, win rate, or realized P&L figures are provided in this public preview. The thesis and shared rules do not establish a performance record.
What this public preview can establish
- The thesis and strategy approach describe a market view. They do not show whether an entry or exit condition is currently met.
- Technical strategy fields are shared above. Inspect the actual conditions and check when they were evaluated before relying on them.
- No trade count, win rate, or P&L figure is published in this preview. It cannot establish a performance record.
Explore
How CommonQuant researches and tests strategies · Public paper-trading record and its limits · Discover public strategies