Geopolitical oil spike meets reopening supply — short the oil bounce
Created
Thesis
The latest U.S. strikes on Iran are driving a knee-jerk rally in oil markets. However, combining this with the news that the Strait of Hormuz is reopening and Saudi Arabia is preparing to slash prices suggests the supply fears are overblown. When geopolitical fear spikes fade and supply remains abundant, oil stocks tend to give back their panic gains quickly. A short-term fade on oil producers capitalizes on this pattern of fear-driven spikes unraveling.
Strategy approach
Build a rule-based mean-reversion strategy on D1 timeframe for XLE or USO. Enter short when price spikes >3% in a single session on geopolitical news AND RSI > 70. Exit when price crosses below the 10-day SMA or after a 15-day max hold. Include a 4% stop loss above the spike high.
Markets and timeframes
Latest published rule evaluation
Evaluated . This is a dated rule snapshot, not a live price or trade execution confirmation.
OXY · 1d
No entry condition values were published.
USO · 1d
2 of 4 published entry conditions marked met.
- ROC (1) above 3 — far
- RSI (14) above 70 — met
- ROC (1) above 3 — far
- RSI (14) above 70 — met
- Price crossed below SMA (10) — far
XLE · 1d
0 of 4 published entry conditions marked met.
- ROC (1) above 3 — far
- RSI (14) above 70 — near
- ROC (1) above 3 — far
- RSI (14) above 70 — near
- Price crossed below SMA (10) — near
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: Overbought ROC/RSI Crossover Long (USO@1d) (3 conditions)
- Entry: Overbought ROC/RSI Crossover Long (XLE@1d) (3 conditions)
- Entry: Overbought ROC/RSI Long (USO@1d) (2 conditions)
- Entry: Overbought ROC/RSI Long (XLE@1d) (2 conditions)
- Entry: Crossover Long (USO@1d) (1 condition)
- Entry: Crossover Long (XLE@1d) (1 condition)
- Exit: Position Exit Rule (USO@1d) (1 condition)
- Exit: Position Exit Rule (XLE@1d) (1 condition)
- Exit: SL: Fib Retracement 61.8% (USO@1d) (1 condition)
- Exit: SL: Fib Retracement 61.8% (XLE@1d) (1 condition)
- Exit: SL: Below Support[1] (USO@1d) (1 condition)
- Exit: SL: Below Support[1] (XLE@1d) (1 condition)
- Exit: TP: Near Resistance[2] (USO@1d) (1 condition)
- Exit: TP: Near Resistance[2] (XLE@1d) (1 condition)
- Exit: Stop Loss at 2.7% (1 condition)
- Exit: Take Profit at 5.4% (1 condition)
Shared strategy rules
Rule configuration
{
"data_dependencies": [
{
"symbol": "USO",
"timeframe": "1d"
},
{
"symbol": "XLE",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1_uso",
"name": "Overbought ROC/RSI Crossover Long (USO@1d)",
"priority": 1,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1_xle",
"name": "Overbought ROC/RSI Crossover Long (XLE@1d)",
"priority": 2,
"trade_symbol": "XLE"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_uso",
"name": "Overbought ROC/RSI Long (USO@1d)",
"priority": 2,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_xle",
"name": "Overbought ROC/RSI Long (XLE@1d)",
"priority": 3,
"trade_symbol": "XLE"
},
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_3_uso",
"name": "Crossover Long (USO@1d)",
"priority": 2,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_3_xle",
"name": "Crossover Long (XLE@1d)",
"priority": 3,
"trade_symbol": "XLE"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 10
},
"type": "indicator"
}
}
],
"enabled": true,
"id": "exit_1_uso",
"name": "Position Exit Rule (USO@1d)",
"priority": 1,
"purpose": "signal",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 10
},
"type": "indicator"
}
}
],
"enabled": true,
"id": "exit_1_xle",
"name": "Position Exit Rule (XLE@1d)",
"priority": 2,
"purpose": "signal",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"ratio": 618,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_2_uso",
"name": "SL: Fib Retracement 61.8% (USO@1d)",
"priority": 96,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"ratio": 618,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_2_xle",
"name": "SL: Fib Retracement 61.8% (XLE@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_uso",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_xle",
"name": "SL: Below Support[1] (XLE@1d)",
"priority": 98,
"purpose": "take_profit",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 2,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_4_uso",
"name": "TP: Near Resistance[2] (USO@1d)",
"priority": 100,
"purpose": "stop_loss",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 2,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_4_xle",
"name": "TP: Near Resistance[2] (XLE@1d)",
"priority": 101,
"purpose": "stop_loss",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -2.686033333333333
}
}
],
"enabled": true,
"id": "exit_5",
"name": "Stop Loss at 2.7%",
"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": 5.372066666666666
}
}
],
"enabled": true,
"id": "exit_6",
"name": "Take Profit at 5.4%",
"priority": 100,
"purpose": "take_profit"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"resistance_stop_rank": 2,
"risk_percent": 2.686033333333333,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Indicator configuration
{
"indicators": [
{
"name": "rsi",
"period": 14
},
{
"name": "roc",
"period": 1
},
{
"name": "sma",
"period": 10
},
{
"name": "rsi",
"period": 14
},
{
"name": "roc",
"period": 1
},
{
"name": "sma",
"period": 10
}
]
}Parsed strategy
{
"data_dependencies": [
{
"symbol": "USO",
"timeframe": "1d"
},
{
"symbol": "XLE",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1_uso",
"name": "Overbought ROC/RSI Crossover Long (USO@1d)",
"priority": 1,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
},
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_1_xle",
"name": "Overbought ROC/RSI Crossover Long (XLE@1d)",
"priority": 2,
"trade_symbol": "XLE"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_uso",
"name": "Overbought ROC/RSI Long (USO@1d)",
"priority": 2,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 3
}
},
{
"left": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "rsi",
"period": 14
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 70
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_xle",
"name": "Overbought ROC/RSI Long (XLE@1d)",
"priority": 3,
"trade_symbol": "XLE"
},
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_3_uso",
"name": "Crossover Long (USO@1d)",
"priority": 2,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_3_xle",
"name": "Crossover Long (XLE@1d)",
"priority": 3,
"trade_symbol": "XLE"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 10
},
"type": "indicator"
}
}
],
"enabled": true,
"id": "exit_1_uso",
"name": "Position Exit Rule (USO@1d)",
"priority": 1,
"purpose": "signal",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_below",
"right": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"indicator": {
"name": "sma",
"period": 10
},
"type": "indicator"
}
}
],
"enabled": true,
"id": "exit_1_xle",
"name": "Position Exit Rule (XLE@1d)",
"priority": 2,
"purpose": "signal",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"ratio": 618,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_2_uso",
"name": "SL: Fib Retracement 61.8% (USO@1d)",
"priority": 96,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than",
"right": {
"chart_ref": {
"symbol": "XLE",
"timeframe": "1d"
},
"ratio": 618,
"type": "fibonacci_retracement"
}
}
],
"enabled": true,
"id": "exit_2_xle",
"name": "SL: Fib Retracement 61.8% (XLE@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_uso",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "less_than_or_equal",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_xle",
"name": "SL: Below Support[1] (XLE@1d)",
"priority": 98,
"purpose": "take_profit",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 2,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_4_uso",
"name": "TP: Near Resistance[2] (USO@1d)",
"priority": 100,
"purpose": "stop_loss",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than",
"right": {
"rank": 2,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_4_xle",
"name": "TP: Near Resistance[2] (XLE@1d)",
"priority": 101,
"purpose": "stop_loss",
"target_symbol": "XLE"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -2.686033333333333
}
}
],
"enabled": true,
"id": "exit_5",
"name": "Stop Loss at 2.7%",
"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": 5.372066666666666
}
}
],
"enabled": true,
"id": "exit_6",
"name": "Take Profit at 5.4%",
"priority": 100,
"purpose": "take_profit"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"resistance_stop_rank": 2,
"risk_percent": 2.686033333333333,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Strategy instructions
Trading agent generated from recommendation idea 'Geopolitical oil spike meets reopening supply — short the oil bounce'. Thesis: The latest U.S. strikes on Iran are driving a knee-jerk rally in oil markets. However, combining this with the news that the Strait of Hormuz is reopening and Saudi Arabia is preparing to slash prices suggests the supply fears are overblown. When geopolitical fear spikes fade and supply remains abundant, oil stocks tend to give back their panic gains quickly. A short-term fade on oil producers capitalizes on this pattern of fear-driven spikes unraveling.
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 dated rule snapshot above shows the conditions evaluated at that time. It does not prove a current trigger or executed trade.
- 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