이중적 CCI 양적 전략

저자:차오장, 날짜: 2023-11-28 15:47:04
태그:

img

전반적인 설명

이 전략은 클래식 기술 지표 CCI와 자체 개발 된 VCI 및 MCI 이중 지표를 결합하여 전형적인 양적 거래 전략인 거래 신호를 형성합니다. 볼륨 및 가격 변화의 추세와 동력을 식별함으로써 현재 시장의 주요 방향을 결정하고 거래 신호를 형성합니다. 디지털 통화, 외환 및 주식과 같은 금융 도구에 널리 사용될 수 있습니다.

전략 원칙

  1. ohlc4 이동 평균을 계산하고 cci 지표와 결합하여 가격 수준을 판단합니다.
  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. 특정 시장에서 적용 가능성을 테스트하기 위해 다른 매개 변수 조합을 시도합니다.

결론

이 전략은 시장 정서를 평가하기 위해 가격과 거래량과 같은 요소를 고려하여 이중 CCI 지수를 비교하여 거래 신호를 형성합니다. 이것은 전형적이고 실용적인 양적 거래 전략입니다. 그러나 여전히 전략의 효과를 극대화하기 위해 다른 보조 도구와 함께 사용해야합니다. 위험을 줄이는 동시에 적용 가능한 시나리오를 더 이상 최적화하고 확장하는 것이 가치가 있습니다.


/*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")

더 많은