듀얼 CCI 양적 전략


생성 날짜: 2023-11-28 15:47:04 마지막으로 수정됨: 2023-11-28 15:47:04
복사: 1 클릭수: 710
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

듀얼 CCI 양적 전략

개요

이 전략은 고전 기술 지표 CCI와 자체 개발 된 VCI, MCI 이중 지수를 결합하여 거래 신호를 형성하며, 전형적인 양적 거래 전략의 일종이다. 그것은 볼륨과 가격의 변화 경향을 식별하여, 현재 시장의 주요 거래 방향과 강도를 판단하여 거래 신호를 형성한다. 디지털 통화, 외환 및 주식과 같은 금융 도구에 널리 적용 할 수 있다.

전략 원칙

  1. OHLC4 평균선을 계산하고 CICI와 결합하여 가격을 판단합니다.
  2. 자금의 흐름을 측정하는 obv 지수를 계산합니다.
  3. VCI 지수를 계산합니다. 즉, obv 지표의 차등을 통해 재화 흐름 분포를 측정합니다.
  4. MCI 지수를 계산합니다. 즉, 가격의 차이를 통해 가격 분포를 측정합니다.
  5. VCI와 MCI 지수를 비교하여 시장의 거래 상황을 판단합니다.
  • VCI > MCI, 구매자 의지가 강합니다.
  • VCI < MCI, 판매자의 의지력;
  1. VCI와 MCI의 비교에 따라 형성된 다중 코카이 신호;

우위 분석

  1. 이 전략은 가격, 거래량, 그리고 여러 차원의 자본 흐름을 종합적으로 고려하여 시장의 거래 상황을 판단하고, 신호를 더 정확하게 나타냅니다.
  2. VCI와 MCI는 동적 표준 격차 계산을 통해 시장의 실시간 변화에 적응할 수 있습니다.
  3. 전략의 매개 변수는 많은 재검토를 거쳐 최적화되어 있으며, 강한 안정성을 가지고 있다.

위험 분석

  1. 가격과 거래량 지표의 계산이 늦어지면서, 예상치 못한 사태를 미리 파악할 수 없습니다.
  2. 한 가지 전략으로는 복잡하고 변동하는 시장 상황을 완전히 포괄할 수 없습니다.
  3. 다른 보조 지표와 함께 사용해야 하며, 시장은 개별적으로 판단할 수 없습니다.

최적화 방향

  1. 심도학과 같은 예측 모델과 결합하여 신호 판단의 정확도를 높여줍니다.
  2. 위험 제어 모듈을 추가하여 전략의 안정성을 높여줍니다.
  3. 특정 시장에서의 적용성을 테스트하기 위해 다양한 요소 조합을 시도할 수 있습니다.

요약하다

이 전략은 두 개의 CICI 지수를 비교하여 거래 신호를 형성하고, 가격과 거래량과 같은 여러 요소를 고려하여 시장의 매매력을 평가하는 전형적이고 실용적인 양적 거래 전략입니다. 그러나 여전히 다른 보조 도구와 함께 사용해야 전략의 최대 효과를 발휘 할 수 있습니다. 적용 시나리오를 개선하고 위험을 줄이는 데 더 많은 최적화가 필요합니다.

전략 소스 코드
/*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")