리소스 로딩... 로딩...

CCI + MA 크로스오버 풀백 구매 전략

저자:차오장, 날짜: 2024-05-24 17:45:49
태그:CCIMA

img

전반적인 설명

CCI + MA 크로스오버 풀백 구매 전략은 재화 채널 지표 (CCI) 와 이중 이동 평균 크로스오버 신호를 결합한 양적 거래 전략이다. 이 전략은 가격이 빠른 이동 평균으로 되돌아 갈 때 구매하고 CCI는 상승 크로스오버 이후 과잉 판매 조건을 나타냅니다. 가격이 빠른 이동 평균으로 상승하고 CCI는 하락 크로스오버 이후 과잉 구매 조건을 나타냅니다. CCI와 이중 이동 평균 크로스오버 신호를 결합함으로써이 전략은 트렌딩 기회를 더 잘 포착 할 수 있으며 풀백 구매 및 릴리 판매를 통해 더 나은 진입 및 출구 지점을 달성하여 리스크 보상 비율을 향상시킵니다.

전략 논리

  1. CCI 지표는 사용자 정의 CCI 매개 변수 (원, 기간, 이동 평균 유형, 과잉 구매/ 과잉 판매 기준) 를 기반으로 계산됩니다.
  2. CCI 과잉 구매/ 과잉 판매 조건을 결정합니다. CCI가 과잉 구매 한계 이상일 때 배경 색을 빨간색으로 설정하고 과잉 판매 한계 이하일 경우 녹색으로 설정합니다.
  3. 사용자가 정의한 매개 변수 (원자, 기간, 이동 평균 유형) 를 기반으로 빠른 이동 평균과 느린 이동 평균을 계산합니다.
  4. 상승과 하락의 교차점을 식별합니다. 빠른 MA가 느린 MA를 넘을 때 상승 신호와 빠른 MA가 느린 MA를 넘을 때 하락 신호를 그래프화하십시오.
  5. 거래 결정:
    • 롱 엔트리: 빠른 MA가 느린 MA보다 높을 때, 이전 촛불이 빠른 MA보다 낮게 닫히고, 현재 촛불이 상승하고, CCI가 과잉 판매 한계 아래에있을 때, 긴 포지션을 오픈하기 위해 구매합니다.
    • 단기 엔트리: 빠른 MA가 느린 MA보다 낮을 때, 이전 촛불이 빠른 MA보다 높게 닫히고, 현재 촛불이 하향적이며, CCI가 과잉 매수 문턱보다 높을 때, 짧은 포지션을 개척하기 위해 판매합니다.

전략적 장점

  1. 트렌드 추적: 이중 이동 평균 크로스오버 신호는 트렌드 방향을 파악하고 시장 트렌드에 더 잘 맞추는 데 도움이됩니다.
  2. 반대 트렌드 진입: 트렌드 확인 후 구매하기 위해 가격 인하 또는 판매하기 위해 가격 상승을 기다리는 것은 더 나은 진입 가격으로 이어질 수 있으며 리스크 보상 비율을 향상시킬 수 있습니다.
  3. 잘못된 신호를 줄이는 것: CCI와 이동 평균 크로스오버 신호를 결합하면 단일 지표로 생성되는 잘못된 신호를 효과적으로 줄일 수 있습니다.
  4. 유연한 매개 변수: 사용자는 전략 성과를 최적화하기 위해 CCI와 이동 평균 매개 변수를 자신의 선호도에 따라 유연하게 설정할 수 있습니다.

전략 위험

  1. 불안정한 시장 위험: 불안정한 시장에서 빈번한 상승과 하락 교차가 더 많은 손실 거래를 초래할 수 있습니다.
  2. 매개 변수 위험: 부적절한 매개 변수 설정으로 인해 전략 성능이 저하 될 수 있습니다. 다른 시장 조건에 최적의 매개 변수 조합을 철저하게 테스트하고 분석해야합니다.
  3. 트렌드 리스크: 시장 트렌드가 역전되면 전략은 출시를 지연시키고 더 큰 마감에 시달릴 수 있습니다.

전략 최적화 방향

  1. 현재 트렌드 강도와 변동성에 따라 각 거래의 포지션 크기를 동적으로 조정하여 더 나은 리스크 통제를 위해 포지션 크기를 도입하십시오.
  2. 입력 신호의 신뢰성을 높이기 위해 볼륨 표시기 또는 다른 보조 확인 표시기를 통합하여 입력 조건을 최적화합니다.
  3. 트레이일링 스톱 또는 시간 스톱을 설정하여 출구 조건을 최적화하여 거래당 최대 손실을 줄이십시오.
  4. 전략의 적응성과 견고성을 높이기 위해 각기 다른 시장과 도구에 대한 매개 변수 최적화를 개별적으로 수행합니다.

요약

CCI + MA 크로스오버 풀백 구매 전략은 트렌드 추후와 역트렌드 진입의 장점을 결합한 양적 거래 전략이다. 이중 이동 평균으로 트렌드 방향을 파악하고 CCI 지표로 과잉 구매/ 과잉 판매 구역을 식별하여 더 나은 진입 가격을 달성하기 위해 가격 인하 및 집회를 기다리는 동안 전략은 수익성과 위험과 보상 비율을 어느 정도 향상시킬 수 있습니다. 그러나 전략은 매개 변수 최적화, 불안정한 시장 및 갑작스러운 트렌드 변화와 같은 위험도 직면합니다. 전략의 견고성과 수익성을 향상시키기 위해 추가 최적화 및 개선이 필요합니다. 전략의 논리는 명확하며 전체 코드 구조가 완전하며 실시간 거래에 적합합니다.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradedots

//@version=5
strategy("CCI + MA Crossover Pullback Buy Strategy [TradeDots]", overlay=true)


ma(source, length, type) =>
  type == "SMA" ? ta.sma(source[1], length) :
  type == "EMA" ? ta.ema(source[1], length) :
  type == "SMMA (RMA)" ? ta.rma(source[1], length) :
  type == "WMA" ? ta.wma(source[1], length) :
  type == "VWMA" ? ta.vwma(source[1], length) :
  na

//CCI settings
cci_coloring  = input.bool(true, "CCI Background Color", group = "Commodity channel index")
cci_length    = input.int(20,"CCI Length", group = "Commodity channel index")
cci_ma_type   = input.string("EMA","CCI MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "Commodity channel index")
cci_soruce    = input(hlc3, "CCI Source", group = "Commodity channel index")
cci_threshold = input.int(100, "CCI Threshold", group = "Commodity channel index")
cci_ma = ma(cci_soruce, cci_length, cci_ma_type)
cci = (cci_soruce - cci_ma) / (0.015 * ta.dev(cci_soruce, cci_length))

bgcolor(cci > cci_threshold and cci_coloring ? color.new(#f9396a, 80) : cci < -cci_threshold and cci_coloring? color.new(#9cff87, 80) : na, title = "CCI Overbought / Oversold")

//ma crossover settings
input_crossover_labels = input.bool(true, "Show Crossover Labels", group="Moving average")

fastma_type   = input.string("EMA","", inline="fastma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
fastma_source = input(close, "", inline="fastma", group="Moving average")
fastma_length = input.int(10, "", inline="fastma", minval=1,group="Moving average")
fastma_color  = input(#e2fdff, "", inline="fastma",group="Moving average")
fastma = ma(fastma_source, fastma_length, fastma_type)
fastmaPlot = plot(fastma, color = #b7e4c7, linewidth = 2, title = "Fast MA")

slowma_type   = input.string("EMA","", inline="slowma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
slowma_source = input(close, "", inline="slowma", group="Moving average")
slowma_length = input.int(30, "", inline="slowma", minval=1,group="Moving average")
slowma_color  = input(#e2fdff, "", inline="slowma",group="Moving average")
slowma = ma(slowma_source, slowma_length, slowma_type)
slowmaPlot = plot(slowma, color = #2d6a4f, linewidth = 2, title = "Slow MA")

bullish_crossover = ta.crossover(fastma, slowma)
bearish_crossover = ta.crossunder(fastma, slowma)

// // strategy
// if bullish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#9cff87, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index,low, "Bullish Crossover", style = label.style_label_up, color = #9cff87)

// else if bearish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#f9396a, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index, high, "Bearish Crossover", style = label.style_label_down, color = #f9396a, textcolor = color.white)

if fastma > slowma and close[1] < fastma and close > open and cci < -cci_threshold
    strategy.entry("Long", strategy.long)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) < 0
    //     label.new(bar_index,low, "🟢 Long", style = label.style_label_up, color = #9cff87)

if fastma < slowma and close[1] > fastma and close < open and cci > cci_threshold
    strategy.entry("Short", strategy.short)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) > 0
    //     label.new(bar_index, high, "🔴 Short", style = label.style_label_down, color = #f9396a, textcolor = color.white)

관련

더 많은