Loading…
Public trading strategy

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