Strategi kuantitatif pelarasan kedudukan dinamik grid penjejakan

TTM EMA GRID DCA ATR SMA
Tarikh penciptaan: 2024-12-12 11:19:17 Akhirnya diubah suai: 2024-12-12 11:19:17
Salin: 0 Bilangan klik: 641
1
fokus pada
1617
Pengikut

Strategi kuantitatif pelarasan kedudukan dinamik grid penjejakan

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan grid dinamik berdasarkan indikator TTM untuk menentukan arah trend pasaran dengan mengira purata bergerak indeks pada titik tinggi dan rendah (EMA) dan mengerahkan sistem perdagangan grid di sekitar harga rujukan yang dikemas kini secara dinamik. Arah grid dan tahap harga akan disesuaikan secara dinamik mengikut trend, dan perdagangan akan dijalankan apabila harga melintasi tahap grid yang telah ditentukan, dengan risiko setiap perdagangan untuk mendapatkan peratusan tetap keuntungan hak akaun.

Prinsip Strategi

Logik utama strategi ini adalah pengiraan keadaan TTM, yang dilaksanakan melalui langkah-langkah berikut:

  1. Berdasarkan parameter ttmPeriod, dua EMA dikira: EMA rendah (lowMA) dan EMA tinggi (highMA)
  2. Dua tahap nilai had ditakrifkan antara MA tinggi dan MA rendah:
    • lowThird: bahagian bawah 13 kedudukan
    • highThird: kedudukan 23 bawah
  3. TTM ditentukan berdasarkan kedudukan harga penutupan berbanding nilai-nilai terendah ini:
    • Apabila harga penutupan lebih tinggi daripada HighThird, kembali ke 1 (trend naik)
    • Apabila harga penutupan berada di bawah lowThird, kembali ke 0 (trend menurun)
    • Apabila harga penutupan berada di antara lowThird dan highThird, kembali ke -1 (keadaan neutral)

Sistem perdagangan grid akan menyesuaikan diri secara dinamik mengikut keadaan TTM:

  1. Mengemas kini harga dan arah grid rujukan apabila status TTM berubah
  2. Tahap harga jual beli berdasarkan arah dan jarak grid
  3. Melakukan operasi beli atau jual yang sesuai apabila harga menembusi tahap grid

Kelebihan Strategik

  1. Kebolehan beradaptasi secara dinamik: Strategi dapat menyesuaikan arah grid dan paras harga secara dinamik mengikut trend pasaran, meningkatkan kebolehan beradaptasi dan keuntungan strategi
  2. Kawalan risiko yang sempurna: menggunakan peratusan tetap untuk pengurusan kedudukan, mengawal risiko setiap perdagangan dengan berkesan
  3. Parameter boleh disesuaikan: parameter utama seperti kitaran TTM, tahap grid dan jarak boleh dioptimumkan mengikut keadaan pasaran yang berbeza
  4. Mekanisme pelaksanaan jelas: isyarat dagangan jelas, logik pelaksanaan mudah dan intuitif, mudah untuk pengesanan dan operasi dalam talian

Risiko Strategik

  1. Penangguhan penghakiman trend: Indikator TTM berasaskan EMA mempunyai keterlambatan tertentu, yang boleh menyebabkan penangguhan isyarat pada titik perubahan trend
  2. Risiko pasaran yang bergolak: Dalam pasaran yang bergolak, perubahan arah grid yang kerap boleh menyebabkan perdagangan yang berlebihan dan kehilangan yuran
  3. Tekanan pengurusan dana: Keperluan dana yang lebih besar untuk menjalankan pelbagai rangkaian pada masa yang sama, yang mungkin mempengaruhi kebolehan strategi
  4. Kesan slippage: Perdagangan grid frekuensi tinggi mungkin menghadapi slippage yang lebih besar apabila kurang kecairan, yang mempengaruhi prestasi strategi

Arah pengoptimuman strategi

  1. Pengkajian Trend Optimization:
    • Memperkenalkan analisis kitaran masa berbilang untuk meningkatkan ketepatan trend
    • Pengesahan trend dalam kombinasi dengan penunjuk teknikal lain seperti RSI, MACD dan sebagainya
  2. Pengoptimuman parameter grid:
    • Jarak grid disesuaikan secara dinamik mengikut kadar turun naik
    • Memperkenalkan mekanisme penyesuaian tahap adaptasi grid
  3. Pengurusan wang yang lebih baik:
    • Mempunyai peruntukan kedudukan yang dinamik
    • Peningkatan mekanisme harga seimbang risiko
  4. Mekanisme pelaksanaan yang baik:
    • Peningkatan mekanisme penghentian dan penangguhan
    • Optimumkan masa pelaksanaan pesanan

ringkaskan

Strategi ini mewujudkan sistem perdagangan yang beradaptasi dan terkawal risiko dengan menggabungkan penilaian trend TTM dengan perdagangan grid dinamik. Dengan menyesuaikan arah grid dan tahap harga secara dinamik, strategi ini dapat menyesuaikan diri dengan lebih baik dengan keadaan pasaran yang berbeza. Walaupun terdapat beberapa risiko yang wujud, strategi ini mempunyai nilai dan potensi pembangunan yang baik dengan pengaturan parameter yang munasabah dan langkah-langkah pengoptimuman.

Kod sumber strategi
/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)