Đây là một chiến lược dài chỉ xác định tín hiệu nhập cảnh khi giá phá vỡ dưới dải dưới của kênh ATR, và lấy lợi nhuận khi giá đạt đến dải giữa (EMA) hoặc dải trên của kênh ATR. Nó cũng sử dụng ATR để tính mức dừng lỗ. Chiến lược này phù hợp cho các giao dịch ngắn hạn nhanh chóng.
Khi giá phá vỡ dưới dải ATR thấp hơn, nó báo hiệu một sự sụt giảm bất thường. Chiến lược sẽ đi dài vào lần mở nến tiếp theo. Stop loss được thiết lập ở giá nhập trừ ATR stop loss nhân ATR. Lợi nhuận được lấy ở dải giữa (EMA) hoặc dải ATR trên. Nếu thanh hiện tại đóng thấp hơn mức thấp của thanh trước, sau đó sử dụng thanh trước thấp như lợi nhuận.
Cụ thể, logic chính bao gồm:
Những lợi thế của chiến lược này:
Có một số rủi ro:
Những rủi ro này có thể được giảm bằng cách điều chỉnh thời gian ATR, nhân dừng lỗ v.v. Chọn các nhà môi giới có phí giao dịch thấp cũng rất quan trọng.
Chiến lược có thể được cải thiện bằng cách:
Tóm lại, đây là một chiến lược đảo ngược trung bình đơn giản và thực tế dựa trên kênh ATR. Nó có các quy tắc nhập khẩu rõ ràng, dừng lỗ nghiêm ngặt và lợi nhuận hợp lý. Ngoài ra còn có chỗ cho điều chỉnh tham số. Nếu các nhà giao dịch có thể chọn đúng biểu tượng và kiểm soát rủi ro với dừng lỗ, chiến lược này có thể đạt được kết quả tốt.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h 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/ // © Bcullen175 //@version=5 strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5) SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended") src = input(close, title="Source") period = input.int(10, "ATR & MA PERIOD") plot(open+ta.atr(period)) plot(open-ta.atr(period)) plot((ta.ema(src, period)), title = "Mean", color=color.white) i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Check filter(s) f_dateFilter = true atr = ta.atr(period) // Check buy/sell conditions var float buyPrice = 0 buyCondition = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter sellCondition = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period)) stopDistance = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na stopPrice = strategy.position_size > 0 ? (buyPrice - SLx*atr): na stopCondition = strategy.position_size > 0 and low < stopPrice // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)