Chiến lược theo dõi xu hướng hai tín hiệu

Tác giả:ChaoZhang, Ngày: 2023-11-02 17:02:06
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số EMA và Awesome Oscillator kép để xác định và theo dõi xu hướng. EMA nhanh chóng đánh giá hướng xu hướng ngắn hạn trong khi Awesome Oscillator lọc ra các đột phá sai và cung cấp thời gian vào. Tên chiến lược Dual Signal Trend Tracking Strategy tóm tắt chính xác chức năng chính của nó.

Chiến lược logic

Chiến lược này chủ yếu sử dụng hai chỉ số kỹ thuật, EMA kép và Awesome Oscillator để lọc tín hiệu với logic sau:

  1. Tính toán EMA 2 giai đoạn và 20 giai đoạn. Khi EMA 2 giai đoạn phá vỡ EMA 20 giai đoạn lên, nó báo hiệu xu hướng tăng. Khi EMA 2 giai đoạn phá vỡ EMA 20 giai đoạn xuống, nó báo hiệu xu hướng giảm.

  2. Tính toán Trình dao động tuyệt vời, đó là biểu đồ MACD được làm mịn bởi EMA nhanh trừ EMA chậm. Khi biểu đồ AO thay đổi từ màu đỏ sang màu xanh, đó là tín hiệu mua. Khi nó thay đổi từ màu xanh sang màu đỏ, đó là tín hiệu bán.

  3. Chỉ khi EMA hiển thị xu hướng tăng và AO hiển thị tín hiệu mua cùng một lúc, một tín hiệu mua cuối cùng được tạo ra.

  4. Thông qua cơ chế lọc tín hiệu kép này, các sự đột phá sai có thể được giảm và các xu hướng trung hạn có thể được theo dõi.

Phân tích lợi thế

Những lợi thế của chiến lược này là:

  1. Bộ lọc hai đường giảm các giao dịch ồn ào do lỗi. EMA đánh giá xu hướng tổng thể trong khi AO lọc thời gian nhập cảnh. Kết hợp cả hai cải thiện độ tin cậy tín hiệu.

  2. Độ nhạy phản ứng cực nhanh nhanh chóng bắt được sự đảo ngược ngắn hạn. EMA 2 giai đoạn rất nhạy cảm với sự đột phá và có thể nhanh chóng xác định xem xu hướng gần đây đã thay đổi hay không.

  3. Awesome Oscillator lọc thêm MACD để xác định hiệu quả các sự đột phá sai trong xu hướng và tránh các giao dịch ngược không cần thiết.

  4. Chiến lược có một hướng rõ ràng để theo dõi xu hướng trung hạn. EMA xác định xu hướng cơ bản trong khi AO lọc tín hiệu để đảm bảo giao dịch theo xu hướng tổng thể.

  5. Lựa chọn tham số hợp lý. EMA 2 giai đoạn và 20 giai đoạn ghi lại sự thay đổi giá trong các khung thời gian khác nhau. Các tham số AO 5 và 34 được tối ưu hóa để xác định các mô hình ngắn hạn.

Phân tích rủi ro

Một số rủi ro cũng tồn tại:

  1. Trong các thị trường dao động, EMA và AO có thể tạo ra nhiều tín hiệu sai, gây ra các giao dịch ngắn không cần thiết.

  2. AO đôi khi có thể trễ EMA, gây ra sự chậm trễ thời gian tín hiệu.

  3. EMA và AO chải qua các tính năng ngắn hạn và trung hạn đòi hỏi dữ liệu chất lượng và sức mạnh tính toán.

  4. Giao dịch thường xuyên dẫn đến phí hoa hồng và chi phí trượt cao hơn. Các tiêu chí thoát có thể được nới lỏng để kéo dài thời gian giữ.

  5. Chiến lược không xem xét xu hướng dài hạn và các mức hỗ trợ / kháng cự chính.

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

Chiến lược có thể được tối ưu hóa thông qua một số khía cạnh:

  1. Đưa ra các chỉ số xu hướng như băng trung bình động và ATR để hỗ trợ EMA xác định xu hướng tổng thể.

  2. Thêm phát hiện hỗ trợ / kháng cự chính như Fibonacci retraces, tạo ra tín hiệu chỉ xung quanh các mức chính để tránh các vị trí nhập khẩu xấu.

  3. Tối ưu hóa sự kết hợp các tham số EMA và AO để cải thiện hiệu ứng kết hợp. Ví dụ, sử dụng các thuật toán di truyền để tìm các cặp tham số tối ưu.

  4. Thêm stop loss exit. Exit khi giá phá vỡ Swing High / Low gần đây để kiểm soát lỗ giao dịch duy nhất.

  5. Backtest trên dữ liệu lịch sử để đánh giá hiệu suất chiến lược, kiểm tra xem lợi nhuận ổn định có đáp ứng mong đợi hay không.

  6. Phân phối giấy để dần dần điều chỉnh các thông số và cải thiện hiệu suất trực tiếp.

Kết luận

Ý tưởng chiến lược tổng thể là rõ ràng, kết hợp EMA cho xu hướng tổng thể và AO để lọc tín hiệu. Nó có thể xác định và theo dõi xu hướng một cách hiệu quả nhưng cũng có một số rủi ro và hạn chế để tối ưu hóa và thử nghiệm thêm để cải thiện sự ổn định.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/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
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// 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


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", 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)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 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