Chiến lược xuyên thời kỳ dựa trên AlphaTrend


Ngày tạo: 2023-09-28 11:05:27 sửa đổi lần cuối: 2023-09-28 11:05:27
sao chép: 0 Số nhấp chuột: 903
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này dựa trên chỉ số AlphaTrend, nó kết hợp lợi thế của cả hai chỉ số RSI và MFI, có hiệu quả chiến lược tốt hơn trong thị trường xu hướng đa chiều. Chiến lược này chủ yếu đánh giá liệu giá có phá vỡ đường cong AlphaTrend để nắm bắt hướng của xu hướng hay không.

Nguyên tắc chiến lược

  1. Tính toán ATR để đo lường mức độ biến động của thị trường
  2. Nếu không có dữ liệu khối lượng giao dịch, hãy sử dụng chỉ số RSI để xác định thị trường trống; Nếu có khối lượng giao dịch, hãy sử dụng chỉ số MFI để xác định thị trường trống
  3. Tính trên và dưới đường ray dựa trên ATR và phán đoán đa không gian
  4. Tính toán đường cong AlphaTrend, kết hợp với điều chỉnh động lực trên và dưới đường ray
  5. Các tín hiệu mua và bán được phát ra khi giá vượt qua đường cong AlphaTrend

Chiến lược này dựa chủ yếu vào đường cong AlphaTrend để xác định hướng xu hướng giá, nó có tính đến tổng hợp các thước đo biến động của thị trường ATR, RSI và chỉ số MFI, có thể theo dõi xu hướng giá một cách hiệu quả. Khi giá phá vỡ đường cong, cho thấy xu hướng chuyển hướng, thời điểm này là thời điểm nhập cảnh.

Lợi thế chiến lược

  1. Chỉ số AlphaTrend kết hợp lợi thế của cả hai chỉ số RSI và MFI, đồng thời có thể thích ứng với thị trường không có giá
  2. Cài đặt trên và dưới đường ray động có thể tự động điều chỉnh theo biến động của thị trường
  3. Thông tin về giá cả và khối lượng giao dịch được xem xét toàn diện, không dễ bị lừa bởi các tín hiệu sai lệch
  4. Sử dụng các phương pháp đột phá để nắm bắt các xu hướng mới
  5. Logic rõ ràng, đơn giản và dễ hiểu

Tóm lại, chiến lược này có thể áp dụng cho tất cả các trường hợp, có hiệu quả trong việc lọc tiếng ồn thị trường, xác định xu hướng chính xác hơn, và là một chiến lược theo dõi xu hướng chính xác và hiệu quả.

Rủi ro chiến lược

  1. AlphaTrend có thể bị phá vỡ một cách sai lầm và cần được xác minh với các chỉ số khác
  2. Có thể có nhiều tín hiệu không hiệu quả trong một trận động đất lớn.
  3. Thiết lập tham số chỉ số không đúng cũng ảnh hưởng đến hiệu quả của chiến lược
  4. Trong tình trạng giảm giá, lệnh dừng có thể bị phá vỡ, nên cần cảnh giác với tổn thất lớn.

Đối với rủi ro, bạn có thể đặt dừng lỗ để kiểm soát tổn thất đơn lẻ; tối ưu hóa các tham số kết hợp, sử dụng với các chỉ số khác để giảm tín hiệu không hiệu quả; điều chỉnh các tham số tùy theo thị trường khác nhau.

Tối ưu hóa chiến lược

  1. Bạn có thể thử nghiệm với các tham số khác nhau để tìm ra tham số tối ưu nhất.
  2. Có thể kết hợp với các chỉ số khác để tạo ra các điều kiện phụ giúp phán đoán
  3. Có thể thiết lập dừng động hoặc theo dõi dừng để kiểm soát rủi ro
  4. Có thể sử dụng tần số giao dịch khác nhau tùy theo tình hình thị trường (ví dụ như 5 phút, 15 phút, v.v.)
  5. Có thể tối ưu hóa thời gian nhập cảnh, thiết lập các điều kiện nhập cảnh chính xác hơn

Bằng cách thử nghiệm các thị trường và tham số khác nhau, chiến lược này có thể được tối ưu hóa để phù hợp với nhiều loại tình huống khác nhau.

Tóm tắt

Chiến lược AlphaTrend nói chung là một chiến lược theo dõi xu hướng đơn giản và hiệu quả. Nó kết hợp giá cả và khối lượng giao dịch, có thể thích ứng với tình trạng không có nhiều người.

Mã nguồn chiến lược
/*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)