Chiến lược này dựa trên chỉ số AlphaTrend, kết hợp các lợi thế của các chỉ số RSI và MFI và có thể đạt được kết quả tốt trong cả thị trường xu hướng tăng và giảm.
Chiến lược dựa chủ yếu trên đường cong AlphaTrend để xác định hướng xu hướng giá. Nó tính đến ATR, RSI / MFI và có thể theo dõi xu hướng hiệu quả. Khi giá xâm nhập đường cong, nó báo hiệu một sự thay đổi trong xu hướng và tạo thành điểm nhập cảnh.
Tóm lại, chiến lược này hoạt động cho cả thị trường tăng và giảm, lọc tiếng ồn thị trường hiệu quả, xác định xu hướng chính xác và là một chiến lược theo xu hướng hiệu quả.
Để giải quyết rủi ro, dừng lỗ có thể kiểm soát lỗ giao dịch duy nhất; kết hợp với các chỉ số khác để tránh tín hiệu sai; điều chỉnh các tham số dựa trên các thị trường khác nhau.
Tối ưu hóa hơn nữa có thể được thực hiện bằng cách thử nghiệm trên các thị trường và tham số khác nhau để chiến lược có thể thích nghi với nhiều điều kiện thị trường hơn.
Nhìn chung, chiến lược AlphaTrend này là một hệ thống theo dõi xu hướng đơn giản và hiệu quả. Nó kết hợp cả thông tin giá và khối lượng để thích nghi với thị trường tăng và giảm. Cơ chế đột phá cung cấp các tín hiệu nhập cảnh rõ ràng. Với kiểm soát rủi ro thích hợp, nó có thể đạt được kết quả tốt. Kiểm tra và nâng cao hơn nữa có thể giúp ổn định lợi nhuận của nó trong nhiều điều kiện thị trường hơn.
/*backtest start: 2023-09-20 00:00:00 end: 2023-09-26 00:00:00 period: 30m 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/ // author © KivancOzbilgic // developer © KivancOzbilgic // pv additions, simplification and strategy conversion @ treigen //@version=5 strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000) coeff = input.float(1.5, 'Multiplier', step=0.1) AP = input(15, 'Common Period') ATR = ta.sma(ta.tr, AP) novolumedata = input(title='Change calculation (no volume data)?', defval=false) i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting') i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting') timeCond = true pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings') pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings') pv_acc = input.string("", title="Account", group='PV Settings') pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings') pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings') pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings') upT = low - ATR * coeff downT = high + ATR * coeff AlphaTrend = 0.0 AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3) k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3) buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2]) sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2]) var exsym = "" if barstate.isfirst exsym := pv_ex == "" ? "" : "ex=" + pv_ex + "," exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + "," if barstate.isconfirmed and timeCond if strategy.position_size <= 0 and buySignalk strategy.entry("Buy", strategy.long) alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close) if strategy.position_size >= 0 and sellSignalk strategy.entry("Sell", strategy.short) alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close) // Only used for testing/debugging alert messages if pv_alert_test alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar) alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)