КАШИШКИНГ CMF, EMA, SMA
Эта стратегия генерирует торговые сигналы, основанные на индикаторе денежного потока (CMF) и экспоненциальных скользящих средних (EMA). Сначала она рассчитывает значения CMF за определенный период, а затем использует две EMA с разными периодами для сглаживания данных CMF. Сигнал покупки генерируется, когда быстрая 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)