Chiến lược được đặt tên là
MADE là một chỉ báo về giá cả của các loại sản phẩm. Cốt lõi của chiến lược này là chỉ báo Moving Average Displaced Envelope (MADE). MADE tạo thành các dải phía trên và phía dưới bằng cách nhân các nhân tố phần trăm với trung bình di chuyển theo cấp số nhân (EMA). Các tín hiệu bán được tạo ra khi giá phá vỡ trên dải phía trên và các tín hiệu mua được tạo ra khi giá phá vỡ dưới dải phía dưới. Chiến lược này kết hợp chỉ báo MADE với cơ chế dừng theo dõi Average True Range (ATR).
Cụ thể, chỉ số MADE chứa 3 tham số: Thời gian, tỷ lệ phần trăm trên perAb và tỷ lệ phần trăm dưới perBl. Các tham số Thời gian xác định thời gian của EMA. Khoảng cách giữa dải trên và dưới EMA được kiểm soát bởi các yếu tố phần trăm. Phần dừng lại sau ATR chủ yếu được đặt bởi thời gian ATR nATRPeriod và ATR nATRMultip. Khi giá vượt quá đường dừng lỗ của thanh trước, đường dừng lỗ được điều chỉnh theo giá trừ lỗ ATR cố định. Khi giá giảm xuống dưới đường dừng lỗ của thanh trước, đường dừng lỗ được điều chỉnh theo giá cộng với lỗ ATR cố định.
Cuối cùng, tín hiệu mua và bán được tạo ra bằng cách kết hợp các tín hiệu chỉ số MADE và điều kiện dừng kéo theo ATR. Giao dịch ngược có thể đạt được thông qua công tắc đầu vào ngược.
Chiến lược MADEFlex có những lợi thế sau:
Các tín hiệu kết hợp đáng tin cậy hơn và dừng mất mát. MADE tự nó có xu hướng tạo ra tín hiệu sai.
Các thông số MADE và các thông số ATR có thể được điều chỉnh để kiểm soát số lượng và chất lượng tín hiệu.
Hỗ trợ giao dịch ngược.
Đánh giá hiệu ứng dừng trực quan thông qua các đường dừng được vẽ.
Chiến lược MADEFlex cũng có những rủi ro sau:
Các thông số MADE không chính xác có thể tạo ra tín hiệu sai quá mức. Các thông số thích hợp cần được kiểm tra cẩn thận.
Việc dừng ATR quá lỏng lẻo có thể bỏ lỡ cơ hội dừng.
Rủi ro cao hơn với giao dịch ngược. Đặc biệt trong các tình huống biến động cao, giao dịch ngược có thể làm tăng rủi ro mất mát. Cần sử dụng thận trọng.
Trong điều kiện thị trường cực đoan, việc thiếu bảo vệ dừng lỗ có thể dẫn đến tổn thất cao hơn.
Chiến lược MADEFlex có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa các tham số MADE để cải thiện chất lượng tín hiệu. Các kết hợp thời gian và tỷ lệ phần trăm khác nhau có thể được thử nghiệm để tìm các bộ tham số đáng tin cậy hơn.
Tối ưu hóa các thông số dừng phía sau ATR để có hiệu quả dừng tốt hơn. Thời gian và số lần ATR có thể được thử nghiệm để xác định các kết hợp phù hợp hơn.
Thêm các bộ lọc khác để giảm thêm tín hiệu sai, ví dụ: kết hợp các chỉ số biến động để lọc.
Thêm cơ chế lấy lợi nhuận để thoát ra ở mức lợi nhuận nhất định. Điều này khóa lợi nhuận và kiểm soát rủi ro.
Sử dụng các phương pháp học máy để tối ưu hóa các thông số một cách năng động, ví dụ như học tăng cường.
Chiến lược MADEFlex kết hợp thành công các tín hiệu giao dịch từ chỉ số Moving Average Envelope và phương pháp ATR trailing stop. Thông qua các thông số điều chỉnh, nó thực hiện một giải pháp giao dịch định lượng linh hoạt và có thể kiểm soát được. Chiến lược có độ tin cậy tương đối cao và khả năng kiểm soát mạnh mẽ. Nó phù hợp với người dùng có một số cơ sở định lượng để sử dụng và tối ưu hóa. Với các tối ưu hóa hơn nữa, có thể mong đợi hiệu suất chiến lược đáng kể hơn.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 27/09/2022 // Moving Average Displaced Envelope. These envelopes are calculated // by multiplying percentage factors with their displaced expotential // moving average (EMA) core. // How To Trade Using: // Adjust the envelopes percentage factors to control the quantity and // quality of the signals. If a previous high goes above the envelope // a sell signal is generated. Conversely, if the previous low goes below // the envelope a buy signal is given. // // Average True Range Trailing Stops Strategy, by Sylvain Vervoort // The related article is copyrighted material from Stocks & Commodities Jun 2009 // // ATR TS used by filter for MADE signals. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true) tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short']) Price = input(title='Source', defval=close) Period = input.int(defval=9, minval=1) perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1) perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1) disp = input.int(title='Displacement', defval=13, minval=1) nATRPeriod = input(15) nATRMultip = input(2) useATR = input(false, title='ATR Filter') reverse = input(false, title='Trade reverse') longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both' shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both' pos = 0 sEMA = ta.ema(Price, Period) top = sEMA[disp] * ((100 + perAb) / 100) bott = sEMA[disp] * ((100 - perBl) / 100) xATR = ta.atr(nATRPeriod) xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod) xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod) nSpread = (xHHs - xLLs) / 2 nLoss = nATRMultip * xATR var xATRTrailingStop = 0.0 xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss ATRLong = close > xATRTrailingStop ? true : false ATRShort = close < xATRTrailingStop ? true : false iff_1 = close > top ? 1 : pos[1] pos := close < bott ? -1 : iff_1 iff_2 = reverse and pos == -1 ? 1 : pos possig = reverse and pos == 1 ? -1 : iff_2 clr = strategy.position_size if possig == 1 if longAllowed and ATRLong strategy.entry('Long', strategy.long) else if ATRLong or strategy.position_size > 0 strategy.close_all() if possig == -1 if shortAllowed and ATRShort strategy.entry('Short', strategy.short) else if ATRShort or strategy.position_size < 0 strategy.close_all() if possig == 0 strategy.close_all() plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop') barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)