Skip to main content

Keltner EMA Scalp Spot Trading Strategy

Keltner EMA Scalp is a spot breakout strategy. It buys when price reaches or crosses above the upper Keltner Channel while an EMA filter confirms the move.

Keltner EMA Scalp Spot Trading Strategy strategy behavior

The Keltner Channel adapts to volatility: its middle is an EMA of typical price, and its width is based on ATR. Wider volatility produces wider bands and requires a larger move to reach the upper channel.

warning

An upper-channel break can be the start of a trend or the end of a short spike. Keltner EMA Scalp has no volume or higher-timeframe confirmation, so test breakout follow-through carefully.

Trading behavior

Entry

With the default settings, a buy signal requires:

  1. Current close is at or above the upper Keltner Channel.
  2. Current close is at or above the EMA filter.

When KES_REQUIRE_BAND_CROSS is enabled, the previous close must have been below the previous upper channel. This requires a fresh cross instead of accepting price that is already outside the band.

KES_USE_LITERAL_EMA_FILTER reverses the EMA comparison. When enabled, the EMA must be above current price. This is a specialized interpretation and can make upper-channel entries rare or contradictory. Leave it disabled unless a backtest shows a specific reason to use it.

The strategy also checks spread, news block, cooldown, balance, and order minimums. It places one buy and does not DCA.

tip

Use KES_REQUIRE_BAND_CROSS when the strategy enters too late into candles that have remained above the upper channel. It changes the condition from “price is outside” to “price just moved outside.”

Target

In percentage mode, the target is KES_TARGET_PCT above average entry.

In pip mode, KES_TARGET_PIPS is used after being constrained by KES_TARGET_PIPS_MIN and KES_TARGET_PIPS_MAX. For example, a requested value of 15 with the default maximum of 12 results in a 12-pip target.

The final target also covers estimated round-trip fees plus KES_MIN_NET_GAIN_PCT.

Opposite Keltner exit

The bearish signal requires price at or below the lower Keltner Channel and the corresponding bearish EMA condition. With fresh-cross mode enabled, the previous close must have been above the lower band.

KES_EXIT_ON_SHORT_SIGNAL allows this signal to sell only at or above break-even. It does not close a losing position.

Protection and middle-band stop

With KES_USE_PROTECTION enabled, the strategy can sell below break-even.

The normal stop is:

  • KES_STOP_PCT below average entry in percentage mode.
  • KES_STOP_PIPS × KES_PIP_SIZE below entry in pip mode.

When KES_USE_MIDDLE_BAND_STOP is enabled, the current Keltner middle line is also considered. The strategy uses the closer valid stop, so the middle band can tighten protection as it moves.

Without protection enabled, the stop settings are informational.

News block and cooldown

The manual news block pauses new entries but not open-position management. The strategy also waits for open orders to clear and observes KES_COOLDOWN_MS between live actions.

Good market conditions

Keltner EMA Scalp is best suited to:

  • Liquid markets breaking out with sustained directional pressure.
  • Volatility expansion after a compact range.
  • Price clearly above its short EMA.
  • Small spreads relative to the target.

It is weaker during:

  • False breakouts that quickly return inside the channel.
  • Sideways markets with frequent band touches.
  • Thin markets where a wick crosses the band without tradable follow-through.
  • Extremely volatile candles where entry occurs far from the middle line.

The default five-minute period balances responsiveness and noise. One-minute use requires excellent liquidity; longer periods make the 40-candle channel represent a much broader market window.

How to create the strategy

  1. Create a new spot strategy in the advanced strategy editor.
  2. Select keltneremascalp as both buy and sell method.
  3. Start on the default five-minute period.
  4. Align the general and KES trading-limit values.
  5. Confirm spread and exchange minimums.
  6. Leave literal EMA filter disabled initially.
  7. Compare continuous-above-band entry with fresh-cross mode.
  8. Test protection during failed breakouts.

A practical tuning workflow

Start with the channel:

  • Increase Keltner length for a slower baseline.
  • Increase ATR multiplier for wider bands and fewer breakouts.
  • Decrease either value for faster, more frequent signals.

Then tune the EMA. A shorter EMA follows price closely and passes more entries; a longer EMA demands stronger separation from the recent trend.

Choose fresh-cross mode based on the behavior you want. It reduces entries when price is already outside the channel but can miss a continuation after strategy restart.

Tune target and stop last. In pip mode, ensure the min/max range actually contains the target you intend to use.

Core settings

LabelConfig parameterDefaultDescription
Buy enabledBUY_ENABLEDtrueAllows upper-channel entries.
Sell enabledSELL_ENABLEDtrueAllows targets, bearish signals, and protective stops.
PeriodPERIOD5Candle period in minutes.
Trading limitTRADING_LIMIT100Compatibility fallback only. It is ignored while the strategy-specific trading limit is positive; the two values do not need to match. For USDT-BTC, this value is in USDT.
Funds reserveFUNDS_RESERVE0For USDT-BTC, the amount of USDT the bot must leave unused.
Amount retained from sellsKEEP_QUOTE0For USDT-BTC, the amount of BTC the strategy must not sell.
Min volume to buyMIN_VOLUME_TO_BUY10General minimum buy value. Keep it aligned with KES_MIN_ORDER_VALUE. For USDT-BTC, this value is in USDT.
Min volume to sellMIN_VOLUME_TO_SELL10General minimum sell value. Keep it aligned with KES_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT.
GainGAIN0.3General target value. Keep the intended target explicit in KES_TARGET_PCT.

Execution and signal settings

LabelConfig parameterDefaultDescription
KES trading limitKES_TRADING_LIMIT100For USDT-BTC, the amount of USDT used for the single buy.
KES min order valueKES_MIN_ORDER_VALUE10Minimum value required for a buy. For USDT-BTC, this value is in USDT.
KES min sell valueKES_MIN_SELL_VALUE10Minimum position value required for a sell. For USDT-BTC, this value is in USDT.
KES cooldown msKES_COOLDOWN_MS30000Minimum milliseconds between live actions.
KES max spread %KES_MAX_SPREAD_PCT0.06Maximum spread as a percentage of midpoint.
KES max spread absoluteKES_MAX_SPREAD_ABSOLUTE0Optional spread maximum in pair price units. 0 disables it. For USDT-BTC, this value is in USDT.
Keltner lengthKES_KELTNER_LENGTH40EMA and ATR lookback used to build the channel.
Keltner ATR multiplierKES_KELTNER_ATR_MULTIPLIER1.5ATR multiple between middle and outer bands. Higher values widen the channel.
EMA lengthKES_EMA_LENGTH8Price-trend EMA used for entry and opposite signals.
Require band crossKES_REQUIRE_BAND_CROSSfalseRequires a fresh close across an outer channel rather than simply being outside it.
Use literal EMA filterKES_USE_LITERAL_EMA_FILTERfalseReverses the normal EMA comparison. This is restrictive and should be enabled only after dedicated testing.
Exit on short signalKES_EXIT_ON_SHORT_SIGNALtrueAllows a lower-channel bearish signal to sell at or above break-even.

Target and stop settings

LabelConfig parameterDefaultDescription
Use pipsKES_USE_PIPSfalseUses pip target and stop distances instead of percentages.
Pip sizeKES_PIP_SIZE0.0001Pair-price value of one pip. For USDT-BTC, this value is in USDT.
Target pipsKES_TARGET_PIPS8Requested pip target, constrained by min and max.
Target pips minKES_TARGET_PIPS_MIN5Smallest allowed pip target.
Target pips maxKES_TARGET_PIPS_MAX12Largest allowed pip target.
Target %KES_TARGET_PCT0.5Profit distance above entry in percentage mode.
Minimum net gain %KES_MIN_NET_GAIN_PCT0.1Minimum gain above estimated fee-adjusted break-even.
Stop pipsKES_STOP_PIPS9Protective distance in pip mode.
Stop %KES_STOP_PCT0.4Protective distance below entry in percentage mode.
Use middle band stopKES_USE_MIDDLE_BAND_STOPfalseAdds the moving Keltner middle line and uses the closer valid stop.
Use protectionKES_USE_PROTECTIONfalseAllows the configured stop to close below break-even.

News and backtesting

LabelConfig parameterDefaultDescription
News blockKES_NEWS_BLOCKfalseManually pauses new entries.
News block untilKES_NEWS_BLOCK_UNTIL0Timestamp until which entries remain blocked.
Backtest sinceBF_SINCE0Optional backtest start boundary.
Backtest untilBF_UNTIL0Optional backtest end boundary.
Deep testingDEEP_TESTINGfalseEnables deeper backtesting without changing live signals.

Important limitations

  • The strategy opens one position and does not DCA.
  • It has no volume or higher-timeframe filter.
  • Opposite signals never realize a loss.
  • Only enabled protection activates the stop.
  • Literal EMA mode reverses the normal filter and can suppress most entries.
  • The news block is manual.

The important question is not whether price can touch the upper Keltner Channel; it is whether the pair normally follows through far enough to cover execution costs and the requested target.