Perbezaan Harga dan Trend Berikutan Strategi Dagangan

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

img

Ringkasan

Strategi ini menggunakan penunjuk CCI dan penunjuk momentum digabungkan dengan penunjuk RSI untuk mengenal pasti trend pasaran dan memasuki apabila jurang muncul di zon overbought / oversold. Ia juga menggunakan Bollinger Bands untuk mengenali trend dan julat pembalikan purata. Strategi ini dapat mengenal pasti penembusan dan penarikan balik dengan berkesan, masuk awal pada permulaan trend, dan menyesuaikan diri dengan produk yang berbeza dengan menyesuaikan parameter.

Logika Strategi

Pertama, strategi menentukan isyarat panjang dan pendek dengan penunjuk CCI atau penunjuk momentum yang melintasi di atas / di bawah garis 0. juga ia memerlukan RSI berada di zon overbought / oversold, iaitu di atas 65 untuk overbought dan di bawah 35 untuk oversold, untuk mengelakkan isyarat palsu.

Di samping itu, strategi boleh memilih untuk menentukan perbezaan bullish/bearish RSI untuk memastikan isyarat yang lebih boleh dipercayai.

Apabila isyarat panjang CCI atau momentum dipicu, dan RSI berada di zon oversold, strategi akan memeriksa sama ada tinggi dan rendah sebelumnya berada di atas garis purata Bollinger Band. Jika ya, isyarat panjang dihasilkan. Sebaliknya, apabila isyarat pendek dipicu dan tinggi rendah sebelumnya berada di bawah garis purata, isyarat pendek dihasilkan.

Oleh itu, strategi ini menggunakan kedua-dua trend dan penunjuk goyangan, untuk masuk ke trend awal dan mengelakkan pecah palsu dengan julat pembalikan purata.

Analisis Kelebihan

  1. Menggabungkan trend dan penunjuk goyangan boleh memasuki trend lebih awal dan mengelakkan kedudukan yang tidak perlu di pasaran julat.

  2. Menggunakan Bollinger Band bermaksud dengan jurang harga menapis pecah palsu dengan berkesan.

  3. Memeriksa RSI sejarah mengelakkan penjanaan isyarat perdagangan yang salah.

  4. Perdagangan automatik sepenuhnya tanpa gangguan manual, sesuai untuk perdagangan algoritma.

  5. Penyesuaian parameter yang fleksibel menyesuaikan diri dengan produk perdagangan yang berbeza.

  6. Hentikan kerugian dan ambil keuntungan kawalan risiko dengan berkesan.

Analisis Risiko

  1. Parameter Bollinger Band yang tidak betul boleh menyebabkan pengenalan pembalikan purata yang tidak sah.

  2. Parameter penunjuk yang salah boleh menghasilkan terlalu banyak isyarat palsu.

  3. Kegagalan keluar memerlukan stop loss tepat pada masanya apabila harga menarik kembali ke purata.

  4. Kecairan yang lemah boleh menyebabkan perdagangan breakout yang tidak berkesan.

  5. Memastikan data sejarah yang mencukupi untuk mengelakkan pemasangan lengkung yang buruk.

  6. Berhati-hati dengan sesi perdagangan untuk mengelakkan kegagalan palsu.

Arahan Penambahbaikan

  1. Mengoptimumkan parameter Bollinger Bands untuk julat pembalikan purata yang lebih stabil.

  2. Uji parameter pada produk yang berbeza untuk pengoptimuman yang lebih baik.

  3. Tambah saiz kedudukan untuk mengelakkan kedudukan tunggal yang terlalu besar.

  4. Tambah penapis sesi dagangan untuk berdagang terutamanya pada jam aktif.

  5. Menggabungkan model pembelajaran mesin untuk menjana isyarat yang lebih pintar.

  6. Mengintegrasikan lebih banyak sumber data untuk menentukan trend keseluruhan pasaran.

  7. Tambah lebih banyak penunjuk untuk membentuk ensemble penunjuk yang kukuh.

Kesimpulan

Strategi ini mengintegrasikan penunjuk trend dan osilasi untuk menangkap trend lebih awal. Dengan Bollinger Band mean dan jurang harga ia mengelakkan pecah palsu dengan berkesan. Parameter fleksibel menyesuaikan diri dengan produk yang berbeza dengan hasil backtest yang hebat. Langkah seterusnya adalah untuk mengoptimumkan parameter dan ensemble model untuk lebih kukuh, dan mencapai pulangan 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 lanjut