
Strategi perdagangan grid dinamis dengan menghitung rata-rata bergerak dan tren naik dan turunnya, secara dinamis mengatur area perdagangan grid. Ketika harga menembus area grid, sinyal perdagangan dikirimkan sesuai dengan garis grid yang ditetapkan dengan interval tetap, untuk menghasilkan keuntungan.
Strategi ini pertama-tama menghitung rata-rata bergerak selama periode yang ditentukan n, dan rata-rata bergerak naik ke bawah.(1 + parameter masukan std), yang di bawahnya adalah rata-rata bergerak(1 - input parameter std) 。 Dengan demikian, dapat dibangun zona zona transaksi yang disesuaikan secara dinamis 。
Kemudian di dalam band interval, kita mendefinisikan garis grid dengan jarak m garis. Ketika harga naik dan menerobos garis grid tertentu, sinyal multi-digital di garis grid ini dikirim; Ketika harga turun dan menerobos garis grid tertentu, sinyal posisi kosong dikirim di garis grid atas yang sesuai dengan garis grid. Dengan cara ini, Anda dapat mengambil keuntungan dari pergerakan harga.
Secara khusus, kita menggunakan array order_array jenis bool untuk mencatat status transaksi setiap baris grid. Ketika salah satu baris grid dipicu oleh beberapa kondisi, setelan status yang sesuai dalam order_array sebagai true, menunjukkan bahwa baris grid telah memegang posisi. Ketika harga turun menerobos garis grid, setelan status baris grid atas yang sesuai dalam order_array sebagai false, mengirimkan sinyal posisi kosong.
Strategi ini memiliki beberapa keuntungan:
Dengan menggunakan Moving Average untuk membangun area perdagangan yang disesuaikan secara dinamis, strategi dapat disesuaikan dengan volatilitas pasar, sehingga lebih sesuai dengan pasar.
Desain grid dapat secara otomatis melakukan stop loss, mencegah kerugian yang disebabkan oleh situasi ekstrem.
Jumlah grid dan alokasi dana menggunakan alokasi rata-rata dan rata-rata, yang dapat sangat baik untuk mengontrol ukuran posisi tunggal dan mengurangi risiko posisi tunggal.
Sinyal-sinyal yang digunakan untuk melakukan perdagangan lebih aman dan rasional, dapat bertransaksi dengan baik, dan dapat menghentikan atau menghentikan kerugian tepat waktu.
Strategi ini juga memiliki beberapa risiko:
Ketika pasar mengalami kelemahan yang berkepanjangan dan tidak dapat menembus garis grid, strategi akan terjebak dalam perdagangan bergoyang tanpa arah, dan pertukaran kosong dapat menyebabkan hilangnya dana akun.
Parameter std dan jumlah grid yang dipilih mungkin tidak sepenuhnya masuk akal, perlu ditentukan berdasarkan analisis varietas perdagangan yang berbeda. Jika parameter yang ditetapkan tidak tepat, akan menyebabkan area perdagangan dan grid terlalu besar atau terlalu kecil, mempengaruhi efektivitas strategi.
Strategi ini tidak mempertimbangkan beberapa situasi ekstrem seperti harga melompat, naik atau turun dengan ledakan garis pendek. Situasi ini dapat menyebabkan strategi menerobos beberapa grid dan menyebabkan kerugian di luar kendali risiko.
Strategi ini juga dapat dioptimalkan dalam beberapa hal:
Algoritma pembelajaran mesin dapat diperkenalkan, model pelatihan memprediksi naik turunnya rata-rata bergerak, membuat area perdagangan lebih cerdas dan dinamis.
Parameter yang dapat dioptimalkan sesuai dengan karakteristik berbagai indikator perdagangan, seperti jumlah grid, rasio alokasi dana, ukuran posisi, dan lain-lain, menggunakan parameter adaptif.
Anda dapat mengatur kondisional, Anda dapat mengatur cadangan stop loss pada jarak tertentu dari grid line, Anda dapat memainkan peran stop loss di muka, mengendalikan kerugian dalam situasi yang ekstrim.
Mengembangkan mekanisme penanganan yang luar biasa untuk situasi yang ekstrim, seperti meningkatkan posisi pertama yang dibuka, melewati stop loss langsung dari jaringan tengah, dan sebagainya, dapat menangani situasi yang luar biasa seperti harga yang melonjak.
Strategi perdagangan grid dinamis secara keseluruhan dirancang dengan baik, dapat menggunakan grid untuk membangun sistem stop-loss otomatis, cocok untuk jenis perdagangan yang lebih sering mengalami fluktuasi harga. Namun, strategi ini juga memiliki risiko pasar tertentu, yang memerlukan pengolahan parameter dan keadaan luar biasa yang dioptimalkan untuk membuat strategi lebih kokoh.
/*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)