Chiến lược tín hiệu xu hướng chồng chéo

Tác giả:ChaoZhang, Ngày: 2024-02-18 10:00:22
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch bằng cách tính toán chỉ số chuyển động theo hướng (DMI) DI + và DI- cùng với chỉ số chuyển động theo hướng trung bình (ADX) và chỉ số chuyển động theo cấp số (EMA). Nó kích hoạt tín hiệu dài khi DI + vượt quá DI- và ADX trên 20.

Chiến lược logic

  1. Tính toán DI+, DI-, ADX

    • Sử dụng ta.dmi() để tính toán DI+, DI-, ADX
    • DI+/DI- đo chuyển động giá theo hướng
    • ADX đo sức mạnh của biến động giá
  2. Tính toán đường trung bình chuyển động theo hàm số

    • Sử dụng tùy chỉnh my_ema() hàm để tính toán EMA
    • EMA làm mịn dữ liệu giá
  3. Tạo tín hiệu giao dịch

    • Tín hiệu dài: DI+ vượt trên DI- và ADX > 20 và gần > EMA
      • Chỉ ra xu hướng tăng và biến động gia tăng
    • Tín hiệu ngắn: DI- vượt dưới DI+ và ADX > 25 và gần < EMA
      • Chỉ ra xu hướng giảm và biến động cao
  4. Thiết lập stop loss

    • Lỗi dừng dài: DI- vượt quá DI+ và ADX > 30
      • Chỉ ra sự đảo ngược xu hướng
    • Lợi nhuận dừng ngắn: DI+ vượt dưới DI- và ADX > 30
      • Chỉ ra sự đảo ngược xu hướng

Tóm lại, chiến lược này kết hợp các chỉ số phân tích động lực và xu hướng để giao dịch khi xu hướng giá mạnh xuất hiện, với các lỗ dừng để hạn chế lỗ.

Phân tích lợi thế

  1. Đánh dấu hai lần tránh tín hiệu sai
    • Đơn DI có thể cung cấp tín hiệu sai, DI kép đảm bảo xu hướng
  2. Mức ngưỡng ADX đòi hỏi sự biến động cao hơn
    • Chỉ giao dịch biến động cao di chuyển, tránh dao động
  3. EMA bổ sung cho DI
    • EMA xác định xu hướng trung và dài hạn
  4. Stop loss nghiêm ngặt
    • Giảm tổn thất nhanh chóng

Phân tích rủi ro

  1. Thường xuyên dừng lỗ
    • Sự biến động dễ bay hơi có thể gây ra việc dừng lại thường xuyên
  2. Tùy thuộc tham số
    • Cần tìm các tham số DI và ADX tối ưu
  3. Tần suất giao dịch thấp
    • Các quy tắc nghiêm ngặt làm giảm thương mại

Có thể tối ưu hóa bằng cách mở rộng stop loss, điều chỉnh tham số, thêm bộ lọc để tăng tần số.

Cơ hội tối ưu hóa

  1. Tối ưu hóa tham số
    • Tối ưu hóa các thông số DI và ADX
  2. Thêm bộ lọc
    • Khối lượng, sự khác biệt, v.v.
  3. Mở rộng lệnh dừng lỗ
    • Dừng nhẹ để giảm tần suất

Kết luận

Chiến lược này kết hợp các chỉ số phân tích động lực và xu hướng để giao dịch xu hướng mạnh mẽ, với các điểm dừng nghiêm ngặt để kiểm soát rủi ro. Có thể cải thiện hiệu suất hơn nữa thông qua tối ưu hóa tham số, các bộ lọc bổ sung và dừng thư giãn.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Thêm nữa