Chiến lược giao dịch xu hướng trung bình động động

Tác giả:ChaoZhang, Ngày: 2023-11-15 17:45:13
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số Đường trung bình động, kết hợp với Bollinger Bands và RSI để lọc tín hiệu giao dịch. Nó thực hiện một xu hướng sau chiến lược chỉ dài. Chiến lược đánh giá xu hướng bằng cách tính toán sự thay đổi của giá đóng Heiken Ashi Đường trung bình động và so sánh nó với Bollinger Bands để tạo ra tín hiệu giao dịch. Với bộ lọc RSI, nó có thể xác định hiệu quả các điểm nổ xu hướng để theo dõi xu hướng.

Chiến lược logic

Cốt lõi của chiến lược này là tính toán sự thay đổi của giá đóng cửa Heiken Ashi Đường trung bình động. Cụ thể, nó tính toán sự khác biệt giữa MA của thanh hiện tại và MA của hai thanh trước đó, sau đó nhân nó bằng một hệ số độ nhạy để có được giá trị thay đổi MA chính xác.

Sau đó, giá trị thay đổi này được so sánh với sự khác biệt giữa dải trên và dải dưới của Bollinger Bands. Nếu sự thay đổi MA lớn hơn sự khác biệt BB, nó được coi là một sự bùng nổ xu hướng. Khi sự bùng nổ là dương tính, tức là sự thay đổi MA là dương tính, nó tạo ra một tín hiệu dài và thanh xanh. Khi sự bùng nổ là âm tính, tức là sự thay đổi MA là âm tính, nó tạo ra một tín hiệu gần và thanh đỏ.

Ngoài ra, chiến lược này có bộ lọc RSI chỉ cho phép tín hiệu dài khi RSI cao hơn ngưỡng, tránh rủi ro đảo ngược xu hướng.

Ưu điểm

  • MA năng động để theo dõi hiệu quả những thay đổi xu hướng
  • BB như một chỉ số động kết hợp với MA để xác định tốt hơn sự bùng nổ xu hướng
  • Bộ lọc RSI tránh các tín hiệu sai từ sự phục hồi thấp
  • Long chỉ phù hợp với thị trường tăng liên tục
  • Các thông số điều chỉnh linh hoạt cho các sản phẩm và khung thời gian khác nhau

Rủi ro

  • Long chỉ không thể lợi nhuận từ xu hướng giảm
  • Tùy thuộc quá nhiều vào tối ưu hóa tham số cho các sản phẩm và khung thời gian khác nhau
  • Không thể nắm bắt sự đảo ngược xu hướng hiệu quả, có thể dẫn đến tổn thất lớn
  • Cài đặt bộ lọc RSI không chính xác có thể bỏ lỡ cơ hội giao dịch
  • Độ nhạy cao có thể tạo ra các giao dịch ồn ào

Các phương pháp kiểm soát rủi ro bao gồm: điều chỉnh tham số phù hợp cho độ bền, kết hợp các chỉ số khác để đánh giá sự đảo ngược xu hướng, chỉ sử dụng trong các xu hướng dài hạn rõ ràng, v.v.

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

Có một số không gian để tối ưu hóa thêm:

  • Cố gắng các nguồn giá khác nhau như đóng, trung bình động vv để làm mịn tốt hơn

  • Điều chỉnh các tham số giai đoạn MA và BB để tối ưu hóa trên các sản phẩm khác nhau

  • Cố gắng mối quan hệ tỷ lệ thay vì hệ số độ nhạy cho giá trị chỉ số trực quan hơn

  • Thêm các bộ lọc khác như đường xu hướng, âm lượng vv để cải thiện chất lượng tín hiệu

  • Phát triển chiến lược ngắn dựa trên các mô hình chỉ số

  • Kết hợp các cơ chế dừng lỗ để kiểm soát rủi ro tốt hơn

Kết luận

Nói chung, đây là một xu hướng tương đối ổn định sau chiến lược. Nó sử dụng trung bình động để xác định hướng xu hướng, BB để xác định các điểm bùng nổ, RSI để lọc các tín hiệu sai, nhận ra một hệ thống xu hướng dài. Nhưng nó cũng có một số rủi ro, yêu cầu điều chỉnh tham số cho các sản phẩm và khung thời gian khác nhau, và không thể kiếm lợi nhuận từ xu hướng giảm. Có chỗ cho những cải tiến hơn nữa như nâng cao chất lượng tín hiệu, phát triển chiến lược ngắn, thêm stop loss v.v. để đạt được hiệu suất tốt hơn.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

///////////Original Script Courtesy of Lazy_Bear.... Absolute Legend\\\\\\\\\\\\\\\

strategy('SmoothedWaddah', overlay=false, initial_capital=1)
sensitivity = input(150, title='Sensitivity')
fastLength = input(20, title='MacD FastEMA Length')
slowLength = input(40, title='MacD SlowEMA Length')
channelLength = input(20, title='BB Channel Length')
mult = input(1.5, title='BB Stdev Multiplier')
RSI14filter = input(40, title='RSI Value trade filter')

////////////MacD Calculation of price//////////////////////////////
calc_macd(source, fastLength, slowLength) =>
    fastMA = ta.ema(source, fastLength)
    slowMA = ta.ema(source, slowLength)
    fastMA - slowMA

/////////BolingerBand Calculation of Price///////////////////////
calc_BBUpper(source, length, mult) =>
    basis = ta.sma(source, length)
    dev = mult * ta.stdev(source, length)
    basis + dev

calc_BBLower(source, length, mult) =>
    basis = ta.sma(source, length)
    dev = mult * ta.stdev(source, length)
    basis - dev

//////heinkenashi chart call for closing price "smoothing mechanism"\\\\\\\\\\\\\\\\\\\\\\\\\\\
point = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

////////////////////T1 is change in MacD current  candle from previous candle Sensitivy amplifies calculation/////////////////////
t1 = (calc_macd(point, fastLength, slowLength) - calc_macd(point[1], fastLength, slowLength)) * sensitivity
//////////////////////T2 is  T1 from two candles prior\\\\\\\\\\\\\\\\\\\\\\\\\\\
t2 = (calc_macd(point[2], fastLength, slowLength) - calc_macd(point[3], fastLength, slowLength)) * sensitivity

////////////////E1 is difference in bolinger band upper and lower...E2 is E1 from one candle prior not needed//////////////
e1 = calc_BBUpper(ohlc4, channelLength, mult) - calc_BBLower(ohlc4, channelLength, mult)
//e2 = (calc_BBUpper(close[1], channelLength, mult) - calc_BBLower(close[1], channelLength, mult))

//////signal bar printing.. Up if MacD positive .. Down if MacD negative//////////
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

///////plots difference in macD*Sensitivity, color change if increasing or decreasing. 
//////color is green/lime if explosion is up \ color is red/orange if explosion is down/////////
plot(trendUp, style=plot.style_columns, linewidth=1, color=trendUp < trendUp[1] ? color.new(color.lime,45) : color.new(color.green,45), title='UpTrend')
plot(trendDown, style=plot.style_columns, linewidth=1, color=trendDown < trendDown[1] ? color.new(color.orange,45) : color.new(color.red,45), title='DownTrend')
plot(e1, style=plot.style_line, linewidth=2, color=color.new(#A0522D, 0), title='ExplosionLine')


////////////Entry conditions and Concept/////////////////////
////////////Long Only System. T1 is measuring the distance between MACD EMA's. This is Multiplied
////////////by the sensitivity so that it can be compared to the difference between BollingerBand. 
/////////////{this could have been a ratio maybe i will work with that in a different script.} 
/////////////I found that 135-175 sensitivy allows for values to be compared on most charts.....
////////////If the (difference between the EMA)*(Sensitivity) is greater than (BB upper line- BB lower line)
////////////it is considered an explosion in either the downside or the upside.The indicator will print
///////////a bar higher than the trigger line either green or red (up or down respectively)//////////////////

longCondition = trendUp > e1 and ta.rsi(close, 14) > RSI14filter
if longCondition
    strategy.entry('up', strategy.long)

strategy.close('up', trendDown > e1)



Thêm nữa