Hệ thống giao dịch theo dõi xu hướng trung bình động kép và chiến lược lọc động thích ứng

EMA MA HMA
Ngày tạo: 2025-02-20 09:49:23 sửa đổi lần cuối: 2025-02-27 17:51:58
sao chép: 0 Số nhấp chuột: 305
2
tập trung vào
319
Người theo dõi

Hệ thống giao dịch theo dõi xu hướng trung bình động kép và chiến lược lọc động thích ứng Hệ thống giao dịch theo dõi xu hướng trung bình động kép và chiến lược lọc động thích ứng

Tổng quan

Chiến lược này là một hệ thống giao dịch theo dõi xu hướng kết hợp nhiều chỉ số kỹ thuật. Nó chủ yếu dựa trên tín hiệu chéo của đường trung bình di chuyển đơn giản (SMA) và đường trung bình di chuyển chỉ số (EMA) và tích hợp nhiều tính năng tiên tiến như đường xu hướng đường trung bình di chuyển của Hull (HMA), chỉ số William (%R) và phân tích điểm cao thấp dao động để cung cấp tín hiệu giao dịch đáng tin cậy hơn thông qua cơ chế lọc động.

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

Lập luận cốt lõi của chiến lược được xây dựng dựa trên các yếu tố then chốt sau:

  1. Sử dụng SMA chu kỳ 100 và EMA chu kỳ 200 làm chỉ số định hướng chính
  2. Các vùng xu hướng HMA tích hợp 70 chu kỳ được sử dụng để xác nhận động lực xu hướng
  3. Sử dụng chỉ số William ((%R) để tính toán giá trị hỗ trợ / kháng cự động
  4. Thử nghiệm cửa sổ lùi 20 chu kỳ để phát hiện các điểm cao và thấp
  5. Theo dõi và cập nhật trực tiếp
  6. Cài đặt bộ lọc ban đầu của ổ đĩa và ngưỡng dao động ((0.5%) để giảm tín hiệu giả

Điều kiện nhập cảnh cần phải được đáp ứng đồng thời: đường trung bình kép trên giá, chỉ số% R tăng 3 đường K liên tiếp và lớn hơn 20, đường K khép lại và giá đóng cửa cao hơn đường trước, giá không vượt quá mức biến động trong ngày. Điều kiện xuất phát đáp ứng một trong các điều kiện sau: Giá giảm xuống đường trung bình kép, chỉ số %R thấp hơn -80

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

  1. Xác thực đồng bộ của nhiều chỉ số kỹ thuật nâng cao độ tin cậy của tín hiệu giao dịch
  2. Cơ chế lọc động hiệu quả làm giảm tín hiệu giả trong thời gian dao động mạnh
  3. Tính toán kháng cự hỗ trợ tự điều chỉnh giúp chiến lược có khả năng thích ứng tốt với thị trường
  4. Cơ chế quản lý giao dịch trong ngày đầy đủ, bao gồm lọc ban đầu và kiểm soát ngưỡng biến động
  5. Các tham số có thể điều chỉnh được để tối ưu hóa phù hợp với các điều kiện thị trường khác nhau

Rủi ro chiến lược

  1. Hệ thống đường trung bình có thể tạo ra các tín hiệu sai lệch thường xuyên trong thị trường biến động
  2. Chọn lọc nhiều điều kiện có thể khiến bạn bỏ lỡ cơ hội giao dịch tiềm năng
  3. Chu kỳ trung bình động cố định có thể hoạt động khác nhau trong các môi trường thị trường khác nhau
  4. Các cơ chế lọc giao dịch trong ngày có thể bỏ lỡ cơ hội quan trọng trong tình hình xu hướng nhanh
  5. Các tham số được tối ưu hóa quá mức có thể dẫn đến các vấn đề quá phù hợp

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

  1. Giới thiệu cơ chế tính toán chu kỳ bình đẳng tự điều chỉnh để hệ thống có thể thích ứng tốt hơn với biến động thị trường
  2. Tăng các chỉ số phân tích khối lượng giao dịch để tăng độ tin cậy xác định xu hướng
  3. Phát triển cơ chế dừng lỗ động, nâng cao hiệu quả quản lý tài chính
  4. Thêm chỉ số biến động thị trường, thiết lập ngưỡng tối ưu hóa điều kiện lọc
  5. Cân nhắc sự đồng bộ của tín hiệu trong các chu kỳ thời gian khác nhau, tăng cường sự ổn định của hệ thống

Tóm tắt

Đây là một hệ thống giao dịch theo dõi xu hướng được thiết kế hoàn hảo, thông qua sự kết hợp của nhiều chỉ số kỹ thuật và cơ chế lọc nghiêm ngặt, trong khi đảm bảo độ tin cậy cũng duy trì tính linh hoạt tốt. Không gian tối ưu hóa chiến lược chủ yếu nằm trong khả năng tự điều chỉnh các tham số và cải thiện cơ chế quản lý rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
strategy(title="EMA & MA Crossover Strategy", shorttitle="EMA & MA Crossover Strategy", overlay=true)

// Inputs
LengthMA = input.int(100, minval=1, title="MA Length")
LengthEMA = input.int(200, minval=1, title="EMA Length")
swingLookback = input.int(20, title="Swing Lookback")
Lengthhmaribbon = input.int(70, minval=1, title="HMA Ribbon")
// Input for ignoring the first `n` candles of the day
ignore_n_candles = input.int(1, "Ignore First N Candles", minval=0)
// Input for percentage threshold to ignore high run-up candles
run_up_threshold = input.float(0.5, "Run-up Threshold (%)", minval=0.0)

//====================================================================
hmacondition = ta.hma(close,Lengthhmaribbon)> ta.hma(close,Lengthhmaribbon)[1]

//====================================================================
// Function to drop the first `n` candles
dropn(src, n) =>
    na(src[n]) ? na : src

// Request data with the first `n` candles dropped
valid_candle = not na(dropn(close, ignore_n_candles))
// Check for run-up condition on the previous candle
prev_run_up = (high[1] - low[1]) / low[1] * 100

// Combine conditions: exclude invalid candles and ignore high run-up candles
valid_entry_condition = valid_candle and prev_run_up <= run_up_threshold

//======================================================
// Define the start of a new day based on time
var is_first = false
var float day_high = na
var float day_low = na

// Use time() to detect the start of a new day
t = time("1440") // 1440 = 60 * 24 (one full day in minutes)
is_first := na(t[1]) and not na(t) or t[1] < t

if is_first and barstate.isnew
    day_high := high
    day_low := low
else
    day_high := nz(day_high[1], high)
    day_low := nz(day_low[1], low)

// Update daily high and low
if high > day_high
    day_high := high

if low < day_low
    day_low := low

//====================================================
previousdayclose = request.security(syminfo.tickerid, "D", close)

day_highrange = previousdayclose*.018
//======================================================
length = input(title="Length", defval=14)
src = input(close, "Source")
_pr(length) =>
	max = ta.highest(length)
	min = ta.lowest(length)
	100 * (src - max) / (max - min)
percentR = _pr(length)

//======================================================
higherline = close* 1+((100-(percentR*-1))/100)
lowerline = close* 1-((100-(percentR*-1))/100)
//======================================================
// Moving Averages
xMA = ta.sma(close, LengthMA)
xEMA = ta.sma(xMA, LengthEMA)

// Plot the MA and EMA lines
plot(xMA, color=color.red, title="MA")
plot(xEMA, color=color.blue, title="EMA")

// Find recent swing high and low
recentHigh = ta.highest(high, swingLookback)
recentLow = ta.lowest(low, swingLookback)
//===============================================
emacondition = ta.ema(close,20)>ta.ema(close,30) and ta.ema(close,30)>ta.ema(close,40) and ta.ema(close,40)>ta.ema(close,50) and close >ta.ema(close,20)
// Define Buy Condition
buyCondition1 = (percentR>percentR[1] and percentR[1]>percentR[2] and percentR[2]>percentR[3]) and percentR>-20 and percentR[1]>-20
buyCondition = (close> xMA and close> xEMA) and (close > open and close > close[1]) or xMA>xEMA and close<day_highrange and hmacondition and emacondition

// Define Sell Conditions
sellCondition = (close < xMA and close < xEMA) or xMA<xEMA or percentR<-80

// Strategy Execution
if (buyCondition and buyCondition1 and valid_entry_condition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")  // Close the long position

// Candle coloring for buy/sell indication
barcolor(buyCondition ? color.green : sellCondition ? color.red : na)
plot(higherline, color=color.olive, title="EMA")
plot(higherline, color=color.black, title="EMA")