Strategi Perdagangan Grid Dinamik

Penulis:ChaoZhang, Tarikh: 2023-12-01 14:41:57
Tag:

img

Ringkasan

Strategi perdagangan grid dinamik mengira garis purata bergerak dan trek atas dan bawahnya untuk menetapkan julat perdagangan grid secara dinamik.

Prinsip Strategi

Strategi ini mula-mula mengira garis purata bergerak dari tempoh yang ditakrifkan n dan trek atas dan bawah garis purata bergerak. Trek atas adalah garis purata bergerak * (1 + parameter input std), dan trek bawah adalah garis purata bergerak * (1 - parameter input std). Ini membina zon julat perdagangan yang disesuaikan secara dinamik.

Kemudian di dalam zon julat, kita menentukan m garis grid berjarak yang merata. Apabila harga naik dan memecahkan garis grid, isyarat panjang dikeluarkan di garis grid itu; apabila harga jatuh dan memecahkan garis grid, isyarat penutupan dikeluarkan di garis grid sebelumnya yang sepadan dengan garis grid itu. Melalui operasi terbalik ini, keuntungan boleh dibuat apabila harga turun naik.

Secara khusus, kita menggunakan array bool order_array untuk merakam status perdagangan setiap garisan grid. Apabila garis grid mencetuskan keadaan panjang, keadaan yang sepadan dalam order_array ditetapkan menjadi benar, menunjukkan bahawa garis grid sudah mempunyai kedudukan. Apabila harga jatuh dan memecahkan garis grid, keadaan garis grid sebelumnya dalam order_array ditetapkan menjadi palsu dan isyarat penutupan dikeluarkan.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan purata bergerak untuk membina julat dagangan yang disesuaikan secara dinamik boleh menyesuaikan julat berdasarkan turun naik pasaran untuk menjadikan strategi lebih mudah disesuaikan dengan pasaran.

  2. Reka bentuk grid secara automatik boleh mengambil keuntungan dan menghentikan kerugian untuk mengelakkan pembesaran kerugian yang disebabkan oleh keadaan pasaran yang melampau.

  3. Jumlah grid dan peruntukan modal menggunakan jarak yang sama dan peruntukan yang sama, yang dapat mengawal saiz kedudukan tunggal dan mengurangkan risiko kedudukan tunggal.

  4. Tetapan isyarat panjang dan dekat adalah munasabah untuk berdagang mengikut trend, dan mengambil keuntungan tepat pada masanya dan menghentikan kerugian.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Apabila pasaran lemah untuk jangka panjang dan gagal menembusi garis grid, strategi akan jatuh ke dalam perdagangan berayun tanpa tujuan, dan pertukaran panjang dan pendek boleh menyebabkan hakisan modal dalam akaun.

  2. Parameter yang dipilih std dan bilangan grid mungkin tidak sepenuhnya munasabah, dan perlu ditentukan mengikut analisis jenis perdagangan yang berbeza.

  3. Strategi ini tidak mengambil kira beberapa keadaan pasaran yang melampau, seperti jurang harga, kenaikan atau kejatuhan letupan jangka pendek, dll. Keadaan ini boleh menyebabkan strategi memecahkan pelbagai grid, mengakibatkan kerugian di luar kawalan risiko.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan dalam aspek berikut:

  1. Algoritma pembelajaran mesin boleh diperkenalkan untuk melatih model untuk meramalkan trek atas dan bawah purata bergerak, menjadikan zon perdagangan lebih pintar dan dinamik.

  2. Parameter seperti bilangan grid, nisbah peruntukan modal, saiz kedudukan, dan lain-lain boleh dioptimumkan mengikut ciri-ciri sasaran dagangan yang berbeza menggunakan parameter adaptif.

  3. Perintah bersyarat boleh ditetapkan untuk menetapkan perintah stop-loss terlebih dahulu pada jarak tertentu dari garis grid untuk memainkan peranan stop-loss dan kawalan kerugian sebelumnya dalam keadaan pasaran yang melampau.

  4. Merancang mekanisme pengendalian pengecualian untuk keadaan pasaran yang melampau, seperti meningkatkan saiz kedudukan awal, melangkau grid perantaraan secara langsung untuk hentikan kerugian, dan lain-lain, yang boleh mengatasi situasi seperti jurang harga.

Ringkasan

Strategi perdagangan grid dinamik direka dengan munasabah secara keseluruhan. Ia boleh membina sistem berhenti kerugian mengambil keuntungan automatik dengan grid yang sesuai untuk berdagang varieti dengan turun naik harga yang kerap. Walau bagaimanapun, masih ada risiko pasaran tertentu dalam strategi ini. Parameter dan situasi luar biasa perlu dioptimumkan sebelum strategi menjadi lebih mantap.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)

Lebih lanjut