Skip to main content

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.

Double CCI RSIOMA Spot Trading Strategy strategy behavior

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:

  1. Fast CCI and slow CCI are both above zero.
  2. Fast CCI is at least as high as slow CCI.
  3. RSIOMA is above DCR_RSIOMA_BUY_LEVEL.
  4. If the MA filter is enabled, the fast SMA has just crossed above the slow SMA.
  5. If Heikin Ashi confirmation is enabled, the current smoothed Heikin Ashi candle is green.
  6. The pair has no position worth at least the configured minimum sell value.
  7. The spread is within both enabled spread limits.
  8. Buying is enabled, the manual news block is clear, the cooldown has passed, and sufficient unreserved USDT balance for a pair such as USDT-BTC is 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

  1. Create a new spot strategy in the advanced strategy editor.
  2. Select doubleccirsioma as both the buy and sell method.
  3. Keep the five-minute period for the first test.
  4. Set both visible trading-limit fields to the intended order value.
  5. Confirm the pair's exchange minimum and set the buy and sell minimums accordingly.
  6. 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

LabelConfig parameterDefaultDescription
Buy enabledBUY_ENABLEDtrueAllows new entries. Turning it off does not disable sell-side position management.
Sell enabledSELL_ENABLEDtrueAllows the strategy to close a position. Leave enabled when BTC is already held on a pair such as USDT-BTC.
PeriodPERIOD5Candle 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 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 DCR_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 DCR_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT.
GainGAIN0.35General percentage target. Keep it aligned with DCR_TARGET_PCT.

Order and execution settings

LabelConfig parameterDefaultDescription
DCR trading limitDCR_TRADING_LIMIT100For USDT-BTC, the amount of USDT used for the single entry order. The strategy never spends reserved funds.
DCR min order valueDCR_MIN_ORDER_VALUE10Minimum 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 valueDCR_MIN_SELL_VALUE10Minimum sellable position value. Inventory below this threshold is treated as dust. For USDT-BTC, this value is in USDT.
DCR cooldown msDCR_COOLDOWN_MS60000Minimum milliseconds between strategy orders. 60000 is one minute.
DCR max spread %DCR_MAX_SPREAD_PCT0.08Maximum bid/ask spread as a percentage of midpoint. Lower values demand better liquidity.
DCR max spread absoluteDCR_MAX_SPREAD_ABSOLUTE0Optional 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

LabelConfig parameterDefaultDescription
Use RSIOMADCR_USE_RSIOMAtrueCalculates RSI from an EMA-smoothed close series. When disabled, RSI uses ordinary closes.
RSI lengthDCR_RSI_LENGTH14RSI lookback. Shorter values make the momentum gate react faster.
RSIOMA MA lengthDCR_RSIOMA_MA_LENGTH14EMA length used to smooth closes before RSI is calculated. It still affects the source even though the name suggests smoothing RSI itself.
RSIOMA buy levelDCR_RSIOMA_BUY_LEVEL65Entry requires RSIOMA to be strictly above this value. Lowering it admits weaker momentum.
RSIOMA sell levelDCR_RSIOMA_SELL_LEVEL35One bearish exit condition requires RSIOMA below this level while both CCIs are bearish.
Fast CCI lengthDCR_FAST_CCI_LENGTH14Lookback for the responsive CCI.
Slow CCI lengthDCR_SLOW_CCI_LENGTH34Lookback for the slower CCI. Keep it longer than fast CCI.
HA smooth lengthDCR_HA_SMOOTH_LENGTH6EMA smoothing applied to Heikin Ashi open and close. Higher values make color changes slower.
Require HA green entryDCR_REQUIRE_HA_GREEN_ENTRYfalseWhen 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

LabelConfig parameterDefaultDescription
Use MA crossDCR_USE_MA_CROSSfalseRequires a fresh bullish SMA crossover for entry and allows fast-below-slow to contribute a sell signal.
MA fast lengthDCR_MA_FAST_LENGTH2Fast SMA lookback used by the optional crossover.
MA slow lengthDCR_MA_SLOW_LENGTH8Slow SMA lookback. Keep it longer than the fast value.

Targets and protection

LabelConfig parameterDefaultDescription
Use pipsDCR_USE_PIPSfalseSelects pip distances instead of percentage distances for the target and internal stop calculation.
Pip sizeDCR_PIP_SIZE0.0001Pair-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 1mDCR_TARGET_PIPS_1M10Pip target used on periods other than 5 minutes.
Target pips 5mDCR_TARGET_PIPS_5M15Pip target used when PERIOD is 5.
Stop pips 1mDCR_STOP_PIPS_1M10Protective-stop distance for periods other than 5 when pip mode and protection are enabled.
Stop pips 5mDCR_STOP_PIPS_5M12Protective-stop distance for the five-minute period when pip mode and protection are enabled.
Target %DCR_TARGET_PCT0.35Percentage target above average entry in percentage mode. Very small values are still constrained by trading fees.
Stop %DCR_STOP_PCT0.5Protective-stop distance in percentage mode.
Use protectionDCR_USE_PROTECTIONfalseActivates the configured loss-taking stop.
Minimum net gain %DCR_MIN_NET_GAIN_PCT0.1Intended gain beyond estimated round-trip fee break-even.
Use Fibonacci targetDCR_USE_FIB_TARGETtrueAllows the nearest calculated Fibonacci level above price to reduce the configured target, without bypassing fee and break-even safeguards.
Fibonacci lookbackDCR_FIB_LOOKBACK48Number of recent candles used to find the high and low for Fibonacci levels.

News and backtesting settings

LabelConfig parameterDefaultDescription
News blockDCR_NEWS_BLOCKfalseManually blocks new entries. It does not force an open position to close.
News block untilDCR_NEWS_BLOCK_UNTIL0Timestamp until which entries stay blocked. 0 means there is no timed block.
Backtest sinceBF_SINCE0Optional backtest start boundary.
Backtest untilBF_UNTIL0Optional backtest end boundary.
Deep testingDEEP_TESTINGfalseEnables 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 block is 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.