Strategi Penembusan Berbalik

Penulis:ChaoZhang, Tarikh: 2023-12-20 14:48:57
Tag:

img

Ringkasan

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.

Prinsip Strategi

Logik teras strategi ini adalah untuk mengambil kedudukan pendek atau panjang yang sesuai apabila harga berbalik dari zon overbought atau oversold.

  1. Penunjuk CCI atau penunjuk momentum mengeluarkan isyarat silang emas untuk menentukan status overbought atau oversold.

  2. Indikator RSI menilai sama ada ia berada di zon overbought atau oversold.

  3. Gunakan Bollinger Bands rel atas dan bawah untuk menentukan sama ada harga menyimpang dari julat normal. Harga boleh berbalik apabila kembali ke julat normal.

  4. 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.

Analisis Kelebihan

Kelebihan terbesar strategi ini ialah ia menggabungkan beberapa penunjuk untuk menentukan peluang pembalikan dengan kadar kemenangan yang agak tinggi.

  1. Kebolehpercayaan lebih tinggi dengan menggunakan pelbagai faktor.

  2. Pembalikan trend mempunyai kebarangkalian menang yang lebih besar.

  3. Mengesan perbezaan mengelakkan mengejar pecah palsu dan mengurangkan risiko sistemik.

  4. Mekanisme stop loss mengawal risiko. boleh meminimumkan kerugian tiket tunggal sebanyak mungkin.

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Kesalahan penilaian pada titik masa pembalikan. Stop loss boleh dicetuskan. Memperluas julat stop loss dengan sewajarnya.

  2. Parameter Bollinger Bands ditetapkan dengan tidak betul, mengambil tindakan harga normal sebagai tidak normal. Parameter harus memenuhi turun naik pasaran.

  3. Jumlah dagangan boleh menjadi agak tinggi. meluaskan CCI dan lain-lain penilaian julat dengan betul untuk mengurangkan kekerapan dagangan.

  4. Menghakimi jika parameter sesuai dengan data sejarah.

Pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Gunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik. Elakkan kesilapan empirikal buatan.

  2. Meningkatkan indeks shale, indeks amplitudo dan lain-lain untuk menentukan kekuatan overbought & oversold.

  3. Tambah penunjuk jumlah dagangan untuk menentukan kebolehpercayaan pembalikan, contohnya jumlah, kepentingan terbuka dll.

  4. Menggabungkan data blockchain untuk mengukur sentimen pasaran.

  5. Memperkenalkan mekanisme stop loss adaptif berdasarkan turun naik pasaran.

Ringkasan

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)


Lebih lanjut