Skip to main content

EMA Predictive Scalp Spot Trading Strategy

EMA Predictive Scalp is a spot strategy for short, directional moves. It watches three moving-average lines—fast, medium, and slow—and buys when the fast line crosses above both slower lines.

EMA Predictive Scalp Spot Trading Strategy strategy behavior

By default, these are predictive EMAs. Each line combines a long and short EMA length to react sooner than a regular EMA with the same headline period. You can switch to classic EMAs if you prefer a simpler, slower signal.

warning

The default period is one minute. At this speed, fees, spread, slippage, candle quality, and exchange latency can matter more than a small difference in indicator settings. Use liquid pairs and realistic backtest costs.

Trading behavior

The strategy calculates three moving-average lines commonly referred to as EMA 25, EMA 50, and EMA 100. Their actual behavior is controlled by the six long and short length settings.

Entry

A normal entry happens when:

  1. The fast line finishes above both the medium and slow lines.
  2. On the previous candle, the fast line was at or below at least one of them.
  3. There is no position large enough to manage.
  4. Spread is within the configured percentage limit and, when used, the absolute limit.
  5. The optional UTC session filter permits entries.
  6. The manual news block is clear.
  7. Buying is enabled, the cooldown has passed, and sufficient unreserved USDT balance for a pair such as USDT-BTC is available.

With EPS_STRICT_DOUBLE_CROSS enabled, the previous fast line must have been at or below both slower lines. This turns a partial alignment into a stricter, simultaneous crossover setup.

The strategy makes one buy for the configured order value. It does not average down or add to an existing position.

tip

The signal is a crossover event, not simply bullish EMA ordering. If the fast line was already above both slower lines when the strategy started, it waits for a new qualifying cross.

Predictive and classic EMA modes

With predictive EMA enabled, every displayed line uses its long and short lengths together. The short component makes the line more responsive, which can surface a cross earlier but also makes it more sensitive to noise.

With predictive EMA disabled, the strategy uses the three long lengths as ordinary EMAs. The corresponding short-length settings no longer affect the signal.

Profit target

After buying, the strategy stores a target based on the entry price. It uses:

  • EPS_TARGET_PCT in percentage mode.
  • EPS_TARGET_PIPS multiplied by EPS_PIP_SIZE in pip mode.

The configured pip target is kept between the minimum and maximum pip settings. The final target also accounts for trading fees and the configured minimum net gain.

During backtesting, a target is reached when the candle high touches it. In live trading, the bid must reach it.

Bearish cross exit

A bearish cross is the mirror image of the entry: the fast line moves below both slower lines. This can close an existing position, but only when the bid is at or above break-even.

This means a position may remain open through a bearish EMA cross if selling would realize a loss. The strategy then waits for its profit target, another eligible exit, or a protective stop when protection is enabled.

Loss protection

When EPS_USE_PROTECTION is enabled, the strategy places its stop logic at:

  • Average entry minus EPS_STOP_PCT in percentage mode.
  • Average entry minus the bounded pip stop in pip mode.

A stop is allowed to realize a loss. Without protection, the displayed stop is informational and bearish cross exits remain break-even protected.

warning

A very tight stop on a one-minute chart can be reached by normal candle noise. Test protection with intrabar high/low data and realistic spread before using it live.

Session, news block, and cooldown

The session filter affects new entries only. It does not prevent an open position from reaching its target or protective stop.

Session windows use UTC and support comma-separated ranges. A range can also cross midnight. The default windows are:

08:00-10:00,13:00-15:00

The news block is manual. It does not download an economic calendar. Enable it directly or provide an expiry timestamp when you want to pause entries around an event.

The strategy waits for open orders to clear and observes EPS_COOLDOWN_MS between live actions.

Good market conditions

EMA Predictive Scalp works best when a liquid market is beginning a clean short-term move:

  • Fast momentum is overtaking both medium- and longer-term direction.
  • Spread is consistently small compared with the target.
  • Candles are continuous, with few isolated wicks or price gaps.
  • The move has enough follow-through to reach a compact target.

It is a weaker fit for:

  • Flat markets where the three lines repeatedly braid together.
  • Thin pairs with intermittent trades or unreliable one-minute candles.
  • Sudden spikes that create a cross only after most of the move has happened.
  • Markets with spread and round-trip fees close to the profit objective.

Strict double-cross mode is most useful when loose mode enters too many partial realignments. Classic EMA mode can help when predictive lines react too often to noise.

How to create an EMA Predictive Scalp strategy

  1. Create a new spot strategy in the advanced strategy editor.
  2. Select emapredictivescalp as both the buy and sell method.
  3. Start with the one-minute period only on a highly liquid pair.
  4. Keep the predictive EMA defaults for the first backtest.
  5. Set both visible trading-limit fields to the intended order value.
  6. Confirm exchange minimum order values and trading fees.
  7. Test with and without loss protection.
  8. Compare session-filtered results with full-day results.

A practical tuning workflow

First, measure whether the pair is suitable at all. Compare its normal spread with the target after fees. A good signal cannot rescue an uneconomical order.

Next, adjust signal sensitivity:

  • Increase long lengths to demand a more established trend.
  • Decrease short lengths to make predictive lines react faster.
  • Enable strict double cross to require a cleaner transition.
  • Disable predictive EMA to use the more conventional long EMAs.

Then tune exits. Keep EPS_TARGET_PIPS and EPS_STOP_PIPS inside their configured min/max ranges; values outside those ranges are limited to the nearest boundary. In percentage mode, the pip values are irrelevant.

Finally, test time filters. A session that works for one asset or exchange may not suit another. Use UTC when translating your intended local times.

Core settings

LabelConfig parameterDefaultDescription
Buy enabledBUY_ENABLEDtrueAllows new buy orders. Turning it off still leaves sell-side management available.
Sell enabledSELL_ENABLEDtrueAllows target, bearish-cross, and protective exits.
PeriodPERIOD1Candle period in minutes. The strategy is designed around fast charts, but every available period should be tested separately.
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 EPS_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 EPS_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT.
GainGAIN0.25General target value. Keep the intended target explicit in EPS_TARGET_PCT.

Order and execution settings

LabelConfig parameterDefaultDescription
EPS trading limitEPS_TRADING_LIMIT100For USDT-BTC, the amount of USDT used for the single entry order.
EPS min order valueEPS_MIN_ORDER_VALUE10Minimum value required to place a buy. Set it at or above the exchange minimum. For USDT-BTC, this value is in USDT.
EPS min sell valueEPS_MIN_SELL_VALUE10Minimum position value required for a sell. Smaller inventory is treated as dust. For USDT-BTC, this value is in USDT.
EPS cooldown msEPS_COOLDOWN_MS30000Minimum milliseconds between live actions. 30000 is 30 seconds.
EPS max spread %EPS_MAX_SPREAD_PCT0.08Maximum bid/ask spread as a percentage of midpoint.
EPS max spread absoluteEPS_MAX_SPREAD_ABSOLUTE0Optional maximum spread in pair price units. 0 disables this additional limit. For USDT-BTC, this value is in USDT.
Use predictive EMAEPS_USE_PREDICTIVE_EMAtrueCombines each line's long and short lengths. Disable it to use classic EMAs based on the long lengths.
Strict double crossEPS_STRICT_DOUBLE_CROSSfalseRequires fast EMA to cross from below both slower lines. Loose mode only requires it to have been below at least one.

EMA lengths

LabelConfig parameterDefaultDescription
EMA25 longEPS_EMA25_LONG25Long component of the fast predictive line; the classic fast EMA length when predictive mode is disabled.
EMA25 shortEPS_EMA25_SHORT8Short component that makes the fast predictive line react sooner.
EMA50 longEPS_EMA50_LONG50Long component of the medium predictive line; the classic medium EMA length when predictive mode is disabled. Keep it longer than EMA25 long.
EMA50 shortEPS_EMA50_SHORT15Short component of the medium predictive line. Keep it longer than EMA25 short.
EMA100 longEPS_EMA100_LONG100Long component of the slow predictive line; the classic slow EMA length when predictive mode is disabled. Keep it longest.
EMA100 shortEPS_EMA100_SHORT50Short component of the slow predictive line. Keep it longest among the short components.

Targets and stops

LabelConfig parameterDefaultDescription
Use pipsEPS_USE_PIPSfalseUses pip targets and stops instead of percentage distances.
Pip sizeEPS_PIP_SIZE0.0001Pair-price value of one pip. Set it to match the pair quotation before enabling pip mode. For USDT-BTC, this value is in USDT.
Target pipsEPS_TARGET_PIPS7Requested profit distance in pips. It is limited by target pips min and max.
Target pips minEPS_TARGET_PIPS_MIN5Lowest pip target the strategy may use.
Target pips maxEPS_TARGET_PIPS_MAX10Highest pip target the strategy may use.
Stop pipsEPS_STOP_PIPS10Requested protective distance in pips. It is limited by stop pips min and max.
Stop pips minEPS_STOP_PIPS_MIN9Tightest pip stop the strategy may use.
Stop pips maxEPS_STOP_PIPS_MAX12Widest pip stop the strategy may use.
Target %EPS_TARGET_PCT0.5Profit target above entry in percentage mode. The final target also covers fees and minimum net gain.
Stop %EPS_STOP_PCT0.45Stop distance below average entry in percentage mode. It applies only when loss protection is enabled.
Use loss protectionEPS_USE_PROTECTIONfalseAllows the stop to close a position below break-even.
Minimum net gain %EPS_MIN_NET_GAIN_PCT0.1Minimum gain required above estimated round-trip break-even for a normal target.

Session, news, and backtesting

LabelConfig parameterDefaultDescription
Use session filterEPS_USE_SESSION_FILTERfalseRestricts new entries to the configured UTC windows. Open positions remain managed outside them.
Session windows UTCEPS_SESSION_WINDOWS_UTC08:00-10:00,13:00-15:00Comma-separated HH:MM-HH:MM entry windows in UTC.
News blockEPS_NEWS_BLOCKfalseManually blocks new entries until disabled.
News block untilEPS_NEWS_BLOCK_UNTIL0Timestamp until which new entries remain blocked. 0 means no timed block.
Backtest sinceBF_SINCE0Optional backtest start boundary.
Backtest untilBF_UNTIL0Optional backtest end boundary.
Deep testingDEEP_TESTINGfalseEnables Gunbot's deeper backtesting mode without changing live signals.

Important limitations

  • The strategy opens one position and does not DCA.
  • A bullish or bearish setup requires a new crossover event.
  • Bearish EMA exits do not realize a loss; only enabled loss protection can do that.
  • Session and news controls pause entries, not exits.
  • Pip target and stop values are constrained by their min/max settings.
  • Predictive mode makes signals faster, but not predictive in the sense of forecasting future price.

The best first test is not the configuration with the most trades. Look for a configuration whose target remains achievable after fees and whose losing positions do not remain open longer than you are willing to accept.