Strategi Penembusan Rata-rata Berbalik adalah strategi pembalikan trend pelbagai faktor. Ia menggabungkan purata bergerak, Bollinger Bands, CCI, RSI dan penunjuk teknikal lain untuk menangkap peluang pembalikan harga dari kawasan overbought dan oversold. Strategi ini juga menggabungkan analisis perbezaan biasa untuk mengesan ketidakselarasan antara trend semasa dan sebelumnya, sehingga mengelakkan pecah palsu.
Logik teras strategi ini adalah untuk mengambil kedudukan pendek atau panjang yang sesuai apabila harga berbalik dari zon overbought atau oversold.
Penunjuk CCI atau penunjuk momentum mengeluarkan isyarat silang emas untuk menentukan status overbought atau oversold.
Indikator RSI menilai sama ada ia berada di zon overbought atau oversold.
Gunakan Bollinger Bands rel atas dan bawah untuk menentukan sama ada harga menyimpang dari julat normal. Harga boleh berbalik apabila kembali ke julat normal.
Mengesan perbezaan biasa penunjuk RSI untuk mengelakkan mengejar pecah palsu.
Apabila syarat-syarat di atas dipenuhi, strategi akan mengambil arah masuk terbalik dan menetapkan stop loss untuk mengawal risiko.
Kelebihan terbesar strategi ini ialah ia menggabungkan beberapa penunjuk untuk menentukan peluang pembalikan dengan kadar kemenangan yang agak tinggi.
Kebolehpercayaan lebih tinggi dengan menggunakan pelbagai faktor.
Pembalikan trend mempunyai kebarangkalian menang yang lebih besar.
Mengesan perbezaan mengelakkan mengejar pecah palsu dan mengurangkan risiko sistemik.
Mekanisme stop loss mengawal risiko. boleh meminimumkan kerugian tiket tunggal sebanyak mungkin.
Terdapat juga beberapa risiko dengan strategi ini:
Kesalahan penilaian pada titik masa pembalikan. Stop loss boleh dicetuskan. Memperluas julat stop loss dengan sewajarnya.
Parameter Bollinger Bands ditetapkan dengan tidak betul, mengambil tindakan harga normal sebagai tidak normal. Parameter harus memenuhi turun naik pasaran.
Jumlah dagangan boleh menjadi agak tinggi. meluaskan CCI dan lain-lain penilaian julat dengan betul untuk mengurangkan kekerapan dagangan.
Menghakimi jika parameter sesuai dengan data sejarah.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Gunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik. Elakkan kesilapan empirikal buatan.
Meningkatkan indeks shale, indeks amplitudo dan lain-lain untuk menentukan kekuatan overbought & oversold.
Tambah penunjuk jumlah dagangan untuk menentukan kebolehpercayaan pembalikan, contohnya jumlah, kepentingan terbuka dll.
Menggabungkan data blockchain untuk mengukur sentimen pasaran.
Memperkenalkan mekanisme stop loss adaptif berdasarkan turun naik pasaran.
Strategi kejayaan purata terbalik mengintegrasikan pelbagai penunjuk untuk menentukan perdagangan pembalikan. Dengan kawalan risiko yang betul, ia mempunyai kadar kemenangan yang agak besar. Strategi ini praktikal dengan ruang untuk pengoptimuman lanjut. Dengan penyesuaian parameter yang betul, ia harus menghasilkan hasil yang agak ideal.
/*backtest start: 2023-12-12 00:00:00 end: 2023-12-19 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='BroTheJo Strategy', shorttitle='BTJ INV', overlay=true) // Input settings stopLossInPips = input.int(10, minval=0, title='Stop Loss (in Pips)') ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum']) ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length') useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence') rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level') rsiOversold = input.int(35, minval=1, title='RSI Oversold Level') rsiLength = input.int(14, minval=1, title='RSI Length') plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart') emaPeriod = input(200, title='Lookback Period (EMA)') bandMultiplier = input.float(1.6, title='Outer Bands Multiplier') // CCI and Momentum calculation momLength = ccimomCross == 'Momentum' ? ccimomLength : 10 mom = close - close[momLength] cci = ta.cci(close, ccimomLength) ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0) ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci) // RSI calculation src = close up = ta.rma(math.max(ta.change(src), 0), rsiLength) down = ta.rma(-math.min(ta.change(src), 0), rsiLength) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought // Regular Divergence Conditions bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2] bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2] // Mean Reversion Indicator meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na // Entry Conditions prevHigh = ta.highest(high, 1) prevLow = ta.lowest(low, 1) shortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion) longEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion) // Plotting oldShortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) oldLongEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Strategy logic if (longEntryCondition) stopLoss = close - stopLossInPips strategy.entry("Buy", strategy.long) strategy.exit("exit", "Buy", stop=stopLoss) if (shortEntryCondition) stopLoss = close + stopLossInPips strategy.entry("Sell", strategy.short) strategy.exit("exit", "Sell", stop=stopLoss) // Close all open positions when outside of bands closeAll = (high >= upperBand) or (low <= lowerBand) if (closeAll) strategy.close_all("Take Profit/Cut Loss") // Plotting plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1) plot(meanReversion, title='Mean', color=color.gray, linewidth=1) plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)