Strategi ini menggabungkan indikator saluran harga dan indikator MACD untuk melacak tren dan mengidentifikasi tingkat overbought dan oversold di beberapa kerangka waktu, sehingga membuat keputusan membeli dan menjual.
Indikator saluran harga membangun saluran harga berdasarkan garis EMA harga tertinggi dan terendah untuk menentukan tren ketika harga keluar dari saluran. Indikator MACD menilai momentum bullish dan bearish. Nilai di atas garis nol menunjukkan pasar bull sementara nilai di bawah menunjukkan pasar bear.
Sinyal perdagangan dari strategi ini berasal dari aspek berikut:
Masukkan panjang ketika histogram MACD berbalik merah. Masukkan pendek ketika histogram MACD berbalik hijau.
Masuk short ketika harga mendekati bagian bawah saluran dan MACD berada di bawah garis nol.
Masuk long ketika harga mendekati bagian atas saluran dan MACD berada di atas garis nol.
Masukkan panjang ketika MACD melintasi di atas garis nol. Masukkan pendek ketika MACD melintasi di bawah garis nol.
Keluar dipicu oleh stop loss dan take profit.
Kombinasi indikator mencegah terobosan palsu.
Kombinasi indikator di seluruh kerangka waktu memastikan deteksi tren yang dapat diandalkan.
Penggabungan stop loss dan take profit secara efektif mengendalikan kerugian per perdagangan.
Ruang pengoptimalan terbatas yang mengarah pada overoptimization.
Pengaturan saluran harga yang rendah melewatkan gerakan yang lebih besar.
Stop loss yang ketat menyebabkan kerugian yang lebih besar.
Solusi:
Mengadopsi optimasi berjalan ke depan untuk mencegah overoptimization.
Atur parameter adaptif untuk saluran harga.
Memperkenalkan stop loss berbasis volatilitas untuk penyesuaian jarak stop secara dinamis.
Mengoptimalkan kombinasi parameter MACD.
Mengoptimalkan perhitungan adaptif dari parameter saluran harga.
Tambahkan lebih banyak filter untuk mencegah penyebaran palsu dan meningkatkan efisiensi.
Strategi ini menggabungkan kekuatan saluran harga dan MACD dengan pengaturan parameter yang masuk akal dan ruang optimasi yang besar. Ini berkinerja baik dalam deteksi tren dan identifikasi overbought / oversold. Mekanisme stop loss / take profit mengendalikan setiap kerugian perdagangan. Ke depan, perbaikan dapat dilakukan dengan optimasi parameter, menambahkan filter dan mengoptimalkan mekanisme stop loss.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Sonic R + Barcolor MACD", overlay=true) HiLoLen = input(34, minval=2,title="High Low channel Length") pacL = ema(low,HiLoLen) pacH = ema(high,HiLoLen) // Plot the Price Action Channel (PAC) base on EMA high,low and close// L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0) H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0) fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD hisup= iff(delta>delta[1] and delta>0, 1, iff(delta<delta[1], -1, nz(hisup[1], 0))) hisdown = iff(delta<delta[1] and delta<0, 1, iff(delta>delta[1], -1, nz(hisdown[1], 0))) barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue ) //SR PeriodLookBack = input(34) xHighest = highest(PeriodLookBack) xLowest = lowest(PeriodLookBack) Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0) // Strategy// conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0) gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0) gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL if(gobuy) strategy.entry("Buy",strategy.long) if(gosell) strategy.entry("Sell",strategy.short) //if(Trend==-1 and close<pacL) // strategy.close("Buy") //if(Trend==1 and close>pacH) // strategy.close("Sell") ////////////// TP and SL// SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1) rr= input(defval=0.1,title="Reward/Risk",type=float) useTPandSL = input(defval = false, title = "Use exit order strategy?") Stop = SL Take=SL*rr Q = 100 if(useTPandSL) strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop) strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)