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.
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:
- The fast line finishes above both the medium and slow lines.
- On the previous candle, the fast line was at or below at least one of them.
- There is no position large enough to manage.
- Spread is within the configured percentage limit and, when used, the absolute limit.
- The optional UTC session filter permits entries.
- The manual news block is clear.
- Buying is enabled, the cooldown has passed, and sufficient unreserved USDT balance for a pair such as
USDT-BTCis 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_PCTin percentage mode.EPS_TARGET_PIPSmultiplied byEPS_PIP_SIZEin 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_PCTin 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
- Create a new spot strategy in the advanced strategy editor.
- Select
emapredictivescalpas both the buy and sell method. - Start with the one-minute period only on a highly liquid pair.
- Keep the predictive EMA defaults for the first backtest.
- Set both visible trading-limit fields to the intended order value.
- Confirm exchange minimum order values and trading fees.
- Test with and without loss protection.
- 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
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Buy enabled | BUY_ENABLED | true | Allows new buy orders. Turning it off still leaves sell-side management available. |
| Sell enabled | SELL_ENABLED | true | Allows target, bearish-cross, and protective exits. |
| Period | PERIOD | 1 | Candle period in minutes. The strategy is designed around fast charts, but every available period should be tested separately. |
| Trading limit | TRADING_LIMIT | 100 | Compatibility 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 reserve | FUNDS_RESERVE | 0 | For USDT-BTC, the amount of USDT the bot must leave unused. |
| Amount retained from sells | KEEP_QUOTE | 0 | For USDT-BTC, the amount of BTC the strategy must not sell. |
| Min volume to buy | MIN_VOLUME_TO_BUY | 10 | General minimum buy value. Keep it aligned with EPS_MIN_ORDER_VALUE. For USDT-BTC, this value is in USDT. |
| Min volume to sell | MIN_VOLUME_TO_SELL | 10 | General minimum sell value. Keep it aligned with EPS_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT. |
| Gain | GAIN | 0.25 | General target value. Keep the intended target explicit in EPS_TARGET_PCT. |
Order and execution settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| EPS trading limit | EPS_TRADING_LIMIT | 100 | For USDT-BTC, the amount of USDT used for the single entry order. |
| EPS min order value | EPS_MIN_ORDER_VALUE | 10 | Minimum 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 value | EPS_MIN_SELL_VALUE | 10 | Minimum position value required for a sell. Smaller inventory is treated as dust. For USDT-BTC, this value is in USDT. |
| EPS cooldown ms | EPS_COOLDOWN_MS | 30000 | Minimum milliseconds between live actions. 30000 is 30 seconds. |
| EPS max spread % | EPS_MAX_SPREAD_PCT | 0.08 | Maximum bid/ask spread as a percentage of midpoint. |
| EPS max spread absolute | EPS_MAX_SPREAD_ABSOLUTE | 0 | Optional maximum spread in pair price units. 0 disables this additional limit. For USDT-BTC, this value is in USDT. |
| Use predictive EMA | EPS_USE_PREDICTIVE_EMA | true | Combines each line's long and short lengths. Disable it to use classic EMAs based on the long lengths. |
| Strict double cross | EPS_STRICT_DOUBLE_CROSS | false | Requires fast EMA to cross from below both slower lines. Loose mode only requires it to have been below at least one. |
EMA lengths
| Label | Config parameter | Default | Description |
|---|---|---|---|
| EMA25 long | EPS_EMA25_LONG | 25 | Long component of the fast predictive line; the classic fast EMA length when predictive mode is disabled. |
| EMA25 short | EPS_EMA25_SHORT | 8 | Short component that makes the fast predictive line react sooner. |
| EMA50 long | EPS_EMA50_LONG | 50 | Long component of the medium predictive line; the classic medium EMA length when predictive mode is disabled. Keep it longer than EMA25 long. |
| EMA50 short | EPS_EMA50_SHORT | 15 | Short component of the medium predictive line. Keep it longer than EMA25 short. |
| EMA100 long | EPS_EMA100_LONG | 100 | Long component of the slow predictive line; the classic slow EMA length when predictive mode is disabled. Keep it longest. |
| EMA100 short | EPS_EMA100_SHORT | 50 | Short component of the slow predictive line. Keep it longest among the short components. |
Targets and stops
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Use pips | EPS_USE_PIPS | false | Uses pip targets and stops instead of percentage distances. |
| Pip size | EPS_PIP_SIZE | 0.0001 | Pair-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 pips | EPS_TARGET_PIPS | 7 | Requested profit distance in pips. It is limited by target pips min and max. |
| Target pips min | EPS_TARGET_PIPS_MIN | 5 | Lowest pip target the strategy may use. |
| Target pips max | EPS_TARGET_PIPS_MAX | 10 | Highest pip target the strategy may use. |
| Stop pips | EPS_STOP_PIPS | 10 | Requested protective distance in pips. It is limited by stop pips min and max. |
| Stop pips min | EPS_STOP_PIPS_MIN | 9 | Tightest pip stop the strategy may use. |
| Stop pips max | EPS_STOP_PIPS_MAX | 12 | Widest pip stop the strategy may use. |
| Target % | EPS_TARGET_PCT | 0.5 | Profit target above entry in percentage mode. The final target also covers fees and minimum net gain. |
| Stop % | EPS_STOP_PCT | 0.45 | Stop distance below average entry in percentage mode. It applies only when loss protection is enabled. |
| Use loss protection | EPS_USE_PROTECTION | false | Allows the stop to close a position below break-even. |
| Minimum net gain % | EPS_MIN_NET_GAIN_PCT | 0.1 | Minimum gain required above estimated round-trip break-even for a normal target. |
Session, news, and backtesting
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Use session filter | EPS_USE_SESSION_FILTER | false | Restricts new entries to the configured UTC windows. Open positions remain managed outside them. |
| Session windows UTC | EPS_SESSION_WINDOWS_UTC | 08:00-10:00,13:00-15:00 | Comma-separated HH:MM-HH:MM entry windows in UTC. |
| News block | EPS_NEWS_BLOCK | false | Manually blocks new entries until disabled. |
| News block until | EPS_NEWS_BLOCK_UNTIL | 0 | Timestamp until which new entries remain blocked. 0 means no timed block. |
| Backtest since | BF_SINCE | 0 | Optional backtest start boundary. |
| Backtest until | BF_UNTIL | 0 | Optional backtest end boundary. |
| Deep testing | DEEP_TESTING | false | Enables 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.