Tiền mặt CMF, EMA, SMA
Chiến lược này tạo ra các tín hiệu giao dịch dựa trên chỉ số dòng tiền Chaikin (CMF) và Trung bình Di chuyển Tăng (EMA). Nó đầu tiên tính toán các giá trị CMF cho một khoảng thời gian cụ thể, sau đó sử dụng hai EMA với các khoảng thời gian khác nhau để làm mịn dữ liệu CMF. Một tín hiệu mua được tạo ra khi EMA nhanh vượt qua EMA chậm, trong khi tín hiệu bán được tạo ra khi EMA nhanh vượt qua EMA chậm. Chiến lược cũng thiết lập các điều kiện dừng lỗ và lấy lợi nhuận để quản lý rủi ro và khóa lợi nhuận.
Chiến lược này sử dụng chỉ số dòng tiền Chaikin và Mức trung bình chuyển động nhân tố, kết hợp dữ liệu giá và khối lượng với trọng tâm chính là theo dõi xu hướng. Nó cũng thiết lập các điều kiện dừng lỗ và lấy lợi nhuận để quản lý rủi ro. Ưu điểm của chiến lược nằm trong khả năng xem xét toàn diện nhiều yếu tố và nắm bắt xu hướng trên các quy mô thời gian khác nhau. Tuy nhiên, vẫn còn chỗ cho tối ưu hóa trong cài đặt tham số và nhận dạng xu hướng. Trong tương lai, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện hơn nữa thông qua điều chỉnh tham số động, kết hợp các chỉ số khác, tối ưu hóa dừng lỗ và lấy lợi nhuận và thực hiện kích thước vị trí.
/*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)