Chiến lược giao dịch theo xu hướng EMA/SMA và giao dịch theo xu hướng kết hợp với lọc khối lượng và hệ thống dừng lỗ và chốt lời theo phần trăm

EMA SMA
Ngày tạo: 2024-12-11 15:12:35 sửa đổi lần cuối: 2024-12-11 15:12:35
sao chép: 1 Số nhấp chuột: 444
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch theo xu hướng EMA/SMA và giao dịch theo xu hướng kết hợp với lọc khối lượng và hệ thống dừng lỗ và chốt lời theo phần trăm

Tổng quan

Chiến lược này là một hệ thống giao dịch tổng hợp kết hợp theo dõi xu hướng với phương pháp giao dịch dải sóng để xây dựng một hệ thống giao dịch hoàn chỉnh thông qua chéo đường trung bình của EMA và SMA, nhận diện điểm cao và thấp của dải sóng, lọc khối lượng giao dịch và phần trăm dừng và theo dõi cơ chế dừng lỗ. Thiết kế chiến lược tập trung vào xác nhận tín hiệu đa chiều, tăng độ chính xác và độ tin cậy của giao dịch thông qua sự phối hợp của các chỉ số kỹ thuật.

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

Chiến lược sử dụng một cơ chế lọc tín hiệu nhiều cấp, đầu tiên sử dụng EMA (10) và SMA (21) để đánh giá xu hướng hình thành nền tảng chéo, sau đó xác định thời gian nhập cảnh bằng cách phá vỡ các điểm cao thấp của sáu đường K bên trái và bên trái, đồng thời yêu cầu khối lượng giao dịch lớn hơn 200 chu kỳ trung bình di chuyển, đảm bảo giao dịch trong môi trường có nhiều thanh khoản. Hệ thống sử dụng 2% phần trăm dừng và 1% theo dõi dừng để quản lý rủi ro.

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

  1. Cơ chế xác nhận đa tín hiệu giảm tín hiệu giả: tăng cường xác minh ba lần thông qua xu hướng đường trung bình, giá vượt và khối lượng giao dịch, tăng độ tin cậy giao dịch
  2. Cơ chế dừng lỗ linh hoạt: thiết lập điểm dừng bằng cách sử dụng tỷ lệ phần trăm và kết hợp với việc theo dõi dừng lỗ để khóa lợi nhuận
  3. Hệ thống hiển thị hoàn hảo: cung cấp đồ họa hiển thị các điểm đồng nhất, điểm đột phá, giúp giám sát giao dịch
  4. Khả năng tùy chỉnh cao: Các tham số quan trọng có thể được điều chỉnh để phù hợp với các môi trường thị trường khác nhau
  5. Quản lý rủi ro có hệ thống: Kiểm soát rủi ro bằng cách đặt trước các lệnh dừng và dừng

Rủi ro chiến lược

  1. Thị trường giao dịch ngang có thể tạo ra các đột phá giả thường xuyên
  2. Bộ lọc lượng giao dịch có thể bỏ qua một số tín hiệu hiệu quả
  3. Cốp tỷ lệ cố định có thể bị bỏ đi quá sớm trong trường hợp mạnh
  4. Hệ thống đường trung bình bị tụt hậu trong quá trình chuyển đổi nhanh chóng sang thị trường
  5. Cần xem xét tác động của chi phí giao dịch đến lợi nhuận chiến lược

Hướng tối ưu hóa chiến lược

  1. Giới thiệu cơ chế tự điều chỉnh tỷ lệ dao động, điều chỉnh động các tham số dừng lỗ
  2. Tăng bộ lọc cường độ xu hướng để tránh giao dịch trong xu hướng yếu
  3. Tối ưu hóa thuật toán lọc khối lượng giao dịch, xem xét sự thay đổi khối lượng giao dịch tương đối
  4. Thêm bộ lọc thời gian để tránh giao dịch trong thời gian không thuận lợi
  5. Xem xét việc đưa vào phân loại môi trường thị trường, sử dụng các tham số khác nhau cho các thị trường khác nhau

Tóm tắt

Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh, phù hợp với việc theo dõi xu hướng trung và dài hạn thông qua hệ thống thống thống nhất, phá vỡ giá và xác minh khối lượng giao dịch. Điểm mạnh của hệ thống là xác nhận nhiều tín hiệu và cơ chế quản lý rủi ro tốt, nhưng cũng cần chú ý đến hoạt động trong thị trường ngang. Với hướng tối ưu hóa được đề xuất, chiến lược vẫn có chỗ nâng cao, đặc biệt là cải tiến về khả năng tự điều chỉnh sẽ giúp tăng sự ổn định của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)