Strategi perdagangan grid dinamis menghitung garis rata-rata bergerak dan jalur atas dan bawahnya untuk mengatur rentang perdagangan grid secara dinamis.
Strategi ini pertama-tama menghitung garis rata-rata bergerak periode n dan jalur atas dan bawah garis rata-rata bergerak. Jalur atas adalah garis rata-rata bergerak * (1 + parameter input std), dan jalur bawah adalah garis rata-rata bergerak * (1 - parameter input std). Ini membangun zona rentang perdagangan yang disesuaikan secara dinamis.
Kemudian di dalam zona rentang, kita mendefinisikan m garis grid berjarak merata. Ketika harga naik dan menembus garis grid, sinyal panjang dikeluarkan di garis grid itu; ketika harga turun dan menembus garis grid, sinyal penutupan dikeluarkan di garis grid sebelumnya yang sesuai dengan garis grid itu. Melalui operasi terbalik ini, keuntungan dapat dibuat ketika harga turun naik.
Secara khusus, kita menggunakan bool array order_array untuk mencatat status perdagangan setiap garis grid. Ketika garis grid memicu kondisi panjang, keadaan yang sesuai dalam order_array ditetapkan menjadi benar, menunjukkan bahwa garis grid sudah memiliki posisi. Ketika harga turun dan melanggar garis grid, keadaan garis grid sebelumnya dalam order_array ditetapkan menjadi false dan sinyal penutupan dikeluarkan.
Strategi ini memiliki keuntungan berikut:
Menggunakan rata-rata bergerak untuk membangun rentang perdagangan yang disesuaikan secara dinamis dapat menyesuaikan rentang berdasarkan volatilitas pasar untuk membuat strategi lebih mudah beradaptasi dengan pasar.
Desain grid dapat secara otomatis mengambil keuntungan dan menghentikan kerugian untuk mencegah pembesaran kerugian yang disebabkan oleh kondisi pasar yang ekstrim.
Jumlah grid dan alokasi modal mengadopsi jarak yang sama dan alokasi yang sama, yang dapat mengendalikan ukuran posisi tunggal dan mengurangi risiko posisi tunggal.
Pengaturan sinyal panjang dan dekat adalah wajar untuk berdagang di sepanjang tren, dan mengambil keuntungan tepat waktu dan menghentikan kerugian.
Strategi ini juga memiliki beberapa risiko:
Ketika pasar lemah untuk jangka panjang dan gagal menembus garis grid, strategi akan jatuh ke perdagangan osilasi tanpa tujuan, dan bergantian panjang dan pendek dapat menyebabkan erosi modal di akun.
Parameter yang dipilih std dan jumlah grid mungkin tidak sepenuhnya masuk akal, dan perlu ditentukan sesuai dengan analisis berbagai jenis perdagangan.
Strategi ini tidak memperhitungkan beberapa kondisi pasar yang ekstrem, seperti kesenjangan harga, kenaikan atau penurunan eksplosif jangka pendek, dll. Kondisi ini dapat menyebabkan strategi menerobos beberapa jaringan, menghasilkan kerugian di luar kendali risiko.
Strategi ini juga dapat dioptimalkan dalam aspek berikut:
Algoritma pembelajaran mesin dapat diperkenalkan untuk melatih model untuk memprediksi jalur atas dan bawah rata-rata bergerak, membuat zona perdagangan lebih cerdas dan dinamis.
Parameter seperti jumlah grid, rasio alokasi modal, ukuran posisi, dll dapat dioptimalkan sesuai dengan karakteristik target perdagangan yang berbeda menggunakan parameter adaptif.
Perintah bersyarat dapat ditetapkan untuk menetapkan perintah stop-loss sebelumnya pada jarak tertentu dari jalur grid untuk memainkan peran stop-loss sebelumnya dan kehilangan kontrol dalam kondisi pasar yang ekstrim.
Merancang mekanisme penanganan pengecualian untuk kondisi pasar yang ekstrim, seperti meningkatkan ukuran posisi awal, melewatkan grid perantara langsung untuk stop loss, dll, yang dapat mengatasi situasi seperti kesenjangan harga.
Strategi perdagangan grid dinamis dirancang secara rasional secara keseluruhan. Ini dapat membangun sistem stop loss take profit otomatis dengan grid yang cocok untuk perdagangan varietas dengan fluktuasi harga yang sering. Namun, masih ada risiko pasar tertentu dalam strategi ini. Parameter dan situasi luar biasa perlu dioptimalkan sebelum strategi menjadi lebih kuat.
/*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)