Chiến lược giao thoa QQE nhanh dựa trên lọc xu hướng


Ngày tạo: 2024-01-25 11:34:58 sửa đổi lần cuối: 2024-01-25 11:34:58
sao chép: 1 Số nhấp chuột: 1235
1
tập trung vào
1617
Người theo dõi

Chiến lược giao thoa QQE nhanh dựa trên lọc xu hướng

Tổng quan

Chiến lược giao dịch theo xu hướng dựa trên bộ lọc QQE nhanh là một chiến lược giao dịch theo xu hướng sử dụng bộ lọc hướng xu hướng dựa trên bộ lọc QQE nhanh cùng với đường trung bình di chuyển. QQE hoặc ước tính định lượng định tính dựa trên chỉ số cường độ tương đối, nhưng sử dụng kỹ thuật mài mòn như một chuyển đổi bổ sung. Có ba loại giao dịch có thể được lựa chọn (tất cả được chọn theo mặc định):

  • RSI tín hiệu chéo đường 0 ((XZERO)
  • Tín hiệu RSI xuyên qua đường RSIatr nhanh ((XQQE)
  • Tín hiệu RSI thoát khỏi kênh giảm RSI ((mua/bán)

Các tín hiệu mua/bán có thể được lọc bằng các đường trung bình di chuyển:

  • Đối với tín hiệu mua, giá đóng cửa phải cao hơn đường trung bình di chuyển nhanh và đường trung bình di chuyển nhanh (EMA8) > đường trung bình di chuyển nhanh (EMA20) > đường trung bình di chuyển chậm (SMA50)
  • Đối với tín hiệu bán, giá đóng cửa phải thấp hơn đường trung bình di chuyển nhanh và đường trung bình di chuyển nhanh (EMA8) < đường trung bình di chuyển nhanh (EMA20) < đường trung bình di chuyển chậm (SMA50)

và/hoặc bộ lọc hướng xu hướng:

  • Đối với tín hiệu mua, giá đóng cửa phải cao hơn đường trung bình di chuyển chậm (SMA50) và đường trung bình di chuyển theo hướng (EMA20) phải là màu xanh lá cây.
  • Đối với tín hiệu bán, giá đóng cửa phải thấp hơn đường trung bình di chuyển chậm (SMA50) và đường trung bình di chuyển theo hướng (EMA20) phải là màu đỏ.

XZERO và XQQE không được bao gồm trong bộ lọc, chúng được sử dụng để chỉ ra các tín hiệu mua / bán đang chờ đợi, đặc biệt là XZERO.

Chiến lược này sẽ hoạt động trên bất kỳ cặp tiền tệ nào và trên hầu hết các khung thời gian.

Nguyên tắc chiến lược

Ý tưởng cốt lõi của chiến lược này là sử dụng các dấu hiệu giao dịch theo hướng của chỉ số QQE nhanh như một tín hiệu giao dịch và lọc các tín hiệu giao dịch ồn ào thông qua sự kết hợp của các đường trung bình di chuyển để nắm bắt hướng xu hướng.

Cụ thể, chiến lược sử dụng các chỉ số và tín hiệu sau:

Chỉ số QQE nhanhĐây là một chỉ số dựa trên RSI, được xử lý mịn hơn để làm cho nó nhạy cảm hơn và nhanh hơn. Chỉ số bao gồm ba đường: đường trung tâm là đường trung bình di chuyển chỉ số của RSI, đường trên là đường trung bình + ATR nhanh * một hệ số, đường dưới là đường trung bình - ATR nhanh * một hệ số.

Giao nhau 0: Khi RSI đường trung đạo giao nhau đường 0 tạo ra tín hiệu, giao nhau là mua tín hiệu, giao nhau là bán tín hiệu. Những tín hiệu này cho thấy sự thay đổi của xu hướng.

Thâm nhập: Khi đường quỹ đạo trung tâm của RSI đi vào kênh ngưỡng được thiết lập, nó sẽ tạo ra tín hiệu, phá vỡ kênh trên là một tín hiệu bán, phá vỡ kênh dưới là một tín hiệu mua. Đây là tín hiệu xu hướng mạnh hơn.

Gói trung bình di chuyểnSử dụng ba nhóm trung bình di chuyển nhanh và chậm, đường nhanh là 8 chu kỳ, đường trung bình là 20 chu kỳ, đường chậm là 50 chu kỳ. Khi ba đường được sắp xếp thành: nhanh> trung bình> chậm thì xu hướng tăng, khi nhanh < trung bình < chậm thì xu hướng giảm. Sự kết hợp được sử dụng để xác định hướng xu hướng tổng thể.

Trình lọc xu hướng: Giá đóng cửa tạo ra tín hiệu mua khi nó nằm trên đường trung bình di chuyển chậm và trên đường trung bình di chuyển trung bình ((giá cao nhất trong chu kỳ> giá thấp nhất); giá đóng cửa tạo ra tín hiệu bán khi nó nằm dưới đường trung bình di chuyển chậm và đường trung bình di chuyển trung bình đi xuống. Điều này có thể lọc ra một số tín hiệu sai lệch ngược lại.

Bằng cách kết hợp sử dụng tín hiệu chéo của chỉ số QQE nhanh và lọc xu hướng của đường trung bình di chuyển, bạn có thể bắt được các điểm đảo ngược ngắn hạn và trung bình về hướng xu hướng trong khung thời gian lớn hơn, tạo thành một hệ thống giao dịch tương đối hoàn chỉnh. Đồng thời, các tham số của chỉ số được thiết lập nhạy cảm hơn, có thể bắt được các điểm đảo ngược xu hướng sớm nhất.

Nói chung, đây là một chiến lược để theo dõi xu hướng trung bình và dài hạn, nắm bắt thời điểm mua/bán đảo ngược ngắn hạn thông qua chỉ số nhanh và sử dụng bộ lọc trung bình di chuyển để giảm rủi ro của hoạt động đảo ngược và tối đa hóa lợi nhuận.

Lợi thế chiến lược

  • Sử dụng chỉ số nhạy nhanh QQE, có thể nhanh chóng nắm bắt tín hiệu đảo ngược
  • Sử dụng nhiều nhóm trung bình di chuyển để xác định hướng của chu kỳ lớn, tránh giao dịch ngược
  • Bao gồm nhiều tín hiệu chéo, có thể được sử dụng kết hợp để tăng cơ hội kiếm lợi nhuận
  • Các tham số có thể điều chỉnh và có thể được tối ưu hóa cho các giống và chu kỳ khác nhau
  • Sử dụng các chỉ số riêng của các kênh phá vỡ tín hiệu, không có các kênh độc lập được vẽ, tránh phụ thuộc vào tham số
  • Có thể nắm bắt được một sự đảo ngược ngắn hạn trong xu hướng trung và dài.
  • Khái niệm đơn giản, rõ ràng, dễ hiểu và thực hiện

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro tiềm ẩn:

  • Chỉ số nhanh dễ tạo ra tín hiệu giả, trung bình di chuyển không thể lọc hoàn toàn, có nguy cơ theo dõi sai hướng
  • Tín hiệu giao dịch ngược dễ gây rủi ro khi chu kỳ lớn đảo ngược
  • Không tính đến các yếu tố quản lý tài sản, có thể có quá nhiều giao dịch gây thiệt hại
  • Không có thiết lập dừng lỗ, rủi ro mở rộng tổn thất cao hơn
  • Rủi ro của việc phản hồi dữ liệu phù hợp, hiệu quả của ổ đĩa phải được xác minh

Các biện pháp đối phó và giải pháp bao gồm:

  • Điều chỉnh tham số trung bình di chuyển, sử dụng nhiều chu kỳ hơn để đánh giá xu hướng
  • Thêm bộ lọc kết hợp các chỉ số khác như MACD, bias, v.v.
  • Tham gia chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ
  • Xác minh thực tế, tham số tối ưu hóa

Hướng tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Tối ưu hóa các tham số đường chậm của chỉ số QQE để tìm các tham số kết hợp tốt nhất
  2. Thử nghiệm nhiều hơn các kết hợp trung bình di chuyển để tìm ra hiệu quả lọc tối ưu
  3. Thêm một sự kết hợp của các chỉ số khác, chẳng hạn như MACD để hỗ trợ các tín hiệu lọc
  4. Ứng dụng chiến lược quản lý vốn, tối ưu hóa quản lý vị trí
  5. Thiết lập chiến lược dừng lỗ, kiểm soát rủi ro mất mát đơn lẻ
  6. Tối ưu hóa cho các tham số khác nhau
  7. Phân tích xu hướng trong chu kỳ cao hơn, tránh bị lừa bởi sự đảo ngược ngắn hạn

Bằng cách tối ưu hóa các tham số, kết hợp nhiều chỉ số hơn và hỗ trợ các phương tiện quản lý vốn và rủi ro thực tế, chiến lược này có thể cải thiện hiệu suất thực tế.

Tóm tắt

Nhìn chung, chiến lược giao thoa QQE nhanh dựa trên bộ lọc xu hướng là một lựa chọn rất đáng xem xét. Ưu điểm của nó là nắm bắt nhanh chóng các cơ hội giao dịch đảo ngược, đồng thời sử dụng nhiều nhóm trung bình di chuyển để đánh giá xu hướng lớn và tránh giao dịch sai lầm ngược. Bằng cách tối ưu hóa các tham số chỉ số và điều kiện lọc, và kết hợp với quản lý vốn nghiêm ngặt, chiến lược này có thể thu được lợi nhuận đầu tư ổn định hơn.

Tất nhiên, không thể bỏ qua rủi ro, kiểm tra thực tế và điều chỉnh tối ưu hóa liên tục là cần thiết để đảm bảo tính thực tế và độ tin cậy của chiến lược. Nói chung, các nhà đầu tư nên học hỏi và theo dõi thực hành lâu dài.

Mã nguồn chiến lược
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//
// Title:   [STRATEGY][UL]QQE Cross v1.1
// Author:  JustUncleL
// Date:    22-Oct-2016
// Version: v1.1
//
// Description:
//  A trend following trading Strategy that uses fast QQE crosses with Moving Averages
//  for trend direction filtering. QQE or Qualitative Quantitative Estimation is based 
//  on the relative strength index, but uses a smoothing technique as an additional 
//  transformation. Three crosses can be selected (all selected by default): 
//    - RSI signal crossing ZERO (XZERO)
//    - RSI signal crossing Fast RSIatr line (XQQE)
//    - RSI signal exiting the RSI Threshhold Channel (BUY/SELL)
//  The (BUY/SELL) alerts can be optionally filtered by the Moving averages:
//    - For BUY alert the Close must be above the fast MA and 
//        fast MA (EMA8) > medium MA (EMA20) > slow MA (SMA50).
//    - For SELL alert the Close must be below the fast MA and
//        fast MA (EMA8) < medium MA (EMA20) < slow MA (SMA50).
//  and/or directional filter:
//    - For BUY alert the Close must be above the slow MA (SMA50) and the
//      directional MA (EMA20) must be green.
//    - For SELL alert the Close must be below the slow MA (SMA50) and the
//      directional MA (EMA20) must be red.
//. The XZERO and XQQE are not included in the filtering, they are used to indicate
//  pending BUY/SELL alerts, particularly the XZERO. 
//
//  This Strategy should work on any currency pair and most chart timeframes.
//  *** USE AT YOUR OWN RISK ***
//  
// 
//
// Mofidifications:
//  1.1 - Added Target Profit option, cleaned up the risk management code.
//        Changed Trade Close to EMA20 direction change instead of opposite BUY/SELL
//        signal, which will be earlier, this means stop loss setting should not be
//        required when an AutoTrader is available.
//        Modified code to prevent potential repaint issues.
//  1.0 - original
//
// References:
//  Some Code borrowed from:
//  - "Scalp Jockey - MTF MA Cross Visual Strategizer by JayRogers"
//  - "QQE MT4 by glaz"
//  - "Strategy Code Example by JayRogers"  
//  Inspiration from:
//  - http://www.forexstrategiesresources.com/binary-options-strategies-ii/189-aurora-binary-trading/
//  - http://www.forexstrategiesresources.com/metatrader-4-trading-systems-v/652-qqe-smoothed-trading/
//  - http://dewinforex.com/forex-indicators/qqe-indicator-not-quite-grail-but-accurately-defines-trend-and-flat.html
//

strategy(title='[STRATEGY][UL]QQE Cross v1.1', pyramiding=0, overlay=true )


// - INPUTS START
// Fast MA - type, source, length
type1   = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len1    = input(defval=8, title="Fast - Length", minval=1)
// Medium Fast MA - type, source, length
type2   = input(defval="EMA", title="Medium Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len2    = input(defval=20, title="Medium Fast - Length", minval=1)
// Slow MA - type, source, length
type3   = input(defval="SMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, LSMA, ZEMA ( case sensitive )")
len3    = input(defval=50, title="Slow Length", minval=1)
//
// QQE rsi Length, Smoothing, fast ATR factor, source
RSILen  = input(6,title='RSI Length')
SF      = input(3,title='RSI Smoothing Factor')
QQE     = input(2.618,title='Fast QQE Factor')
threshhold = input(10, title="RSI Threshhold")
//
sQQEx   = input(false,title="Show QQE Signal crosses")
sQQEz   = input(false,title="Show QQE Zero crosses")
//
filter  = input(false,title="Use Moving Average Filter")
dfilter = input(true, title="Use Trend Directional Filter" )
RSIsrc  = input(close,title="Source")
srcclose= RSIsrc

// - INPUTS END

// - FUNCTIONS

// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)                                              // Zero Lag Exponential
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="ZEMA"?v10 : v1

// - FUNCTIONS END

// - Fast ATR QQE
//
Wilders_Period = RSILen * 2 - 1
//
Rsi = rsi(RSIsrc,RSILen)
RSIndex = ema(Rsi, SF)
AtrRsi = abs(RSIndex[1] - RSIndex)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
DeltaFastAtrRsi = ema(MaAtrRsi,Wilders_Period) * QQE
//
newshortband=  RSIndex + DeltaFastAtrRsi
newlongband= RSIndex - DeltaFastAtrRsi
longband=RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1],newlongband) : newlongband
shortband=RSIndex[1] < shortband[1] and  RSIndex < shortband[1] ? min(shortband[1],newshortband) : newshortband
trend=cross(RSIndex, shortband[1])? 1 : cross(longband[1], RSIndex) ? -1 : nz(trend[1],1)
FastAtrRsiTL = trend==1 ? longband : shortband


// - SERIES VARIABLES
// MA's
ma_fast    = variant(type1, srcclose, len1)
ma_medium  = variant(type2, srcclose, len2)
ma_slow    = variant(type3, srcclose, len3)
// Get Direction From Medium Moving Average
direction = rising(ma_medium,3) ? 1 : falling(ma_medium,3) ? -1 : 0
//
// Find all the QQE Crosses
QQExshort = sQQEx and crossover(FastAtrRsiTL, RSIndex)
QQExlong  = sQQEx and crossunder(FastAtrRsiTL, RSIndex)
// Zero cross
QQEzlong = sQQEz and crossover(RSIndex,50)
QQEzshort  = sQQEz and crossunder(RSIndex,50)
//  
// Thresh Hold channel Crosses give the BUY/SELL alerts.
QQEclong = RSIndex>(50+threshhold) ? na(QQEclong[1]) ? 1 : QQEclong[1]+1 : 0
QQEcshort = RSIndex<(50-threshhold) ? na(QQEcshort[1]) ? 1 : QQEcshort[1]+1 : 0

//
// Check Filtering.
QQEflong = (not filter or (srcclose>ma_fast and ma_medium>ma_slow and ma_fast>ma_medium)) and 
  (not dfilter or (direction>0 and srcclose>ma_slow))
QQEfshort = (not filter or (srcclose<ma_fast and ma_medium<ma_slow and ma_fast<ma_medium)) and
  (not dfilter or (direction<0 and srcclose<ma_slow))
//
// Get final BUY / SELL alert determination
buy = QQEclong>0 and QQEflong ? na(buy[1]) ? 1 : buy[1]+1 : 0
sell= QQEcshort>0 and QQEfshort ? na(sell[1]) ? 1 : sell[1]+1 : 0

// - SERIES VARIABLES END

// - PLOTTING
// Ma's
plot(ma_fast, title="MA Fast", color=olive, linewidth=2, transp=20)
plot(ma_medium, title="MA Medium Fast", color=direction<0?red:green, linewidth=3, transp=0)
plot(ma_slow, title="MA Slow", color=blue, linewidth=2, transp=20)
// QQE crosses
plotshape(QQExlong and buy!=1, title="QQE Cross Over", style=shape.triangleup, location=location.belowbar, text="XQQE", color=blue, transp=20, size=size.tiny)
plotshape(QQExshort and sell!=1, title="QQE Cross Under", style=shape.triangledown, location=location.abovebar, text="XQQE", color=black, transp=20, size=size.tiny)
// Signal crosses zero line
plotshape(QQEzlong and buy!=1 and not QQExlong, title="QQE Zero Cross Over", style=shape.triangleup, location=location.belowbar, text="XZERO", color=aqua, transp=20, size=size.tiny)
plotshape(QQEzshort and sell!=1 and not QQExshort, title="QQE Zero Cross Under", style=shape.triangledown, location=location.abovebar, text="XZERO", color=fuchsia, transp=20, size=size.tiny)

// - PLOTTING END

// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
shunt = 0
c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry(id = "Buy", long = true, when = buy[shunt]==1 )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = direction[shunt]!=direction[shunt+1])// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry(id = "Sell", long = false, when = sell[shunt]==1)
strategy.close(id = "Sell", when = direction[shunt]!=direction[shunt+1])

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

//eof