Oil market can't make up its mind — play the volatility by riding energy stocks
Created
Thesis
The oil market is sending mixed signals. On one hand, oil is on track for its biggest quarterly drop since 2020 because peace deal progress is reopening shipping lanes and creating a supply glut. On the other hand, a recent tanker attack in the Middle East shows how quickly that supply can be disrupted. When the market can't decide whether to panic or relax, oil prices swing violently — and energy stocks like Exxon and Chevron amplify those moves. This strategy buys energy stocks when oil prices jump on geopolitical fear, and exits quickly before the glut narrative drags prices back down.
Strategy approach
Build a rule-based strategy on D1 timeframe. Enter long XOM and CVX when front-month crude oil futures (CL1) rise >2% in a single day after a 3-day decline. Exit after 5 trading days or if crude drops >3% from entry price, whichever comes first. Use a 4% stop loss.
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: ROC/ATR Signal Long (XOM@1d) (3 conditions)
- Entry: ROC/ATR Signal Long (CVX@1d) (3 conditions)
- Entry: ROC/ATR Signal Long (USO@1d) (3 conditions)
- Entry: ROC Signal Long (XOM@1d) (2 conditions)
- Entry: ROC Signal Long (CVX@1d) (2 conditions)
- Entry: ROC Signal Long (USO@1d) (2 conditions)
- Exit: ROC Threshold Exit (XOM@1d) (1 condition)
- Exit: ROC Threshold Exit (CVX@1d) (1 condition)
- Exit: ROC Threshold Exit (USO@1d) (1 condition)
- Exit: TP: Near Resistance[1] (XOM@1d) (1 condition)
- Exit: TP: Near Resistance[1] (CVX@1d) (1 condition)
- Exit: TP: Near Resistance[1] (USO@1d) (1 condition)
- Exit: SL: Below Support[1] (XOM@1d) (1 condition)
- Exit: SL: Below Support[1] (CVX@1d) (1 condition)
- Exit: SL: Below Support[1] (USO@1d) (1 condition)
- Exit: Stop Loss at 2.8% (1 condition)
- Exit: Take Profit at 5.5% (1 condition)
Shared strategy rules
Rule configuration
{
"data_dependencies": [
{
"symbol": "XOM",
"timeframe": "1d"
},
{
"symbol": "CVX",
"timeframe": "1d"
},
{
"symbol": "USO",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"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_xom",
"name": "ROC/ATR Signal Long (XOM@1d)",
"priority": 1,
"trade_symbol": "XOM"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"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_cvx",
"name": "ROC/ATR Signal Long (CVX@1d)",
"priority": 2,
"trade_symbol": "CVX"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"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_uso",
"name": "ROC/ATR Signal Long (USO@1d)",
"priority": 3,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_xom",
"name": "ROC Signal Long (XOM@1d)",
"priority": 2,
"trade_symbol": "XOM"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_cvx",
"name": "ROC Signal Long (CVX@1d)",
"priority": 3,
"trade_symbol": "CVX"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_uso",
"name": "ROC Signal Long (USO@1d)",
"priority": 4,
"trade_symbol": "USO"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_xom",
"name": "ROC Threshold Exit (XOM@1d)",
"priority": 1,
"purpose": "signal",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_cvx",
"name": "ROC Threshold Exit (CVX@1d)",
"priority": 2,
"purpose": "signal",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_uso",
"name": "ROC Threshold Exit (USO@1d)",
"priority": 3,
"purpose": "signal",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_xom",
"name": "TP: Near Resistance[1] (XOM@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_cvx",
"name": "TP: Near Resistance[1] (CVX@1d)",
"priority": 98,
"purpose": "take_profit",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_uso",
"name": "TP: Near Resistance[1] (USO@1d)",
"priority": 99,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_xom",
"name": "SL: Below Support[1] (XOM@1d)",
"priority": 100,
"purpose": "stop_loss",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_cvx",
"name": "SL: Below Support[1] (CVX@1d)",
"priority": 101,
"purpose": "stop_loss",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_uso",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 102,
"purpose": "stop_loss",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -2.772333333333333
}
}
],
"enabled": true,
"id": "exit_4",
"name": "Stop Loss at 2.8%",
"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.544666666666666
}
}
],
"enabled": true,
"id": "exit_5",
"name": "Take Profit at 5.5%",
"priority": 100,
"purpose": "take_profit"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"risk_percent": 2.772333333333333,
"support_stop_rank": 1,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Indicator configuration
{
"indicators": [
{
"name": "roc",
"period": 1
},
{
"name": "roc",
"period": 3
},
{
"name": "atr",
"period": 14
},
{
"name": "roc",
"period": 1
},
{
"name": "roc",
"period": 3
},
{
"name": "atr",
"period": 14
},
{
"name": "roc",
"period": 1
},
{
"name": "roc",
"period": 3
},
{
"name": "atr",
"period": 14
}
]
}Parsed strategy
{
"data_dependencies": [
{
"symbol": "XOM",
"timeframe": "1d"
},
{
"symbol": "CVX",
"timeframe": "1d"
},
{
"symbol": "USO",
"timeframe": "1d"
}
],
"entry_rules": [
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"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_xom",
"name": "ROC/ATR Signal Long (XOM@1d)",
"priority": 1,
"trade_symbol": "XOM"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"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_cvx",
"name": "ROC/ATR Signal Long (CVX@1d)",
"priority": 2,
"trade_symbol": "CVX"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
},
{
"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_uso",
"name": "ROC/ATR Signal Long (USO@1d)",
"priority": 3,
"trade_symbol": "USO"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_xom",
"name": "ROC Signal Long (XOM@1d)",
"priority": 2,
"trade_symbol": "XOM"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_cvx",
"name": "ROC Signal Long (CVX@1d)",
"priority": 3,
"trade_symbol": "CVX"
},
{
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "greater_than",
"right": {
"type": "constant",
"value": 2
}
},
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 3
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": 0
}
}
],
"direction": "long",
"enabled": true,
"id": "entry_2_uso",
"name": "ROC Signal Long (USO@1d)",
"priority": 4,
"trade_symbol": "USO"
}
],
"exit_rules": [
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "XOM",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_xom",
"name": "ROC Threshold Exit (XOM@1d)",
"priority": 1,
"purpose": "signal",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "CVX",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_cvx",
"name": "ROC Threshold Exit (CVX@1d)",
"priority": 2,
"purpose": "signal",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"chart_ref": {
"symbol": "USO",
"timeframe": "1d"
},
"indicator": {
"name": "roc",
"period": 1
},
"type": "indicator"
},
"operator": "less_than",
"right": {
"type": "constant",
"value": -3
}
}
],
"enabled": true,
"id": "exit_1_uso",
"name": "ROC Threshold Exit (USO@1d)",
"priority": 3,
"purpose": "signal",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_xom",
"name": "TP: Near Resistance[1] (XOM@1d)",
"priority": 97,
"purpose": "take_profit",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_cvx",
"name": "TP: Near Resistance[1] (CVX@1d)",
"priority": 98,
"purpose": "take_profit",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "greater_than_or_equal",
"right": {
"rank": 1,
"type": "resistance_level"
}
}
],
"enabled": true,
"id": "exit_2_uso",
"name": "TP: Near Resistance[1] (USO@1d)",
"priority": 99,
"purpose": "take_profit",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_xom",
"name": "SL: Below Support[1] (XOM@1d)",
"priority": 100,
"purpose": "stop_loss",
"target_symbol": "XOM"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_cvx",
"name": "SL: Below Support[1] (CVX@1d)",
"priority": 101,
"purpose": "stop_loss",
"target_symbol": "CVX"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "close",
"type": "price"
},
"operator": "crossed_above",
"right": {
"rank": 1,
"type": "support_level"
}
}
],
"enabled": true,
"id": "exit_3_uso",
"name": "SL: Below Support[1] (USO@1d)",
"priority": 102,
"purpose": "stop_loss",
"target_symbol": "USO"
},
{
"applies_to": "both",
"conditions": [
{
"left": {
"field": "unrealized_pnl_percent",
"type": "position"
},
"operator": "less_than_or_equal",
"right": {
"type": "constant",
"value": -2.772333333333333
}
}
],
"enabled": true,
"id": "exit_4",
"name": "Stop Loss at 2.8%",
"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.544666666666666
}
}
],
"enabled": true,
"id": "exit_5",
"name": "Take Profit at 5.5%",
"priority": 100,
"purpose": "take_profit"
}
],
"position_sizing": {
"max_position_percent": 25,
"method": {
"risk_percent": 2.772333333333333,
"support_stop_rank": 1,
"type": "fixed_risk"
},
"min_position_value": 100
},
"trigger_timeframe": "1d",
"version": 1
}Strategy instructions
Trading agent generated from recommendation idea 'Oil market can't make up its mind — play the volatility by riding energy stocks both ways'. Thesis: The oil market is sending mixed signals. On one hand, oil is on track for its biggest quarterly drop since 2020 because peace deal progress is reopening shipping lanes and creating a supply glut. On the other hand, a recent tanker attack in the Middle East shows how quickly that supply can be disrupted. When the market can't decide whether to panic or relax, oil prices swing violently — and energy stocks like Exxon and Chevron amplify those moves. This strategy buys energy stocks when oil prices jump on geopolitical fear, and exits quickly before the glut narrative drags prices back down.
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