이 전략의 핵심 아이디어는 CCI 지표를 사용하여 시장 트렌드 방향을 결정하고 EMA 지표를 사용하여 CCI를 부드럽게하여 거래 후 트렌드를 구현하는 것입니다. CCI가 구매 지점을 넘을 때 길고 CCI가 판매 지점을 넘을 때 시장을 따라가기 위해 짧습니다.
CCI 지표를 계산합니다. CCI 지표는 현재 주식 가격이 20일 이동 평균에서 벗어나는 정도에 따라 과잉 구매되거나 과잉 판매되는지 판단합니다. 공식은: (표범 가격 - 20D SMA) / (0.015 * 20D TP 표준 오차).
CCI 지표를 EMA로 매끄럽게 하여 CCI-EMA 곡선을 얻으며 CCI의 변동을 줄이고 신호를 더 명확하게 합니다.
CCI를 위한 구매 및 판매 포인트를 설정합니다. CCI-EMA가 구매 포인트 이상으로 넘어가면 장거리, CCI-EMA가 판매 포인트 아래로 넘어가면 단거리입니다.
CCI-EMA가 다시 구매 또는 판매 지점에 닿을 때까지 포지션을 유지하여 포지션을 닫습니다.
CCI를 사용하여 시장 동향 방향을 결정하고 EMA를 사용하여 잘못된 신호를 필터링하면 시장 동향을 효과적으로 따라갈 수 있습니다.
CCI는 가격 변동에 민감하며 트렌드 반전을 빠르게 파악할 수 있다. EMA는 잘못된 신호를 줄인다. 함께 사용하면 트렌드의 시작에서 기회를 잡을 수 있다.
트렌드를 따르는 전략은 거래를 최소화하고 거래 비용과 미끄러짐을 줄입니다.
백테스트 결과는 괜찮고, 전략에 실질적인 타당성을 부여합니다.
CCI는 곡선에 지나치게 민감할 수 있고 EMA는 모든 잘못된 신호를 완전히 필터할 수 없으며 일부 잘못된 신호가 남아 있습니다.
순수한 트렌드 추종 전략은 트렌드가 통합되거나 역전될 때 손실을 입을 수 있습니다. 트렌드 판단 지표가 사용되어야합니다.
기계적 거래 시스템은 시장에 기반한 매개 변수를 유연하게 조정할 수 없습니다. 과도한 최적화는 위험이 있습니다.
제한된 백테스트 데이터는 실시간 성능을 완전히 반영할 수 없습니다. 매개 변수는 신중하게 조정하고 정지치는 엄격하게 관리해야합니다.
CCI 매개 변수를 최적화하여 다른 길이 기간을 테스트합니다.
최적의 EMA 기간을 찾기 위해 EMA 매개 변수를 최적화합니다.
최적의 매개 변수를 찾기 위해 다른 구매/판매 포인트 조합을 테스트합니다.
트렌드 반전을 결정하고 스톱 손실을 설정하기 위해 다른 지표를 포함합니다.
다양한 제품에 최적의 매개 변수를 찾기 위해 자동 매개 변수 최적화를 추가합니다.
전체적으로 이것은 거래 전략을 따르는 비교적 간단한 트렌드입니다. 트렌드 방향을 결정하기 위해 CCI를 사용하고 가격 변화에 민감하며, 신호를 생성하기 위해 EMA 필터링과 결합합니다. 이 전략은 몇 가지 장점이 있지만 주목해야 할 위험도 있습니다. 매개 변수 최적화 및 다른 지표를 사용하여 안정성과 라이브 성능을 더욱 향상시킬 수 있습니다. 전반적으로 양 거래에 대한 간단하고 신뢰할 수있는 트렌드 다음 템플릿을 제공합니다.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("CCI with EMA Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.07) length = input(20, minval=1) src = input(close, title="Source") cciSellPoint = input(0, title = 'CCI Sell Point', type = input.integer) cciBuyPoint = input(0, title = 'CCI Buy Buy Point', type = input.integer) lengthcci = input(12,"length cci ema", minval=1) ma = sma(src, length) cci = (src - ma) / (0.015 * dev(src, length)) cciema=ema(cci,lengthcci) plot(cci, "CCI", color=#996A15) plot(cciSellPoint, title = 'CCI Sell Point', color = color.red, linewidth = 1, style = plot.style_cross, transp = 35) plot(cciBuyPoint, title = 'CCI Buy Point', color = color.green, linewidth = 1, style = plot.style_cross, transp = 35) plot(cciema, title = 'CCI EMA', color = color.green, linewidth = 1, transp = 35) band1 = hline(100, "Upper Band", color=#C0C0C0, linestyle=hline.style_dashed) band0 = hline(-100, "Lower Band", color=#C0C0C0, linestyle=hline.style_dashed) fill(band1, band0, color=#9C6E1B, title="Background") startLongTrade= cciema >cciBuyPoint startShortTrade= cciema <cciSellPoint //exitLong = cciema <cciSellPoint //exitShort = cciema >cciBuyPoint strategy.entry("long",strategy.long, when = startLongTrade ) //strategy.close( "long", when=exitLong) strategy.entry("short",strategy.short,when=startShortTrade ) //strategy.close("short", when=exitShort)