Chiến lược đảo ngược trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2023-11-03 16:51:18
Tags:

img

Tổng quan

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.

Nguyên tắc

Chiến lược bao gồm 2 phần:

  1. 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.

  2. 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.

Phân tích lợi thế

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.

  1. 2/20 EMA xác định xu hướng trung hạn, tránh tiếng ồn thị trường.

  2. Sự đảo ngược ATR nắm bắt sự đảo ngược và cơ hội ngắn hạn.

  3. 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.

  4. Mất dừng ATR hợp lý cung cấp một số kiểm soát rủi ro.

  5. Bộ nhân ATR có thể tùy chỉnh thích nghi với các sản phẩm khác nhau.

  6. Tùy chọn đảo ngược thích nghi với môi trường thị trường khác nhau.

Phân tích rủi ro

Những rủi ro là:

  1. 2/20 EMA chậm và có thể bỏ lỡ cơ hội ngắn hạn.

  2. Mất dừng ATR có thể dễ dàng xâm nhập.

  3. Dấu hiệu chỉ dẫn đơn là không đáng tin cậy.

  4. Cẩn thận với việc giao dịch quá mức.

  5. Đ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.

  6. 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.

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

Chiến lược có thể được cải thiện từ:

  1. Điều chỉnh các thông số EMA cho sự kết hợp tốt nhất.

  2. Tối ưu hóa nhân ATR để dừng lỗ tốt hơn.

  3. Thêm các điều kiện lọc như khối lượng và độ biến động.

  4. Thêm mô hình quản lý vốn cho kích thước vị trí năng động.

  5. Thêm các chiến lược dừng lỗ khác như Chandelier Exit.

  6. Kiểm tra các thông số trên các sản phẩm khác nhau.

  7. Thêm các mô hình máy học để tăng hiệu suất.

  8. Kết hợp nhiều chiến lược để tạo ra nhiều Alpha hơn.

Kết luậ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)

Thêm nữa