Chiến lược giai đoạn chéo AlphaTrend

Tác giả:ChaoZhang, Ngày: 2023-09-28 11:05:27
Tags:

Tổng quan

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 logic

  1. Tính toán chỉ số ATR để đo biến động thị trường
  2. Sử dụng RSI để xác định hướng thị trường nếu không có dữ liệu khối lượng; sử dụng MFI nếu có dữ liệu khối lượng
  3. Tính toán dải trên và dưới dựa trên ATR và hướng thị trường
  4. Tính toán đường cong AlphaTrend, kết hợp các dải trên và dưới năng động
  5. Tạo tín hiệu mua và bán khi giá vượt trên hoặc dưới đường cong AlphaTrend

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.

Ưu điểm

  1. AlphaTrend kết hợp các điểm mạnh của RSI và MFI, thích nghi với cả thị trường tăng và giảm
  2. Phạm vi trên và dưới năng động tự động điều chỉnh dựa trên biến động thị trường
  3. Bao gồm cả thông tin giá và khối lượng, tránh tín hiệu sai
  4. Cách tiếp cận đột phá xác định rõ hướng xu hướng
  5. Đơn giản và dễ hiểu logic

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ả.

Rủi ro

  1. AlphaTrend đường cong có thể có sự phá vỡ sai, đòi hỏi xác nhận từ các chỉ số khác
  2. Nhiều tín hiệu sai có thể xảy ra trong quá trình củng cố thị trường
  3. Kết quả không hiệu quả do điều chỉnh tham số kém
  4. Stop loss có thể được thực hiện trong thời gian tăng cao, gây ra tổn thất lớn

Để 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.

Cơ hội gia tăng

  1. Kiểm tra các kết hợp tham số khác nhau cho cài đặt tối ưu
  2. Kết hợp các chỉ số khác để tạo ra các điều kiện xác nhận
  3. Sử dụng stop loss động hoặc trailing để kiểm soát rủi ro
  4. Giao dịch trong các khung thời gian khác nhau (5m, 15m, vv) dựa trên điều kiện thị trường
  5. Cải thiện hệ thống thời gian nhập cảnh để nhập chính xác hơn

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.

Kết luậ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)


Thêm nữa