Chiến lược này sử dụng 2 chỉ số để tạo ra các tín hiệu giao dịch: 2/20 Chỉ số trung bình chuyển động theo cấp số và trung bình True Range Reversal.
Chiến lược bao gồm 2 phần:
2/20 Giao thông chuyển động theo cấp số. Nó tính toán EMA 20 ngày và tạo ra tín hiệu khi giá vượt qua EMA lên hoặc xuống.
Chỉ số đảo ngược phạm vi thực trung bình. Nó tính toán mức dừng lỗ dựa trên ATR và tạo ra tín hiệu khi giá vượt qua mức dừng lỗ. Ở đây 3.5 x ATR được sử dụng làm mức dừng.
Chiến lược này kết hợp các tín hiệu từ cả hai. Nó đi ngắn khi 2/20 EMA cung cấp tín hiệu dài trong khi đảo ngược ATR cung cấp tín hiệu ngắn. Nó đi dài khi các tín hiệu ngược lại được tạo ra.
Chiến lược kết hợp các ý tưởng theo xu hướng và đảo ngược, nhằm mục đích nắm bắt sự đảo ngược.
2/20 EMA xác định xu hướng trung hạn, tránh tiếng ồn thị trường.
Sự đảo ngược ATR nắm bắt sự đảo ngược và cơ hội ngắn hạn.
Kết hợp các tín hiệu nắm bắt sự đảo ngược xu hướng trước thời hạn và cải thiện lợi nhuận.
Mất dừng ATR hợp lý cung cấp một số kiểm soát rủi ro.
Bộ nhân ATR có thể tùy chỉnh thích nghi với các sản phẩm khác nhau.
Tùy chọn đảo ngược thích nghi với môi trường thị trường khác nhau.
Những rủi ro là:
2/20 EMA chậm và có thể bỏ lỡ cơ hội ngắn hạn.
Mất dừng ATR có thể dễ dàng xâm nhập.
Dấu hiệu chỉ dẫn đơn là không đáng tin cậy.
Cẩn thận với việc giao dịch quá mức.
Điều chỉnh tham số và kiểm tra ngược là cần thiết để phù hợp với sản phẩm.
Quản lý vốn nghiêm ngặt là cần thiết để kiểm soát rủi ro cho mỗi giao dịch.
Chiến lược có thể được cải thiện từ:
Điều chỉnh các thông số EMA cho sự kết hợp tốt nhất.
Tối ưu hóa nhân ATR để dừng lỗ tốt hơn.
Thêm các điều kiện lọc như khối lượng và độ biến động.
Thêm mô hình quản lý vốn cho kích thước vị trí năng động.
Thêm các chiến lược dừng lỗ khác như Chandelier Exit.
Kiểm tra các thông số trên các sản phẩm khác nhau.
Thêm các mô hình máy học để tăng hiệu suất.
Kết hợp nhiều chiến lược để tạo ra nhiều Alpha hơn.
Chiến lược này kết hợp hai ý tưởng chính và có một lợi thế nhất định trong việc nắm bắt sự đảo ngược. Nhưng lựa chọn tham số không phù hợp cũng có thể đưa ra rủi ro.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 05/04/2022 // This is combo strategies for get a cumulative signal. // // First strategy // This indicator plots 2/20 exponential moving average. For the Mov // Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met. // // Second strategy // Average True Range Trailing Stops Strategy, by Sylvain Vervoort // The related article is copyrighted material from Stocks & Commodities Jun 2009 // Please, use it only for learning or paper trading. Do not for real trading. // // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// EMA20(Length) => pos = 0.0 xPrice = close xXA = ta.ema(xPrice, Length) nHH = math.max(high, high[1]) nLL = math.min(low, low[1]) nXS = nLL > xXA or nHH < xXA ? nLL : nHH iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0) pos := nXS > close[1] ? -1 : iff_1 pos ATRR(nATRPeriod,nATRMultip) => pos = 0.0 xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR 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 pos:= close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos strategy(title='Combo 2/20 EMA & Average True Range Reversed', shorttitle='Combo', overlay=true) var I1 = '●═════ 2/20 EMA ═════●' Length = input.int(14, minval=1, group=I1) var I2 = '●═════ Average True Range Reversed ═════●' nATRPeriod = input.int(5, group=I2) nATRMultip = input.float(3.5, group=I2) var misc = '●═════ MISC ═════●' reverse = input.bool(false, title='Trade reverse', group=misc) var timePeriodHeader = '●═════ Time Start ═════●' d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader) m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader) y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader) StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false posEMA20 = EMA20(Length) prePosATRR = ATRR(nATRPeriod,nATRMultip) iff_1 = posEMA20 == -1 and prePosATRR == -1 and StartTrade ? -1 : 0 pos = posEMA20 == 1 and prePosATRR == 1 and StartTrade ? 1 : iff_1 iff_2 = reverse and pos == -1 ? 1 : pos possig = reverse and pos == 1 ? -1 : iff_2 if possig == 1 strategy.entry('Long', strategy.long) if possig == -1 strategy.entry('Short', strategy.short) if possig == 0 strategy.close_all() barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)