
Strategi ini membentuk isyarat perdagangan dengan menggabungkan petunjuk teknikal klasik CCI dan VCI, MCI ganda yang dibangunkan sendiri untuk membentuk isyarat perdagangan. Strategi ini merupakan strategi perdagangan kuantitatif yang tipikal. Ia membentuk isyarat perdagangan dengan mengenal pasti trend perubahan dalam Volume dan Harga, menilai arah dan kekuatan perdagangan utama semasa. Ia boleh digunakan secara meluas untuk instrumen kewangan seperti mata wang digital, forex dan saham.
Strategi ini membentuk isyarat dagangan melalui perbandingan indeks dua-cci, mempertimbangkan pelbagai faktor seperti harga dan jumlah perdagangan, untuk menilai kekuatan jual beli pasaran, merupakan strategi perdagangan kuantitatif yang tipikal dan praktikal. Tetapi masih perlu digunakan bersama dengan alat bantu lain untuk mencapai keberkesanan maksimum strategi.
/*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")