Strategy Examples
This page gives copy-pasteable examples for project strategies.
Example 1: Scaffolded Momentum Strategy
This is the pattern generated by neleus new:
from neleus import OrderSide, Strategy, StrategyContext, Bar
class MomentumStrategy(Strategy):
def __init__(self, lookback: int = 20):
super().__init__("momentum")
self.lookback = lookback
self.prices: list[float] = []
def on_bar(self, ctx: StrategyContext, bar: Bar) -> None:
self.prices.append(float(bar.close))
if len(self.prices) < self.lookback:
return
window = self.prices[-self.lookback:]
baseline = sum(window[:-1]) / max(len(window) - 1, 1)
if bar.close > baseline * 1.01:
ctx.market_order(bar.instrument_id, OrderSide.Buy, 0.01)
Use it with:
Example 2: Long-Only Pullback Strategy
from neleus import Bar, OrderSide, Strategy, StrategyContext
class PullbackLongStrategy(Strategy):
def __init__(self, lookback: int = 25, pullback_pct: float = 0.015):
super().__init__("pullback_long")
self.lookback = lookback
self.pullback_pct = pullback_pct
self.prices: list[float] = []
self.in_position = False
def on_bar(self, ctx: StrategyContext, bar: Bar) -> None:
close = float(bar.close)
self.prices.append(close)
if len(self.prices) < self.lookback:
return
moving_average = sum(self.prices[-self.lookback:]) / self.lookback
drawdown_from_average = (close / moving_average) - 1.0
if not self.in_position and drawdown_from_average <= -self.pullback_pct:
ctx.market_order(bar.instrument_id, OrderSide.Buy, 0.01)
self.in_position = True
return
if self.in_position and close >= moving_average:
ctx.market_order(bar.instrument_id, OrderSide.Sell, 0.01, reduce_only=True)
self.in_position = False
Example 3: Parameterized Strategy With Backtest Config
Strategy file:
from neleus import Bar, OrderSide, Strategy, StrategyContext
class SlowMomentumStrategy(Strategy):
def __init__(self, lookback: int = 40, trigger_pct: float = 0.01):
super().__init__("slow_momentum")
self.lookback = lookback
self.trigger_pct = trigger_pct
self.prices: list[float] = []
def on_bar(self, ctx: StrategyContext, bar: Bar) -> None:
close = float(bar.close)
self.prices.append(close)
if len(self.prices) < self.lookback:
return
average = sum(self.prices[-self.lookback:]) / self.lookback
if close >= average * (1.0 + self.trigger_pct):
ctx.market_order(bar.instrument_id, OrderSide.Buy, 0.01)
Config file at configs/slow_momentum.yaml:
Run:
Example 4: Add A New Strategy With The CLI
Then edit strategies/breakout.py, inspect it:
And run it:
Suggested Development Loop
- Start from the scaffolded
momentum.py - Rename or create a new strategy with
neleus strategy new - Keep constructor parameters optional
- Backtest repeatedly
- Run once against recent data
- Move to daemon mode only after the bar-driven logic looks correct