Strategi Perdagangan Grid Dinamik


Tarikh penciptaan: 2023-12-01 14:41:57 Akhirnya diubah suai: 2023-12-01 14:41:57
Salin: 0 Bilangan klik: 1253
1
fokus pada
1619
Pengikut

Strategi Perdagangan Grid Dinamik

Gambaran keseluruhan

Strategi dagangan grid dinamik menetapkan kawasan perdagangan grid secara dinamik dengan mengira purata bergerak dan tren naik dan turunnya. Apabila harga menembusi kawasan grid, isyarat perdagangan dikeluarkan mengikut garis grid yang ditetapkan pada jarak tetap, untuk mendapatkan keuntungan.

Prinsip Strategi

Strategi ini mula-mula mengira purata bergerak bagi tempoh n yang telah ditentukan, dan purata bergerak di atas dan di bawah landasan.(1 + parameter input std), yang di bawah adalah purata bergerak(1 - input parameter std) ◦ Dengan cara ini, anda boleh membina zon perdagangan yang disesuaikan secara dinamik ◦

Kemudian di dalam pita jarak, kita menentukan garisan grid dengan jarak m. Apabila harga naik dan menembusi garisan grid tertentu, ia akan memberi isyarat yang lebih banyak. Apabila harga turun dan menembusi garisan grid tertentu, ia akan memberi isyarat yang lebih rendah pada garisan grid atas yang sesuai.

Khususnya, kita menggunakan array order_array jenis bool untuk merekodkan keadaan perdagangan setiap baris grid. Apabila satu baris grid dicetuskan dengan pelbagai syarat, setkan keadaan yang sesuai dalam order_array sebagai benar, menunjukkan bahawa baris grid telah memegang kedudukan. Apabila harga jatuh menerobos garisan grid, setkan keadaan garisan grid atas yang sesuai dalam order_array sebagai palsu, dan keluarkan isyarat kedudukan kosong.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Kawasan dagangan yang disesuaikan secara dinamik dengan menggunakan purata bergerak boleh disesuaikan dengan pasaran yang tidak menentu, menjadikan strategi lebih sesuai dengan pasaran.

  2. Reka bentuk grid boleh secara automatik menghentikan kerugian dan mencegah kerugian yang disebabkan oleh keadaan yang melampau.

  3. Jumlah grid dan pengagihan dana menggunakan julat dan pengagihan ekuiti yang sama, dapat mengawal saiz kedudukan tunggal dengan baik dan mengurangkan risiko kedudukan tunggal.

  4. Buat banyak dan pasang isyarat simpanan yang munasabah, anda boleh berdagang dengan lancar, berhenti dan hentikan kerugian tepat pada masanya.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Apabila pasaran mengalami kelemahan yang berpanjangan dan tidak dapat menembusi garisan grid, strategi akan terjerumus ke dalam perdagangan goyah tanpa arah, dan pertukaran kosong boleh menyebabkan kehilangan dana akaun.

  2. Parameter std dan bilangan grid yang dipilih mungkin tidak sepenuhnya munasabah, perlu ditentukan berdasarkan analisis varieti dagangan yang berbeza. Jika parameter ditetapkan dengan tidak betul, akan menyebabkan ruang dagangan dan grid terlalu besar atau terlalu kecil, mempengaruhi kesan strategi.

  3. Strategi ini tidak mengambil kira beberapa keadaan yang melampau, seperti harga melompat, kenaikan atau penurunan ledakan garis pendek. Keadaan ini boleh menyebabkan strategi menembusi beberapa grid, menyebabkan kerugian di luar kawalan risiko.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa aspek:

  1. Algoritma pembelajaran mesin boleh diperkenalkan, model latihan meramalkan pergerakan rata-rata naik dan turun, menjadikan ruang dagangan lebih pintar dan dinamik.

  2. Parameter yang boleh dioptimumkan mengikut ciri-ciri tanda dagangan yang berbeza, seperti bilangan grid, nisbah peruntukan dana, dan saiz kedudukan, menggunakan parameter penyesuaian.

  3. Anda boleh menetapkan borang syarat, anda boleh menetapkan borang hentian gantian pada garisan grid pada jarak tertentu, dan anda boleh bertindak sebagai hentian kerugian terlebih dahulu untuk mengawal kerugian dalam keadaan yang melampau.

  4. Mekanisme penanganan yang luar biasa direka untuk keadaan yang melampau, seperti meningkatkan kedudukan pertama yang dibuka, melangkaui grid tengah dengan menghentikan langsung, dan sebagainya, dapat menangani keadaan yang luar biasa seperti harga melompat.

ringkaskan

Strategi perdagangan grid dinamik direka secara keseluruhan, dan boleh menggunakan grid untuk membina sistem stop-loss automatik, sesuai untuk jenis perdagangan yang lebih sering turun naik harga. Tetapi strategi ini juga mempunyai risiko pasaran tertentu, yang memerlukan pengendalian optimum parameter dan keadaan luar biasa, untuk menjadikan strategi lebih stabil.

Kod sumber strategi
/*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)