Strategi ini adalah strategi mengikuti tren berdasarkan rata-rata bergerak adaptif. Ini menggunakan dua rata-rata bergerak DEMA dengan periode yang berbeda untuk menghasilkan sinyal perdagangan. Strategi ini akan secara otomatis menyesuaikan kerangka waktu untuk analisis berdasarkan periode saat ini, memungkinkan pelacakan multi-frame waktu.
Strategi ini menggunakan garis DEMA cepat dan garis DEMA lambat untuk membangun sinyal perdagangan. Garis cepat memiliki periode tf dan garis lambat memiliki periode tf*2. Sinyal beli dihasilkan ketika garis cepat melintasi di atas garis lambat. Sinyal jual dihasilkan ketika garis cepat melintasi di bawah garis lambat. Ini memungkinkan strategi untuk melacak tren jangka menengah hingga panjang. Selain itu, strategi ini juga menggunakan filter rata-rata bergerak ganda Hull untuk mengurangi perdagangan berisik. Sinyal hanya dihasilkan ketika filter Hull menyetujui arah.
Keuntungan terbesar dari strategi ini adalah bahwa ia dapat beradaptasi dengan periode yang berbeda secara otomatis. Ini akan memilih kerangka waktu analisis dari harian ke mingguan berdasarkan periode saat ini. Ini membuat strategi cocok untuk berbagai lingkungan pasar. Selain itu, struktur rata-rata bergerak ganda dapat melacak tren secara efektif, dan filter ganda meningkatkan kualitas sinyal. Akibatnya, strategi ini sangat cocok untuk melacak tren jangka menengah hingga panjang.
Risiko utama dari strategi ini berasal dari pembalikan tren. Ketika pasar transisi dari pasar bull ke pasar bear, garis cepat dan lambat dapat menyeberang tajam ke bawah, menghasilkan kerugian mengambang yang besar. Selain itu, filter garis juga dapat kehilangan beberapa peluang menguntungkan. Jika filter tidak setuju dengan arah harga, sinyal yang menguntungkan akan dilewatkan. Akibatnya, strategi ini terutama menargetkan pasar tren jangka menengah hingga panjang yang stabil.
Strategi dapat dioptimalkan dengan menyesuaikan parameter filter atau menggunakan indikator lain sebagai pengganti. Misalnya, MACD dapat diuji alih-alih HullMA, atau parameter periode HullMA dapat disesuaikan. Kombinasi parameter yang berbeda juga dapat diuji untuk menemukan aturan perdagangan yang lebih cocok. Selain itu, indikator volatilitas juga dapat dimasukkan untuk mengontrol ukuran posisi. Posisi yang lebih kecil dapat diambil ketika volatilitas pasar meningkat.
Sebagai kesimpulan, ini adalah strategi tren yang sangat praktis. Ini dapat secara otomatis menyesuaikan kerangka waktu analisis untuk periode yang berbeda dan cocok untuk perdagangan di horizon waktu yang berbeda. Struktur rata-rata bergerak ganda dapat secara konsisten melacak tren, dan filter juga meningkatkan kualitas sinyal. Secara keseluruhan, ini cocok untuk investor yang mencari pengembalian jangka menengah hingga panjang yang stabil.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // //--------------------------------------------- //* Author - PPSingnal //* http://ppsignal.com //--------------------------------------------- // // strategy (title="PPSignal V4 (Auto Adaptive Times)", shorttitle="PPSignal V4", overlay=true) delayOffset = input(defval = 0, title = "Delay Open/Close MA (Forces Non-Repainting)", minval = 0, step = 1) //---------------------------------------- INICIO PPI ---------------------------------------- // - PARÁMETROS DE ENTRADA // SE DEFINE LA RESOLUCIÓN useRes1 = true setRes1 = true tf = timeframe.period == "60" ? 4 : timeframe.period == "240" ? 4 : timeframe.period == "D" ? 4 : timeframe.period == "W" ?4 : 4 // PRIMER DEMA type = "DEMA" src = close len = tf off = 0 lsma = 0 // SEGUNDA DEMA type2 = "DEMA" src2 = open len2 = tf off2 = 0 lsma2 = 0 // - INPUTS END //---------------------------------------- INICIO FUNCIONES ---------------------------------------- // RETORNA UNA MEDIA MOVIL (TYPE=TIPO / SRC = TIPO DE PRECIO / LEN=LONGITUD / LSMA=0) variant(type, src, len, lsma) => 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 v9 = linreg(src, len, lsma) // Least Squares // 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=="LSMA"?v9 : v1 // SuperSmoother filter // © 2013 John F. Ehlers a1 = exp(-1.414*3.14159 / len) b1 = 2*a1*cos(1.414*3.14159 / len) c2 = b1 c3 = (-a1)*a1 c1 = 1 - c2 - c3 v12 = 0.0 v12 := c1*(src + nz(src[1])) / 2 + c2*nz(v12[1]) + c3*nz(v12[2]) // RETORNA LA RESOLUCIÓN SETEADA Y SINO LA DEFAULT // 3H: 1min - 3min - 5min - 15min // DIARIO: 30 - 45 - 60 // SEMANAL: 120 - 180 - 240 - D reso(exp, use, res) => use ? request.security(syminfo.tickerid, timeframe.period=="1" ? "D" : timeframe.period=="3" ? "D" : timeframe.period=="5" ? "D" : timeframe.period=="15" ? "D" : timeframe.period=="30" ? "D" : timeframe.period=="45" ? "W" : timeframe.period=="60" ? "W" : timeframe.period=="120" ? "W" : timeframe.period=="180" ? "W" : timeframe.period=="240" ? "W" : timeframe.period=="D" ? "W" : "W", exp) : exp //---------------------------------------- FIN FUNCIONES ---------------------------------------- //---------------------------------------- INICIO VARIABLES ---------------------------------------- // DEMAS ma_short = reso(variant(type, src[off], len, lsma), useRes1, setRes1) ma_long = reso(variant(type2, src2[off2], len2, lsma2), useRes1, setRes1) //---------------------------------------- FIN VARIABLES ---------------------------------------- //---------------------------------------- FIN PPI ---------------------------------------- //---------------------------------------- PRIMER FILTRO ---------------------------------------- // Double HullMA scolor = false n=1 n2ma=2*wma(close,round(n/2)) nma=wma(close,n) diff=n2ma-nma sqn=round(sqrt(n)) n2ma1=2*wma(close[1],round(n/2)) nma1=wma(close[1],n) diff1=n2ma1-nma1 sqn1=round(sqrt(n)) n1=wma(diff,sqn) n2=wma(diff1,sqn) //---------------------------------------- FIN PRIMER FILTRO ---------------------------------------- //---------------------------------------- INICIO CONDICIONES ---------------------------------------- // CONDICION CON FILTRO cruce= (ma_short > ma_long) and n1>n2 ? true : ma_short < ma_long ? false : cruce[1] // Condition // FONDO DE COLOR bground = cruce ? white : red bgcolor(bground, transp=90) // BARRAS COLOREADAS barcol = cruce ? yellow : red barcolor(barcol, transp=0) closePlot = plot(ma_short, title = "Zone 1", color = gray, circles = 0, style = circles, transp = 100) openPlot = plot(ma_long, title = "Zone 2", color = green, circles = 0, style = circles, transp = 100) trendState = ma_short > ma_long ? true : ma_short < ma_long ? false : trendState[1] // channel fill closePlotU = plot(trendState ? ma_short : na, transp = 100, editable = false) openPlotU = plot(trendState ? ma_long : na, transp = 100, editable = false) closePlotD = plot(trendState ? na : ma_short, transp = 100, editable = false) openPlotD = plot(trendState ? na : ma_long, transp = 100, editable = false) fill(openPlotU, closePlotU, title = "Up Trend Fill", color = yellow, transp = 70) fill(openPlotD, closePlotD, title = "Down Trend Fill", color = red, transp = 70) //---------------------------------------- FIN CONDICIONES ---------------------------------------- //---------------------------------------- INICIO ESTRATEGIA ---------------------------------------- //CONDICION COMPRA longCond = (ma_short > ma_long) and n1>=n2 //CONDICION VENTA shortCond = (ma_short < ma_long) //ABRO COMPRA A strategy.entry("Bull Trend", strategy.long, when = longCond) //ABRO VENTA A strategy.entry("Bearish Trend", strategy.short, when = shortCond) //CIERRO VENTA A strategy.exit("Exit Short", from_entry = "Bull Trend", when = shortCond) //CIERRO COMPRA A strategy.exit("Exit Long", from_entry = "Bearish Trend", when = longCond) //---------------------------------------- FIN ESTRATEGIA ----------------------------------------