CASHISKING | CASHISKING
CMF, EMA, SMA
Chiến lược này tạo ra tín hiệu giao dịch dựa trên chỉ số dòng tiền của Chaikin (CMF) và chỉ số trung bình di chuyển của chỉ số (EMA). Đầu tiên, tính giá trị CMF trong chu kỳ được chỉ định, sau đó sử dụng hai chu kỳ EMA khác nhau để làm mịn dữ liệu CMF.
Chiến lược này sử dụng chỉ số dòng tiền và chỉ số trung bình di chuyển của Chaikin, kết hợp với dữ liệu giá cả và khối lượng giao dịch, theo dõi xu hướng là ý tưởng chính, đồng thời thiết lập các điều kiện dừng lỗ và dừng để kiểm soát rủi ro. Ưu điểm của chiến lược là có thể xem xét các yếu tố đa dạng và nắm bắt xu hướng theo các quy mô thời gian khác nhau, nhưng vẫn có không gian tối ưu hóa về thiết lập tham số và nhận dạng xu hướng.
/*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)