Strategi persilangan QQE cepat berdasarkan penyaringan tren


Tanggal Pembuatan: 2024-01-25 11:34:58 Akhirnya memodifikasi: 2024-01-25 11:34:58
menyalin: 1 Jumlah klik: 1235
1
fokus pada
1617
Pengikut

Strategi persilangan QQE cepat berdasarkan penyaringan tren

Ringkasan

Strategi QQE crossover cepat berdasarkan filter tren adalah strategi perdagangan yang mengikuti tren, yang menggunakan crossover QQE cepat dan filter arah tren menggunakan moving averages. QQE atau perkiraan kuantitatif kualitatif didasarkan pada indeks kekuatan relatif, tetapi menggunakan teknik smoothing sebagai konversi tambahan.

  • Sinyal RSI melintasi garis nol ((XZERO))
  • RSI sinyal lintas cepat RSIatr garis ((XQQE)
  • RSI sinyal keluar dari saluran RSI threshold ((beli/jual)

Sinyal buy/sell dapat disaring secara opsional melalui moving average:

  • Untuk sinyal beli, harga penutupan harus lebih tinggi dari rata-rata bergerak cepat, dan rata-rata bergerak cepat (EMA8) > rata-rata bergerak menengah (EMA20) > rata-rata bergerak lambat (SMA50)
  • Untuk sinyal jual, harga penutupan harus lebih rendah dari rata-rata bergerak cepat, dan rata-rata bergerak cepat (EMA8) < rata-rata bergerak cepat (EMA20) < rata-rata bergerak lambat (SMA50)

dan/atau filter arah tren:

  • Untuk sinyal beli, harga penutupan harus lebih tinggi dari rata-rata bergerak lambat (SMA50) dan rata-rata bergerak ke arah (EMA20) harus hijau.
  • Untuk sinyal jual, harga penutupan harus berada di bawah rata-rata bergerak lambat (SMA50) dan rata-rata bergerak ke arah (EMA20) harus merah.

XZERO dan XQQE tidak termasuk dalam filter, mereka digunakan untuk mengindikasikan menunggu sinyal beli/jual, khususnya XZERO.

Strategi ini seharusnya dapat bekerja pada setiap pasangan mata uang dan pada sebagian besar frame waktu.

Prinsip Strategi

Gagasan inti dari strategi ini adalah untuk mengambil arah tren dengan menggunakan crossover arah dari indikator QQE cepat sebagai sinyal perdagangan dan memfilter sinyal perdagangan kebisingan melalui kombinasi rata-rata bergerak.

Secara khusus, strategi ini menggunakan indikator dan sinyal berikut:

Indikator QQE cepat: Ini adalah indikator yang didasarkan pada RSI, dengan pengolahan halus tambahan yang membuatnya lebih sensitif dan cepat. Indikator terdiri dari tiga garis: rel tengah adalah rata-rata bergerak indeks RSI, rel atas adalah rel tengah + ATR cepat * satu koefisien, rel bawah adalah rel tengah - ATR cepat * satu koefisien.

Garis nol bersilang: Ketika RSI menghasilkan sinyal ketika garis tengah melintasi garis nol, melintasi ke atas adalah sinyal beli, melintasi ke bawah adalah sinyal jual. Sinyal-sinyal ini menandakan perubahan tren.

Terobosan: Ketika RSI berada di orbit tengah dan memasuki saluran terendah yang ditetapkan, sinyal dihasilkan, menembus saluran atas adalah sinyal jual, menembus saluran bawah adalah sinyal beli. Ini adalah sinyal tren yang lebih kuat.

Kombinasi Moving Average: menggunakan cepat dan lambat tiga kelompok rata-rata bergerak, garis cepat adalah 8 siklus, garis kecepatan rata-rata adalah 20 siklus, garis lambat adalah 50 siklus. Ketika tiga garis disusun sebagai: cepat> tengah> lambat untuk uptrend, ketika cepat < tengah < lambat untuk downtrend. Kombinasi digunakan untuk menentukan arah tren keseluruhan.

Filter arah tren: harga penutupan di atas rata-rata bergerak lambat dan rata-rata bergerak cepat ke atas ((harga tertinggi dalam siklus> harga terendah) hanya menghasilkan sinyal beli; harga penutupan di bawah rata-rata bergerak lambat dan rata-rata bergerak cepat ke bawah menghasilkan sinyal jual. Ini dapat menyaring beberapa sinyal palsu yang terbalik.

Dengan kombinasi penggunaan sinyal silang dari indikator QQE cepat dan penyaringan tren dari moving averages, titik balik jangka pendek dan menengah dapat ditangkap dalam arah tren dari kerangka waktu yang lebih besar, membentuk sistem perdagangan yang lebih lengkap. Pada saat yang sama, parameter indikator diatur dengan lebih sensitif dan dapat menangkap titik balik tren sedini mungkin.

Secara keseluruhan, ini adalah strategi untuk melacak tren jangka menengah dan panjang, menangkap momen reversal buy/sell dalam jangka pendek dengan indikator cepat, dan menggunakan filter moving average untuk mengurangi risiko reversal dan memaksimalkan keuntungan.

Keunggulan Strategis

  • Dengan menggunakan indikator sensitif cepat QQE, dapat menangkap sinyal reversal dengan cepat
  • Menggunakan Moving Average Multiple Set untuk menentukan arah siklus besar, menghindari perdagangan terbalik
  • Mengandung berbagai sinyal silang yang dapat dikombinasikan untuk meningkatkan peluang keuntungan
  • Parameter dapat disesuaikan dan dapat dioptimalkan untuk varietas dan siklus yang berbeda
  • Menggunakan indikator sendiri untuk sinyal penembusan saluran, tidak ada saluran independen yang dipetakan, menghindari ketergantungan parameter
  • Hal ini sangat baik untuk menangkap reversal jangka pendek di bawah tren besar.
  • Konsep sederhana, jelas, mudah dipahami dan diterapkan

Risiko Strategis

Strategi ini juga memiliki beberapa potensi risiko:

  • Indikator cepat mudah menghasilkan sinyal palsu, rata-rata bergerak tidak dapat disaring sepenuhnya, ada risiko untuk melacak arah yang salah
  • Pada saat siklus besar berbalik, sinyal perdagangan terbalik yang rentan terhadap risiko
  • Tidak mempertimbangkan faktor pengelolaan dana, ada kemungkinan kerugian akibat transaksi yang berlebihan
  • Tidak ada pengaturan stop loss, risiko kerugian meningkat
  • Risiko pencocokan data retrospektif, validasi efek langsung

Cara mengatasi dan mengatasinya meliputi:

  • Menyesuaikan parameter moving average dengan lebih banyak periode untuk menilai tren
  • Menambahkan filter kombinasi indikator lainnya, seperti MACD, bias, dll.
  • Tergabung dalam strategi stop loss untuk mengendalikan kerugian tunggal
  • Verifikasi di lapangan, parameter optimasi

Arah optimasi strategi

Strategi ini masih bisa dioptimalkan lebih jauh:

  1. Optimalkan parameter garis cepat dan lambat dari indikator QQE untuk menemukan kombinasi parameter yang optimal
  2. Uji coba lebih banyak kombinasi moving average untuk mencari filter yang optimal
  3. Menambahkan kombinasi indikator lain, seperti MACD dan sinyal penyaringan tambahan
  4. Menerapkan strategi pengelolaan dana, mengoptimalkan pengelolaan posisi
  5. Menetapkan strategi stop loss dan mengendalikan risiko kerugian tunggal
  6. Optimalisasi untuk parameter varietas yang berbeda
  7. Pertimbangkan tren dalam siklus yang lebih tinggi, dan hindari tertipu oleh pembalikan jangka pendek

Dengan optimasi parameter, penggabungan lebih banyak indikator, dan didukung dengan sarana manajemen modal dan risiko yang praktis, diharapkan dapat meningkatkan kinerja strategi di lapangan.

Meringkaskan

Secara keseluruhan, strategi crossover QQE cepat berdasarkan filter tren adalah pilihan yang sangat layak untuk dipertimbangkan. Keuntungannya adalah bahwa dengan cepat menangkap peluang perdagangan yang berbalik, dan dengan menggunakan beberapa kelompok rata-rata bergerak untuk menilai tren besar, menghindari kesalahan perdagangan yang berbalik. Dengan mengoptimalkan parameter indikator dan kondisi penyaringan, dan bekerja sama dengan manajemen dana yang ketat, strategi ini dapat memperoleh laba atas investasi yang relatif stabil.

Tentu saja, risiko juga tidak dapat diabaikan, pengujian di lapangan dan penyesuaian pengoptimalan terus-menerus diperlukan untuk memastikan kepraktisan dan keandalan strategi. Secara keseluruhan, layak bagi investor untuk belajar dan mengikuti praktik dalam jangka panjang.

Kode Sumber Strategi
/*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