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

이 전략은 Chaikin 화폐 흐름 (CMF) 에 기반한 거래 신호를 생성합니다.

저자:차오장, 날짜: 2024-06-07 17:05:04
태그:

현금화 CMF, EMA, SMA

전반적인 설명

이 전략은 Chaikin Money Flow (CMF) 지표와 기하급수적인 이동 평균 (EMA) 을 기반으로 거래 신호를 생성합니다. 먼저 특정 기간에 대한 CMF 값을 계산하고, 다음에는 CMF 데이터를 매끄럽게하기 위해 다른 기간을 가진 두 개의 EMA를 사용합니다. 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성되며 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다. 전략은 또한 위험을 관리하고 이익을 잠금하기 위해 스톱 로스 및 영업 조건을 설정합니다.

전략 원칙

  1. 특정 기간에 대한 Chaikin 돈 흐름 (CMF) 값을 계산합니다. CMF는 시장으로 들어가는 돈 흐름의 강도를 측정하기 위해 가격 및 부피 데이터를 모두 포함합니다.
  2. CMF 데이터를 매끄럽게 하기 위해 서로 다른 기간을 가진 두 개의 기하급수적 이동 평균 (EMA) 을 적용합니다. 빠른 EMA는 단기 트렌드를 포착하고 느린 EMA는 장기 트렌드를 식별합니다.
  3. 빠른 EMA가 느린 EMA를 넘을 때 구매 신호를 생성하고 빠른 EMA가 느린 EMA를 넘을 때 판매 신호를 생성합니다.
  4. 거래 신호가 생성된 후, 전략은 잘못된 신호를 피하기 위해 두 개의 촛불에서 확인을 기다립니다.
  5. 스톱 로스 및 트레이프 조건 설정. 스톱 로스 가격은 엔트리 가격의 특정 비율이고, 트레이프 로스 가격은 엔트리 가격의 특정 비율입니다.

이점 분석

  1. 가격과 부피 데이터를 결합합니다. CMF 지표는 가격과 부피 데이터를 모두 포괄적으로 고려하여 시장 금전 흐름을 보다 신뢰할 수 있는 반영을 제공하고 더 정확한 거래 신호를 생성합니다.
  2. 트렌드 추적: 다른 기간의 EMA를 활용함으로써 전략은 다양한 시장 환경에 적응하여 단기 및 장기적인 트렌드를 모두 파악 할 수 있습니다.
  3. 신호 확인: 거래 신호가 생성 된 후 전략은 두 개의 촛불에서 확인을 기다리고 있으며, 일부 잘못된 신호를 효과적으로 필터링하여 거래의 성공률을 향상시킵니다.
  4. 리스크 관리: 전략은 스톱 로스 및 영업 조건이 포함되어 있으며, 이는 개별 거래의 위험을 효과적으로 제어하면서 얻은 이익을 확보합니다.

위험 분석

  1. 매개 변수 최적화: 전략의 성능은 CMF 및 EMA 기간의 선택에 달려 있습니다. 다른 시장 환경은 다른 매개 변수 설정을 요구할 수 있으며 주기적인 매개 변수 최적화가 필요합니다.
  2. 트렌드 인식: 불안한 시장이나 트렌드 전환 시점에서는 전략이 더 많은 잘못된 신호를 생성하여 빈번한 거래와 자본 손실로 이어질 수 있습니다.
  3. 슬리퍼 및 거래 비용: 빈번한 거래는 슬리퍼 및 거래 비용을 증가시켜 전략의 전반적인 수익성에 영향을 줄 수 있습니다.

최적화 방향

  1. 동적 매개 변수 조정: 다른 시장 상태에 적응하기 위해 시장 조건의 변화에 따라 CMF 및 EMA 기간 매개 변수를 동적으로 조정합니다.
  2. 다른 지표를 포함: 트렌드 인식의 정확성과 신호의 신뢰성을 향상시키기 위해 상대적 강도 지표 (RSI) 및 평균 진정한 범위 (ATR) 와 같은 다른 기술적 지표를 결합하십시오.
  3. 스톱 로스 및 트레이프 수익을 최적화: 시장 변동성과 위험 선호도에 따라 스톱 로스 및 트레이프 수익 비율을 동적으로 조정하여 위험을 더 잘 관리하고 수익을 고정합니다.
  4. 포지션 크기를 구현: 시장 트렌드와 신호 강도에 따라 포지션 크기를 동적으로 조정합니다. 트렌드가 명확할 때 포지션 크기를 증가시키고 불확실한 기간 동안 포지션 크기를 줄입니다.

요약

이 전략은 차킨 금전 흐름 지표와 기하급수적 이동 평균을 활용하여, 트렌드 추적에 중점을 둔 가격 및 볼륨 데이터를 결합합니다. 또한 위험을 관리하기 위해 스톱 로스 및 영리 조건을 설정합니다. 전략의 장점은 여러 요인을 포괄적으로 고려하고 다른 시간 스케일에서 트렌드를 포착하는 능력에 있습니다. 그러나 매개 변수 설정 및 트렌드 인식에서 최적화 할 여지가 있습니다. 미래에, 전략의 안정성과 수익성은 동적 매개 변수 조정, 다른 지표의 통합, 스톱 로스 및 영리 최적화 및 위치 사이징 구현을 통해 더욱 향상 될 수 있습니다.


/*backtest
start: 2023-06-01 00:00:00
end: 2024-06-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("CASHISKING", overlay=false)

// Kullanıcı girişleri ile parametreler
cmfPeriod = input.int(200, "CMF Periyodu", minval=1)
emaFastPeriod = input.int(80, "Hızlı EMA Periyodu", minval=1)
emaSlowPeriod = input.int(160, "Yavaş EMA Periyodu", minval=1)
stopLossPercent = input.float(3, "Stop Loss Yüzdesi", minval=0.1) / 100
stopGainPercent = input.float(5, "Stop Gain Yüzdesi", minval=0.1) / 100

// CMF hesaplama fonksiyonu
cmfFunc(close, high, low, volume, length) =>
    clv = ((close - low) - (high - close)) / (high - low)
    valid = not na(clv) and not na(volume) and (high != low)
    clv_volume = valid ? clv * volume : na
    sum_clv_volume = ta.sma(clv_volume, length)
    sum_volume = ta.sma(volume, length)
    cmf = sum_volume != 0 ? sum_clv_volume / sum_volume : na
    cmf

// CMF değerlerini hesaplama
cmf = cmfFunc(close, high, low, volume, cmfPeriod)

// EMA hesaplamaları
emaFast = ta.ema(cmf, emaFastPeriod)
emaSlow = ta.ema(cmf, emaSlowPeriod)

// Göstergeleri çiz
plot(emaFast, color=color.blue, title="EMA 23")
plot(emaSlow, color=color.orange, title="EMA 50")

// Alım ve Satım Sinyalleri
crossOverHappened = ta.crossover(emaFast, emaSlow)
crossUnderHappened = ta.crossunder(emaFast, emaSlow)

// Kesişme sonrası bekleme sayacı
var int crossOverCount = na
var int crossUnderCount = na

if (crossOverHappened)
    crossOverCount := 0

if (crossUnderHappened)
    crossUnderCount := 0

if (not na(crossOverCount))
    crossOverCount += 1

if (not na(crossUnderCount))
    crossUnderCount += 1

// Alım ve Satım işlemleri
if (crossOverCount == 2)
    strategy.entry("Buy", strategy.long)
    crossOverCount := na  // Sayaç sıfırlanır

if (crossUnderCount == 2)
    strategy.entry("Sell", strategy.short)
    crossUnderCount := na  // Sayaç sıfırlanır

// Stop Loss ve Stop Gain hesaplama
longStopPrice = strategy.position_avg_price * (1 - stopLossPercent)
shortStopPrice = strategy.position_avg_price * (1 + stopLossPercent)
longTakeProfitPrice = strategy.position_avg_price * (1 + stopGainPercent)
shortTakeProfitPrice = strategy.position_avg_price * (1 - stopGainPercent)

// Stop Loss ve Stop Gain'i uygula
if (strategy.position_size > 0 and strategy.position_avg_price > 0)
    strategy.exit("Stop", "Buy", stop=longStopPrice, limit=longTakeProfitPrice)
else if (strategy.position_size < 0 and strategy.position_avg_price > 0)
    strategy.exit("Stop", "Sell", stop=shortStopPrice, limit=shortTakeProfitPrice)


더 많은