JiaYiBing Tren Kuantitatif Momentum Strategi Dagangan

Penulis:ChaoZhang, Tarikh: 2024-03-08 15:40:05
Tag:

img

Ringkasan

JiaYiBing Quantitative Trend Momentum Trading Strategy adalah strategi perdagangan kuantitatif jangka pendek yang menggabungkan pengesanan trend, penunjuk momentum, dan saluran Bollinger Bands. Strategi ini menggunakan persilangan purata bergerak cepat dan perlahan untuk menentukan arah trend, dan mengesahkan isyarat kemasukan berdasarkan saluran Bollinger Bands dan penunjuk momentum. Strategi ini juga merangkumi langkah kawalan risiko seperti mengambil keuntungan, hentian kerugian, hentian jejak, dan saiz kedudukan.

Prinsip Strategi

Prinsip teras strategi ini adalah untuk menangkap peluang pasaran dengan memanfaatkan trend harga dan kesan momentum. Khususnya, strategi menggunakan dua purata bergerak dengan tempoh yang berbeza (cepat dan perlahan) untuk menentukan arah trend harga. Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, ia menunjukkan trend menaik dan strategi menghasilkan isyarat panjang; sebaliknya, apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan, ia menunjukkan trend menurun dan strategi menghasilkan isyarat pendek.

Untuk mengesahkan lagi trend dan masa kemasukan, strategi ini juga menggabungkan Bollinger Bands dan penunjuk momentum. Bollinger Bands terdiri daripada tiga garis: garis tengah adalah purata bergerak, sementara jalur atas dan bawah adalah sebilangan penyesuaian standard di atas dan di bawah garis tengah. Apabila harga memecahkan di atas Bollinger Band atas, ia menunjukkan momentum menaik yang kuat dan strategi akan pergi lama; apabila harga memecahkan di bawah Bollinger Band bawah, ia menunjukkan momentum menurun yang kuat dan strategi akan pergi pendek.

Di samping itu, strategi ini juga memperkenalkan penunjuk momentum, yang mengukur kelajuan perubahan harga dengan membandingkan harga semasa dengan harga tempoh tertentu yang lalu.

Dari segi saiz kedudukan, strategi ini membolehkan untuk menetapkan saiz kedudukan berdasarkan ekuiti akaun dan keutamaan risiko. Pada masa yang sama, strategi ini juga merangkumi mengambil keuntungan, hentikan kerugian, dan mekanisme hentian penghantaran untuk mengawal pendedahan risiko setiap perdagangan.

Secara keseluruhannya, Strategi Dagangan Momentum Trend Kuantitatif JiaYiBing bertujuan untuk menangkap peluang pasaran trend sambil mengawal risiko dengan ketat melalui pelbagai dimensi seperti penjejakan trend, pengesahan momentum, dan pengurusan risiko, untuk mencapai pulangan pelaburan yang stabil.

Analisis Kelebihan

  1. Pengesanan Trend: Strategi ini menggunakan persilangan purata bergerak cepat dan perlahan untuk menangkap peluang harga tren, yang membolehkannya untuk pergi panjang dalam trend menaik dan pendek dalam trend menurun, menyesuaikan diri dengan keadaan pasaran yang berbeza.

  2. Pengesahan Momentum: Pengenalan penunjuk momentum sebagai pengesahan kedua trend membantu menapis isyarat palsu dan meningkatkan kualiti kemasukan.

  3. Bollinger Bands dibantu membuat keputusan: Bollinger Bands boleh mencerminkan julat turun naik harga, dan pecah Bollinger Bands boleh dilihat sebagai isyarat percepatan trend atau turun naik harga yang tidak normal, menyediakan rujukan untuk masuk.

  4. Pengukuran Posisi: Strategi menggunakan kaedah pengukuran kedudukan berdasarkan peratusan ekuiti akaun dan had maksimum, yang membolehkan kawalan modal yang digunakan dalam setiap perdagangan, menggunakan dana sepenuhnya dan mengelakkan pendedahan risiko yang berlebihan.

  5. Ambil keuntungan dan hentikan kerugian: Set strategi mengambil keuntungan, hentikan kerugian, dan tahap hentikan kerugian, yang dapat melindungi keuntungan apabila harga bergerak ke arah yang dijangkakan, dan secara tegas mengurangkan kerugian apabila harga berbalik, dengan berkesan mengawal kerugian maksimum setiap perdagangan.

  6. Pengoptimuman Multi-Parameter: Strategi ini merangkumi pelbagai parameter yang boleh disesuaikan, seperti tempoh purata bergerak, parameter Bollinger Bands, mengambil keuntungan dan peratusan stop loss, dan lain-lain, yang boleh dioptimumkan untuk meningkatkan kesesuaian dan ketahanan strategi.

Analisis Risiko

  1. Perdagangan kerap: Strategi menghasilkan isyarat kemasukan berdasarkan crossover purata bergerak dan pecah Bollinger Band. Apabila turun naik pasaran tinggi, ia mungkin sering menghasilkan isyarat perdagangan, yang membawa kepada kekerapan perdagangan yang berlebihan dan meningkatkan kos komisen dan seluncur.

  2. Sensitiviti Parameter: Strategi termasuk beberapa parameter, seperti tempoh purata bergerak, tempoh momentum, parameter Bollinger Bands, dll. Pilihan parameter yang berbeza boleh memberi kesan yang signifikan terhadap prestasi strategi. Jika parameter tidak dipilih dengan betul, ia boleh menyebabkan prestasi strategi yang buruk.

  3. Pengiktirafan Trend Lagging: Purata bergerak adalah penunjuk yang tertinggal, terutamanya apabila tempoh purata bergerak adalah panjang, kelajuan mengenal pasti pembalikan trend akan lebih perlahan, dan masa kemasukan terbaik mungkin terlepas.

  4. Risiko Stop Loss: Walaupun strategi menetapkan langkah-langkah stop loss, dalam keadaan pasaran yang melampau (seperti jurang yang cepat), harga boleh terus melintasi tahap stop loss, mengakibatkan kerugian sebenar melebihi jangkaan.

  5. Risiko kedudukan tertumpu: Jika strategi terus menghasilkan isyarat ke arah yang sama dalam tempoh tertentu, ia boleh membawa kepada kepekatan kedudukan yang berlebihan ke satu arah, menghadapi risiko kedudukan yang lebih besar.

  6. Risiko Kecairan: Prestasi strategi dalam backtesting dan perdagangan langsung boleh dipengaruhi oleh kecairan pasaran, terutamanya apabila berurusan dengan dana besar, yang mungkin menghadapi masalah slippage dan jumlah dagangan yang tidak mencukupi.

Arahan pengoptimuman

  1. Memperkenalkan lebih banyak penunjuk teknikal: Berdasarkan purata bergerak semasa, momentum, dan Bollinger Bands, lebih banyak penunjuk teknikal seperti RSI dan MACD boleh diperkenalkan untuk meningkatkan kebolehpercayaan isyarat melalui pengesahan pelbagai penunjuk.

  2. Mengoptimumkan Mekanisme Masuk dan Keluar: Lebih banyak syarat boleh diperkenalkan dalam penghakiman masuk dan keluar, seperti memerlukan jumlah dagangan tertentu sebelum harga pecah, menggunakan penutupan kedudukan bertahap atau mengambil keuntungan untuk keluar, untuk meningkatkan fleksibiliti dan keuntungan strategi.

  3. Penyesuaian Parameter Dinamik: Untuk tempoh purata bergerak, tempoh momentum, parameter Bollinger Bands, dan lain-lain, satu set mekanisme penyesuaian parameter boleh direka untuk menyesuaikan nilai parameter secara dinamik berdasarkan keadaan pasaran yang berbeza dan tahap turun naik, meningkatkan kesesuaian strategi.

  4. Meningkatkan Ukuran Posisi: Berdasarkan ukuran kedudukan semasa, kaedah pengurusan wang yang lebih maju seperti Kriteria Kelly, nisbah tetap, ekuiti dinamik, dan lain-lain boleh diperkenalkan untuk pulangan dan risiko baki yang lebih baik.

  5. Gabungkan dengan Analisis Dasar: Strategi analisis teknikal murni mungkin menghadapi risiko ketidakcekapan atau kegagalan pasaran. Jika beberapa faktor asas, seperti data makroekonomi dan trend industri, dapat digabungkan untuk menapis dan mengesahkan isyarat teknikal, ia boleh meningkatkan prestasi strategi.

  6. Meningkatkan Kesesuaian Pengujian Belakang dan Dagangan Langsung: Prestasi strategi dalam pengujian balik dan perdagangan langsung mungkin berbeza. Adalah perlu untuk memberi tumpuan kepada kualiti pelaksanaan pengujian balik dan perdagangan langsung, termasuk faktor seperti harga pelaksanaan, slippage, dan latensi, untuk memastikan konsistensi prestasi langsung dengan hasil pengujian balik.

Ringkasan

JiaYiBing Quantitative Trend Momentum Trading Strategy adalah strategi perdagangan kuantitatif yang mengintegrasikan pelbagai kaedah analisis teknikal.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


Lebih lanjut