Strategy vault / Machine learning
Dual CCI Quantitative Strategy
This strategy combines the classic technical indicator CCI and self-developed VCI and MCI dual indices to form trading signals, which is a typical quantitative trading strategy. By identifying the trend and momentum…

Overview
This strategy combines the classic technical indicator CCI and self-developed VCI and MCI dual indices to form trading signals, which is a typical quantitative trading strategy. By identifying the trend and momentum of Volume and Price changes, it determines the main direction of the current market and forms trading signals. It can be widely used for financial instruments such as digital currencies, foreign exchange and stocks.
Strategy Principle
- Calculate ohlc4 moving average and combine with cci indicator to judge price level;
- Calculate obv indicator to measure capital flow;
- Calculate VCI index, which measures the distribution of capital flow through the variance of obv indicator;
- Calculate MCI index, which measures the distribution of prices through the variance of prices;
- Compare VCI and MCI indices to judge market sentiment;
- VCI > MCI, strong buying interest;
- VCI < MCI, strong selling interest;
- Form long and short signals based on the comparison of VCI and MCI;
Advantage Analysis
- The strategy takes into account multiple dimensions such as price, trading volume and capital flow to judge market sentiment, with relatively accurate signals;
- VCI and MCI are calculated by dynamic standard deviation, which can adapt to real-time market changes;
- The strategy parameters have been optimized through extensive backtesting and have strong stability;
Risk Analysis
- The calculation of price and trading volume indicators lags and cannot capture sudden events in advance;
- A single strategy cannot fully cover complex and volatile market conditions;
- It needs to be combined with other auxiliary indicators and cannot solely judge the market;
Optimization Directions
- Incorporate predictive models such as deep learning to improve signal judgment accuracy;
- Add risk control modules such as stop loss to enhance strategy stability;
- Try different parameter combinations to test applicability in specific markets;
Conclusion
This strategy forms trading signals by comparing dual CCI indices, taking into account factors such as price and trading volume to assess market sentiment. It is a typical and practical quantitative trading strategy. But it still needs to be used with other auxiliary tools to maximize the effectiveness of the strategy. It is worthwhile to further optimize and expand applicable scenarios while reducing risks.
Parameters
| Name | Default | What it controls |
|---|---|---|
| v_input_1 | false | Mode Discrepency |
| v_input_2 | 0.015 | Interval |
| v_input_3 | 20 | Standard (Average) Length |
| v_input_4 | 20 | Lookback length |
| v_input_5_ohlc4 | 0 | v_input_5: ohlc4 | high | low | open | hl2 | hlc3 | hlcc4 | close |
| v_input_6_close | 0 | srcP: close | high | low | open | hl2 | hlc3 | hlcc4 | ohlc4 |
| v_input_7 | 9 | From Month |
| v_input_8 | 13 | From Day |
| v_input_9 | 2018 | From Year |
| v_input_10 | true | To Month |
| v_input_11 | true | To Day |
| v_input_12 | 9999 | To Year |
| v_input_13 | false | Strategy Direction |
Source Pine Script
/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("MCI and VCI - Modified CCI Formulas")
test = cci(ohlc4, 13)
test1 = cci(ohlc4, 20)
obv(src) => cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
mDisc = input(0, title="Mode Discrepency")
mDiv = input(0.015, title="Interval")
mean(_src, _length)=>
_return = sum(_src, _length) / _length
median(_src, _length)=>
_return = _src
for _i = 0 to _length
_return := _return == 0 ? _src : (_return + _src[_i]) / 2
_return
len = input(20, title="Standard (Average) Length")
mmm = input(20, title="Lookback length")
srcV = obv(input(ohlc4))
srcP = input(close)
x = sma(srcV, len)
MDV2 = abs(stdev(median(x, len), mmm))
MDV3 = abs(stdev(mean(x, len), mmm))
AMDV = (MDV2+MDV3)/2
pt1v = (srcV-ema(srcV, len))/ AMDV
pt2v = 1/mDiv
VCI=pt1v*pt2v
y = ema(srcP, len)
MDP2 = abs(stdev(median(y, len), mmm))
MDP3 = abs(stdev(mean(y, len), mmm))
AMDA = (MDP2 + MDP3)/2
pt1p = 1/mDiv
pt2p = (srcP-ema(srcP, len))/ AMDA
MCI = pt1p * pt2p
plot(VCI, color=yellow, title="VCI", style="Histogram")
plot(MCI, color=white, title="MCI")
plot(500, style=line)
plot(0, style=line, linewidth=2)
plot(-500, style=line)
long = crossover(MCI, 0) and VCI > MCI[2]
short = crossunder(MCI, 0) and VCI < MCI[2]
//Time Control
//Set date and time
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 13, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
direction = input(0, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
if (long)
strategy.entry("Long", strategy.long, when=window(), limit=ohlc4, oca_name="BollingerBands", comment="BBandLE")
else
strategy.cancel(id="Long")
if (short)
strategy.entry("Short", strategy.short, when=window(), limit=ohlc4, oca_name="BollingerBands", comment="BBandSE")
else
strategy.cancel(id="Short")Published by ChaoZhang on the FMZ strategy square · last modified 2023-11-28. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.
Build this with AgenKit
A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Dual-CCI-Quantitative-Strategy.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- Get tests, backtest, risk controls and a paper-trading switch
Understand it first
Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.
Related specs
- Triple Moving Average Combined with MACD Quantitative StrategyPine Script · Machine learning · 1d
- Dynamic Price Swing Oscillator StrategyPine Script · Machine learning · 1m
- Bollinger Bands ATR Trailing Stop StrategyPine Script · Machine learning · 1m
- Multi factor Quantitative Trading StrategyPine Script · Machine learning · 1d
- Dual Moving Average Matching Strategy Based on Bollinger BandsPine Script · Machine learning · 1h
- EMA and RSI Quantitative Trading StrategyPine Script · Machine learning · 1h