현금화 CMF, EMA, SMA
이 전략은 Chaikin Money Flow (CMF) 지표와 기하급수적인 이동 평균 (EMA) 을 기반으로 거래 신호를 생성합니다. 먼저 특정 기간에 대한 CMF 값을 계산하고, 다음에는 CMF 데이터를 매끄럽게하기 위해 다른 기간을 가진 두 개의 EMA를 사용합니다. 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성되며 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다. 전략은 또한 위험을 관리하고 이익을 잠금하기 위해 스톱 로스 및 영업 조건을 설정합니다.
이 전략은 차킨 금전 흐름 지표와 기하급수적 이동 평균을 활용하여, 트렌드 추적에 중점을 둔 가격 및 볼륨 데이터를 결합합니다. 또한 위험을 관리하기 위해 스톱 로스 및 영리 조건을 설정합니다. 전략의 장점은 여러 요인을 포괄적으로 고려하고 다른 시간 스케일에서 트렌드를 포착하는 능력에 있습니다. 그러나 매개 변수 설정 및 트렌드 인식에서 최적화 할 여지가 있습니다. 미래에, 전략의 안정성과 수익성은 동적 매개 변수 조정, 다른 지표의 통합, 스톱 로스 및 영리 최적화 및 위치 사이징 구현을 통해 더욱 향상 될 수 있습니다.
/*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)