Kesenjangan Harga dan Tren Mengikuti Strategi Trading

Penulis:ChaoZhang, Tanggal: 2023-10-25 18:02:11
Tag:

img

Gambaran umum

Strategi ini menggunakan indikator CCI dan indikator momentum dikombinasikan dengan indikator RSI untuk mengidentifikasi tren pasar dan masuk ketika gap muncul di zona overbought/oversold.

Logika Strategi

Pertama, strategi menentukan sinyal panjang dan pendek dengan indikator CCI atau indikator momentum yang melintasi di atas/di bawah garis 0. juga mengharuskan RSI berada di zona overbought/oversold, yaitu di atas 65 untuk overbought dan di bawah 35 untuk oversold, untuk menghindari sinyal palsu.

Selain itu, strategi dapat memilih untuk menentukan divergensi bullish/bearish RSI untuk memastikan sinyal yang lebih dapat diandalkan.

Ketika CCI atau momentum sinyal panjang memicu, dan RSI berada di zona oversold, strategi akan memeriksa apakah sebelumnya tinggi dan rendah keduanya berada di atas garis rata-rata Bollinger Band. Jika demikian, sinyal panjang dihasilkan. Sebaliknya, ketika sinyal pendek memicu dan sebelumnya tinggi rendah berada di bawah garis rata-rata, sinyal pendek dihasilkan.

Dengan demikian, strategi ini memanfaatkan indikator tren dan osilasi, untuk masuk ke tren lebih awal dan menghindari pecah palsu dengan rentang reversi rata-rata.

Analisis Keuntungan

  1. Menggabungkan indikator tren dan osilasi dapat memasuki tren lebih awal dan menghindari posisi yang tidak perlu di pasar kisaran.

  2. Menggunakan rata-rata Bollinger Band dengan kesenjangan harga menyaring breakout palsu secara efektif.

  3. Memeriksa RSI historis menghindari menghasilkan sinyal perdagangan yang salah.

  4. Perdagangan sepenuhnya otomatis tanpa gangguan manual, cocok untuk perdagangan algoritma.

  5. Penyesuaian parameter yang fleksibel menyesuaikan dengan produk perdagangan yang berbeda.

  6. Hentikan kerugian dan mengambil keuntungan kendali risiko secara efektif.

Analisis Risiko

  1. Parameter Bollinger Band yang tidak tepat dapat menyebabkan identifikasi reversi rata-rata yang tidak valid.

  2. Parameter indikator yang salah dapat menghasilkan terlalu banyak sinyal palsu.

  3. Kegagalan breakout membutuhkan stop loss tepat waktu ketika harga menarik kembali ke rata-rata.

  4. likuiditas yang buruk dapat menyebabkan perdagangan breakout yang tidak efektif.

  5. Memastikan data historis yang cukup untuk menghindari penyesuaian kurva yang buruk.

  6. Perhatikan sesi trading untuk menghindari breakout palsu.

Arah Peningkatan

  1. Mengoptimalkan parameter Bollinger Bands untuk rentang reversi rata-rata yang lebih stabil.

  2. Uji parameter pada produk yang berbeda untuk optimasi yang lebih baik.

  3. Tambahkan ukuran posisi untuk menghindari posisi tunggal yang terlalu besar.

  4. Tambahkan filter sesi perdagangan untuk berdagang terutama pada jam aktif.

  5. Menggabungkan model pembelajaran mesin untuk menghasilkan sinyal yang lebih cerdas.

  6. Mengintegrasikan lebih banyak sumber data untuk menentukan tren pasar secara keseluruhan.

  7. Tambahkan lebih banyak indikator untuk membentuk ansambel indikator yang kuat.

Kesimpulan

Strategi ini mengintegrasikan indikator tren dan osilasi untuk menangkap tren lebih awal. Dengan rata-rata Bollinger Band dan kesenjangan harga, hal ini menghindari kegagalan palsu secara efektif. Parameter fleksibel beradaptasi dengan produk yang berbeda dengan hasil backtest yang bagus. Langkah selanjutnya adalah mengoptimalkan parameter dan ensemble model untuk lebih kuat, dan mencapai hasil yang berlebihan yang konsisten dalam jangka panjang.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true)

// Input settings
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)
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, 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, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    strategy.entry("Buy", strategy.long)
if (shortEntryCondition)
    strategy.entry("Sell", strategy.short)

// 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 banyak