Tài nguyên đang được tải lên... tải...

EMA/SMA Trend Following with Swing Trading Strategy Combined Volume Filter and Percentage Take-Profit/Stop-Loss System EMA/SMA theo dõi xu hướng với chiến lược giao dịch xoay kết hợp bộ lọc khối lượng và hệ thống lấy lợi nhuận/dừng lỗ phần trăm

Tác giả:ChaoZhang, Ngày: 2024-12-11 15:12:35
Tags:EMASMA

img

Tổng quan

Chiến lược này là một hệ thống giao dịch toàn diện kết hợp theo xu hướng với các phương pháp giao dịch swing, sử dụng EMA và SMA crossover, xác định swing high/low, lọc khối lượng, và cơ chế lấy lợi nhuận dựa trên tỷ lệ phần trăm và ngăn chặn lỗ.

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 đa lớp, bắt đầu với EMA (Ema) 10) và SMA (SMA) 21) để xác định xu hướng cơ bản, sau đó sử dụng các điểm pivot điểm trái / phải 6 thanh để định thời gian nhập cảnh, trong khi yêu cầu khối lượng trên trung bình động 200 giai đoạn để đảm bảo thanh khoản đầy đủ. Hệ thống sử dụng 2% lợi nhuận và 1% dừng lỗ để quản lý rủi ro. Các vị trí dài được bắt đầu khi giá vượt qua mức cao nhất với xác nhận khối lượng; các vị trí ngắn được thực hiện khi giá vượt qua mức thấp nhất với xác nhận khối lượng.

Ưu điểm chiến lược

  1. Xác nhận nhiều tín hiệu làm giảm các tín hiệu sai thông qua xác minh xu hướng, đột phá giá và mở rộng khối lượng
  2. Quản lý lợi nhuận/mất mát linh hoạt bằng cách sử dụng tỷ lệ phần trăm dựa trên lợi nhuận với dừng lỗ kéo theo
  3. Hệ thống trực quan toàn diện để theo dõi giao dịch và tín hiệu
  4. Khả năng tùy chỉnh cao với các thông số chính có thể điều chỉnh
  5. Quản lý rủi ro có hệ thống thông qua các mức dừng lỗ và lợi nhuận được đặt trước

Rủi ro chiến lược

  1. Tiền bồi thường cho các khoản đầu tư khác nhau
  2. Bộ lọc âm lượng có thể bỏ qua một số tín hiệu hợp lệ
  3. Lãi suất cố định có thể rời quá sớm trong xu hướng mạnh mẽ
  4. Hệ thống trung bình động có sự chậm trễ vốn có trong các sự đảo ngược nhanh chóng
  5. Cần phải xem xét tác động của chi phí giao dịch đối với lợi nhuận chiến lược

Hướng dẫn tối ưu hóa

  1. Thiết lập điều chỉnh biến động để điều chỉnh năng động lợi nhuận / dừng lỗ
  2. Thêm bộ lọc sức mạnh 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 xem xét thay đổi khối lượng tương đối
  4. Thực hiện các bộ lọc dựa trên thời gian để tránh các giai đoạn giao dịch không thuận lợi
  5. Xem xét phân loại chế độ thị trường để điều chỉnh tham số

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh thông qua các đường trung bình động, đột phá giá và xác minh khối lượng, phù hợp với xu hướng theo sau trung hạn đến dài hạn.


/*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)

Có liên quan

Thêm nữa