Double CCI RSIOMA Spot Trading Strategy
Double CCI RSIOMA is a momentum strategy for spot markets. It combines a fast and slow Commodity Channel Index (CCI) with RSIOMA, a smoothed Heikin Ashi view, and an optional moving-average crossover.

The strategy is deliberately selective. It does not buy just because one oscillator is positive: both CCI calculations must point up, the fast CCI must lead the slow CCI, and RSIOMA must be above its buy level. You can require still more confirmation with Heikin Ashi or a fresh moving-average cross.
warning
The default profit target is small enough that spread and fees matter. Use liquid pairs, enter the correct exchange fee in Gunbot, and backtest with realistic costs.
Protection is disabled by default. Enable DCR_USE_PROTECTION if the configured stop should be allowed to close a losing position.
Trading behavior
Double CCI RSIOMA needs at least 60 candles before it can evaluate a pair. On every cycle it calculates:
- A fast CCI and a slower CCI from typical candle prices.
- RSI from either an EMA-smoothed price series (RSIOMA mode) or ordinary closes.
- Smoothed Heikin Ashi candle color.
- Fast and slow simple moving averages when the optional crossover filter is enabled.
Entry
A buy setup requires all of the following:
- Fast CCI and slow CCI are both above zero.
- Fast CCI is at least as high as slow CCI.
- RSIOMA is above
DCR_RSIOMA_BUY_LEVEL. - If the MA filter is enabled, the fast SMA has just crossed above the slow SMA.
- If Heikin Ashi confirmation is enabled, the current smoothed Heikin Ashi candle is green.
- The pair has no position worth at least the configured minimum sell value.
- The spread is within both enabled spread limits.
- Buying is enabled, the manual news block is clear, the cooldown has passed, and sufficient unreserved USDT balance for a pair such as
USDT-BTCis available.
The strategy buys once for the smaller of its strategy trading limit and the available USDT balance for a pair such as USDT-BTC. It does not build a DCA ladder.
tip
Enabling the MA crossover filter changes the entry substantially. It requires a new cross on the current candle, not merely a fast average that is already above the slow average. Expect far fewer entries.
Profit target and protection
In percentage mode, the initial target is the average entry price plus DCR_TARGET_PCT. In pip mode, it uses the period-specific pip target instead.
When the Fibonacci target is enabled, the strategy calculates levels between the recent low and high. The nearest level above price can pull the configured target closer. The final sell target still remains above estimated fee break-even plus DCR_MIN_NET_GAIN_PCT.
The stop uses DCR_STOP_PCT in percentage mode or the period-specific pip stop in pip mode. It only executes when DCR_USE_PROTECTION is enabled.
During a backtest, the target counts as touched when the candle high reaches it. In live trading, the bid must reach the target.
Signal exits
The strategy also recognizes a bearish exit when:
- Both CCIs are below zero with fast CCI at or below slow CCI.
- The CCI pair has just turned bearish.
- The optional moving-average filter is enabled and fast SMA is below slow SMA.
- Smoothed Heikin Ashi changes from green to red.
These signal and Heikin Ashi exits are break-even protected: they do not sell below the calculated break-even price. A weak position can therefore remain open after momentum turns against it.
The position is sold in full, except for the amount protected by KEEP_QUOTE.
Cooldown and order priority
Only one action can happen inside DCR_COOLDOWN_MS. When an exit and a new entry could both be considered, the existing position is managed first.
The sidebar reports the current mode, RSIOMA value, both CCI values, Heikin Ashi color, target, stop status, and spread. These are useful for understanding why the pair is seeking, holding, or exiting.
Good market conditions
Double CCI RSIOMA is best suited to liquid markets developing a clean short-term uptrend:
- Both short and medium momentum are positive.
- Pullbacks are shallow enough that momentum can resume.
- Spread stays small relative to the profit target.
- Price moves smoothly enough for CCI and RSIOMA to agree.
It is a weaker fit for:
- Sideways markets where CCI repeatedly crosses zero.
- Sudden, news-driven moves with large spreads.
- Thin pairs where a nominally profitable target disappears after slippage.
- Persistent declines, because ordinary bearish signals will not close a position below break-even.
The five-minute default is a reasonable starting point. One-minute candles react faster but create more false turns; 15-minute or longer candles produce fewer trades and make the default target relatively small compared with each candle's movement.
How to create a Double CCI RSIOMA strategy
- Create a new spot strategy in the advanced strategy editor.
- Select
doubleccirsiomaas both the buy and sell method. - Keep the five-minute period for the first test.
- Set both visible trading-limit fields to the intended order value.
- Confirm the pair's exchange minimum and set the buy and sell minimums accordingly.
- Backtest trending, ranging, and falling periods before assigning the strategy to a live pair.
The two trading-limit controls normally have the same value. Keep them aligned so the intended order size is unambiguous.
A practical tuning workflow
Start with order sizing and spread. A 0.35%–0.5% target leaves little room for poor execution, so reject pairs whose normal spread consumes a meaningful part of that distance.
Next, tune signal speed:
- Shorter CCI and RSI lengths react sooner but flip more often.
- Longer values wait for more established momentum.
- Heikin Ashi confirmation removes some early entries without requiring a precise crossover.
- The MA crossover filter is the strictest optional gate and can miss trends already underway.
Tune exits last. Compare fixed percentage mode with Fibonacci targeting over the same data. Pip mode is mainly useful where a stable pip convention makes sense; for crypto pairs, percentage mode is usually easier to transfer between different price levels.
tip
Change one filter family at a time. If you shorten both CCIs, lower the RSIOMA threshold, and disable smoothing in one test, you will not know which change caused the difference.
Core settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Buy enabled | BUY_ENABLED | true | Allows new entries. Turning it off does not disable sell-side position management. |
| Sell enabled | SELL_ENABLED | true | Allows the strategy to close a position. Leave enabled when BTC is already held on a pair such as USDT-BTC. |
| Period | PERIOD | 5 | Candle period in minutes. It also selects the 1-minute or 5-minute pip target and stop presets. Periods other than 5 use the 1-minute preset. |
| 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 DCR_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 DCR_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT. |
| Gain | GAIN | 0.35 | General percentage target. Keep it aligned with DCR_TARGET_PCT. |
Order and execution settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| DCR trading limit | DCR_TRADING_LIMIT | 100 | For USDT-BTC, the amount of USDT used for the single entry order. The strategy never spends reserved funds. |
| DCR min order value | DCR_MIN_ORDER_VALUE | 10 | Minimum value required to place the buy. Set it at or above the exchange minimum. For USDT-BTC, this value is in USDT. |
| DCR min sell value | DCR_MIN_SELL_VALUE | 10 | Minimum sellable position value. Inventory below this threshold is treated as dust. For USDT-BTC, this value is in USDT. |
| DCR cooldown ms | DCR_COOLDOWN_MS | 60000 | Minimum milliseconds between strategy orders. 60000 is one minute. |
| DCR max spread % | DCR_MAX_SPREAD_PCT | 0.08 | Maximum bid/ask spread as a percentage of midpoint. Lower values demand better liquidity. |
| DCR max spread absolute | DCR_MAX_SPREAD_ABSOLUTE | 0 | Optional maximum spread in pair price units. 0 disables this second limit. If enabled, both spread checks must pass. For USDT-BTC, this value is in USDT. |
CCI, RSIOMA, and Heikin Ashi settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Use RSIOMA | DCR_USE_RSIOMA | true | Calculates RSI from an EMA-smoothed close series. When disabled, RSI uses ordinary closes. |
| RSI length | DCR_RSI_LENGTH | 14 | RSI lookback. Shorter values make the momentum gate react faster. |
| RSIOMA MA length | DCR_RSIOMA_MA_LENGTH | 14 | EMA length used to smooth closes before RSI is calculated. It still affects the source even though the name suggests smoothing RSI itself. |
| RSIOMA buy level | DCR_RSIOMA_BUY_LEVEL | 65 | Entry requires RSIOMA to be strictly above this value. Lowering it admits weaker momentum. |
| RSIOMA sell level | DCR_RSIOMA_SELL_LEVEL | 35 | One bearish exit condition requires RSIOMA below this level while both CCIs are bearish. |
| Fast CCI length | DCR_FAST_CCI_LENGTH | 14 | Lookback for the responsive CCI. |
| Slow CCI length | DCR_SLOW_CCI_LENGTH | 34 | Lookback for the slower CCI. Keep it longer than fast CCI. |
| HA smooth length | DCR_HA_SMOOTH_LENGTH | 6 | EMA smoothing applied to Heikin Ashi open and close. Higher values make color changes slower. |
| Require HA green entry | DCR_REQUIRE_HA_GREEN_ENTRY | false | When enabled, entries additionally require a green smoothed Heikin Ashi candle. Green-to-red can still act as a break-even-protected exit regardless of this entry setting. |
Moving-average filter
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Use MA cross | DCR_USE_MA_CROSS | false | Requires a fresh bullish SMA crossover for entry and allows fast-below-slow to contribute a sell signal. |
| MA fast length | DCR_MA_FAST_LENGTH | 2 | Fast SMA lookback used by the optional crossover. |
| MA slow length | DCR_MA_SLOW_LENGTH | 8 | Slow SMA lookback. Keep it longer than the fast value. |
Targets and protection
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Use pips | DCR_USE_PIPS | false | Selects pip distances instead of percentage distances for the target and internal stop calculation. |
| Pip size | DCR_PIP_SIZE | 0.0001 | Pair-price value of one pip. This must match the pair's quotation if pip mode is used. For USDT-BTC, this value is in USDT. |
| Target pips 1m | DCR_TARGET_PIPS_1M | 10 | Pip target used on periods other than 5 minutes. |
| Target pips 5m | DCR_TARGET_PIPS_5M | 15 | Pip target used when PERIOD is 5. |
| Stop pips 1m | DCR_STOP_PIPS_1M | 10 | Protective-stop distance for periods other than 5 when pip mode and protection are enabled. |
| Stop pips 5m | DCR_STOP_PIPS_5M | 12 | Protective-stop distance for the five-minute period when pip mode and protection are enabled. |
| Target % | DCR_TARGET_PCT | 0.35 | Percentage target above average entry in percentage mode. Very small values are still constrained by trading fees. |
| Stop % | DCR_STOP_PCT | 0.5 | Protective-stop distance in percentage mode. |
| Use protection | DCR_USE_PROTECTION | false | Activates the configured loss-taking stop. |
| Minimum net gain % | DCR_MIN_NET_GAIN_PCT | 0.1 | Intended gain beyond estimated round-trip fee break-even. |
| Use Fibonacci target | DCR_USE_FIB_TARGET | true | Allows the nearest calculated Fibonacci level above price to reduce the configured target, without bypassing fee and break-even safeguards. |
| Fibonacci lookback | DCR_FIB_LOOKBACK | 48 | Number of recent candles used to find the high and low for Fibonacci levels. |
News and backtesting settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| News block | DCR_NEWS_BLOCK | false | Manually blocks new entries. It does not force an open position to close. |
| News block until | DCR_NEWS_BLOCK_UNTIL | 0 | Timestamp until which entries stay blocked. 0 means there is 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. It does not alter live signal logic. |
Important limitations
- This is a single-entry strategy, not an averaging strategy.
- It needs at least 60 candles before it can trade.
- The ordinary momentum and Heikin Ashi exits refuse to realize a loss.
- The stop-distance settings execute only when protection is enabled.
News blockis manual; the strategy does not fetch an economic calendar.- A Fibonacci target can make an exit closer, but never below the internal fee-aware minimum.
Backtest with the same period, fees, and approximate spread you expect live. A configuration that only works with zero costs is not a useful scalping configuration.