Einzahlung CMF, EMA, SMA
Diese Strategie erzeugt Handelssignale basierend auf dem Chaikin Money Flow (CMF) -Indikator und den exponentiellen gleitenden Durchschnitten (EMA). Sie berechnet zuerst die CMF-Werte für einen bestimmten Zeitraum und verwendet dann zwei EMAs mit verschiedenen Perioden, um die CMF-Daten zu glätten. Ein Kaufsignal wird erzeugt, wenn die schnelle EMA über die langsame EMA überschreitet, während ein Verkaufssignal erzeugt wird, wenn die schnelle EMA unter die langsame EMA überschreitet. Die Strategie legt auch Stop-Loss- und Take-Profit-Bedingungen fest, um Risiken zu managen und Gewinne zu erzielen.
Diese Strategie nutzt den Chaikin-Geldflussindikator und die exponentiellen gleitenden Durchschnitte und kombiniert Preis- und Volumendaten mit einem primären Fokus auf die Trendverfolgung. Sie legt auch Stop-Loss- und Take-Profit-Bedingungen fest, um das Risiko zu managen. Die Vorteile der Strategie liegen in ihrer Fähigkeit, mehrere Faktoren umfassend zu berücksichtigen und Trends auf verschiedenen Zeitskalen zu erfassen. Allerdings gibt es noch Raum für Optimierungen bei Parameter-Einstellungen und Trenderkennung. In Zukunft können die Stabilität und Rentabilität der Strategie durch dynamische Parameteranpassung, Einbeziehung anderer Indikatoren, Optimierung von Stop-Loss und Take-Profit und Implementierung der Positionsgröße weiter verbessert werden.
/*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)