Chiến lược này kết hợp chỉ số CCI, chỉ số RSI và hai đường trung bình động thành một hệ thống giao dịch hợp chất. Nó có thể nắm bắt các xu hướng thông thường trong khi sử dụng các đường chéo RSI để thêm xác nhận cho các mục để lọc một số tiếng ồn.
Hệ thống sử dụng hai đường chéo trung bình động để hỗ trợ xác định hướng xu hướng. Khi đường chéo trung bình động nhanh vượt qua đường chéo trung bình động chậm, đó là tín hiệu mua, và ngược lại đối với tín hiệu bán.
Sau khi xác định xu hướng tăng hoặc giảm, hệ thống sau đó sử dụng sự chéo chéo của hai chỉ số RSI với chiều dài tham số khác nhau như xác minh nhập cảnh. Ví dụ, trong thị trường tăng, nếu chỉ số RSI ngắn hạn vượt qua chỉ số RSI dài hạn, đó là tín hiệu mua cuối cùng. Thiết kế này chủ yếu lọc ra tiếng ồn để tránh các giao dịch sai do các điều chỉnh ngắn hạn trong xu hướng.
Chiến lược này chỉ mở các vị trí trong phiên giao dịch được chỉ định, tích cực đóng tất cả các vị trí 15 phút trước khi đóng để tránh rủi ro qua đêm.
Chiến lược này xem xét toàn diện việc xác định xu hướng và xác nhận chéo chỉ số để đảm bảo tính hợp lệ của tín hiệu trong khi kiểm soát rủi ro. Thông qua tối ưu hóa tham số và điều chỉnh logic, chiến lược có tiềm năng mở rộng cơ hội lợi nhuận và giảm cơ hội bỏ lỡ. Đây là một khái niệm giao dịch rất hứa hẹn.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © rwestbrookjr //@version=5 strategy("EMA with RSI Cross Strategy", overlay=true) //EMA fastLen = input(title='Fast EMA Length', defval=9) slowLen = input(title='Slow EMA Length', defval=20) fastEMA = ta.ema(close, fastLen) slowEMA = ta.ema(close, slowLen) fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line) sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line) fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud') // Bull and Bear Alerts //Bull = ta.crossover(fastEMA, slowEMA) Bull = fastEMA > slowEMA //Bear = ta.crossunder(fastEMA, slowEMA) Bear = fastEMA < slowEMA //RSIs rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings") rsiSource1Input = input.source(close, "Source", group="RSI Settings") rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings") rsiSource2Input = input.source(close, "Source", group="RSI Settings") up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input) down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input) rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1)) up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input) down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input) rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2)) //CCI cciLength = input.int(20, minval=1) src = input(hlc3, title="Source") ma = ta.sma(src, cciLength) cci = (src - ma) / (0.015 * ta.dev(src, cciLength)) //Trail Stop Setup trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5) longStop = 0.0, shortStop = 0.0 longStop := if Bull stopValue = close - trstp math.max(stopValue, longStop[1]) else 0.0 shortStop := if Bear stopValue = close + trstp math.min(stopValue, shortStop[1]) else 999999 //Session Setup open_session=input(defval="0930-1545") session = time("1", open_session) validSession=(na(session) ? 0 : 1) //Trade Signals longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession if (longCondition) strategy.entry("Long", strategy.long, 1) //longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75 longExit = close < longStop or not validSession if (longExit) strategy.close("Long") shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession if (shortCondition) strategy.entry("Short", strategy.short, 1) //shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75 shortExit = close > shortStop or not validSession if (shortExit) strategy.close("Short")