Strategi Grid Dinamis Adaptif Long/Short
Gambaran Umum
Ini adalah strategi trading grid adaptif dinamis long-short yang ditulis dalam Pine Script. Ide inti dari strategi ini adalah secara otomatis menghitung batas atas dan bawah grid berdasarkan titik tertinggi dan terendah harga terkini atau rata-rata bergerak sederhana, kemudian membagi rentang tersebut menjadi beberapa garis grid. Ketika harga menyentuh garis grid tertentu, posisi long akan dibuka atau ditutup pada level tersebut. Dengan cara ini, strategi dapat terus membuka dan menutup posisi di pasar yang bergerak sideways untuk mendapatkan keuntungan dari selisih harga. Selain itu, dengan menyesuaikan batas grid secara dinamis, strategi juga dapat beradaptasi dengan tren pasar yang berbeda.
Prinsip Strategi
-
Hitung batas atas dan bawah grid. Berdasarkan pilihan pengguna, batas atas dan bawah dapat didasarkan pada titik tertinggi dan terendah dari N candle terbaru, dengan persentase pelebaran atau penyempitan yang dapat diatur; atau dapat didasarkan pada rata-rata bergerak sederhana dari harga penutupan N candle terbaru, dengan rasio deviasi atas dan bawah yang dapat diatur.
-
Hasilkan array garis grid. Berdasarkan jumlah garis grid yang ditetapkan, bagi rentang grid secara merata untuk menghasilkan array harga garis grid yang sesuai.
-
Entry / penambahan posisi. Lakukan iterasi garis grid dari bawah ke atas. Jika harga penutupan saat ini lebih kecil dari harga garis grid tertentu dan garis grid tersebut belum memiliki posisi, maka buka posisi long di level tersebut. Dengan demikian, ketika harga menyentuh garis grid yang lebih tinggi, posisi akan terus bertambah.
-
Exit / pengurangan posisi. Lakukan iterasi garis grid dari atas ke bawah. Jika harga penutupan saat ini lebih besar dari harga garis grid tertentu dan garis grid di bawahnya memiliki posisi, maka tutup posisi long pada garis grid yang lebih rendah tersebut. Dengan demikian, ketika harga turun, posisi akan terus berkurang.
-
Penyesuaian dinamis. Jika fitur grid dinamis dipilih, maka setiap candle akan menghitung ulang batas atas dan bawah grid serta array garis grid, sehingga grid dapat terus beradaptasi dengan perubahan pasar.
Analisis Keunggulan
-
Adaptif yang kuat. Strategi grid dapat beradaptasi dengan pasar sideways dan tren. Di pasar sideways, strategi grid dapat terus membuka dan menutup posisi untuk mendapatkan keuntungan dari selisih harga; di pasar tren, karena grid bergerak mengikuti harga, posisi dapat dipertahankan untuk mendapatkan keuntungan dari tren.
-
Risiko terkendali. Ukuran posisi setiap entry ditentukan oleh jumlah grid yang ditetapkan, sehingga eksposur risiko tunggal relatif kecil dan terkendali. Selain itu, karena ketika harga menyentuh garis grid atas, posisi akan ditutup untuk mengambil keuntungan, hal ini juga dapat mengimbangi potensi kerugian hingga batas tertentu.
-
Otomatisasi tinggi. Strategi ini pada dasarnya dapat berjalan secara otomatis penuh tanpa memerlukan intervensi manual, cocok untuk investor yang membutuhkan keuntungan jangka panjang yang stabil.
-
Parameter yang fleksibel. Pengguna dapat secara fleksibel mengatur jumlah garis grid, parameter grid dinamis, dll. sesuai dengan karakteristik pasar untuk mengoptimalkan kinerja strategi.
Analisis Risiko
-
Risiko peristiwa black swan. Jika terjadi penurunan tajam yang ekstrem di pasar, harga langsung melompat di bawah garis grid terendah, maka strategi ini akan memiliki posisi penuh dan menghadapi drawdown yang besar. Untuk mengurangi risiko ini, dapat diatur kondisi stop loss, yang akan menutup semua posisi jika kerugian mencapai ambang batas.
-
Pengaturan parameter grid yang tidak tepat. Jika kepadatan grid terlalu tinggi, selisih harga setiap entry/exit akan sangat kecil, dan biaya transaksi dapat menggerus sebagian besar keuntungan. Jika lebar grid terlalu besar, proporsi entry satu kali menjadi tinggi, sehingga eksposur risiko besar. Perlu mengevaluasi karakteristik aset target secara hati-hati dan memilih parameter grid yang sesuai.
-
Risiko basis. Strategi ini menetapkan kondisi entry/exit berdasarkan harga saat ini. Di pasar berjangka, jika harga kontrak berbeda secara signifikan dari harga aset acuan, level entry/exit aktual mungkin menyimpang jauh dari yang diharapkan.
Arah Optimasi
-
Menambahkan filter tren. Strategi grid berkinerja buruk di pasar tren satu arah. Indikator tren dapat ditambahkan sebagai filter, misalnya hanya mengaktifkan grid ketika ADX di bawah ambang tertentu, dan menonaktifkan grid saat tren jelas, hanya memegang posisi satu arah.
-
Optimasi sinyal. Sinyal lain dapat ditumpangkan di atas grid, misalnya grid + moving average, di mana entry/exit terutama ditentukan oleh grid, tetapi posisi hanya dibuka ketika harga menembus moving average tertentu. Hal ini dapat mengurangi biaya akibat frekuensi entry/exit yang tinggi.
-
Manajemen posisi. Saat ini, ukuran posisi per grid tetap. Dapat diatur untuk mengurangi ukuran posisi per grid ketika harga jauh dari harga pasar rata-rata, dan meningkatkan ukuran posisi ketika mendekati harga pasar rata-rata, sehingga meningkatkan efisiensi penggunaan dana.
-
Kepadatan grid adaptif. Sesuaikan kepadatan grid secara dinamis berdasarkan volatilitas harga. Ketika volatilitas tinggi, jumlah grid dapat ditambah; ketika volatilitas rendah, jumlah grid dikurangi. Hal ini dapat mengoptimalkan lebar grid dan meningkatkan efisiensi penggunaan dana.
Kesimpulan
Strategi ini, melalui grid adaptif dinamis, dapat sering membuka dan menutup posisi di pasar sideways untuk mendapatkan keuntungan dari selisih harga, dan juga dapat mempertahankan eksposur tertentu di pasar tren untuk mendapatkan keuntungan dari tren. Ini adalah strategi kuantitatif jangka menengah-panjang yang cukup adaptif. Dengan mengatur logika pemicu grid dan manajemen posisi secara wajar, dapat diperoleh keuntungan yang stabil. Namun, perlu diperhatikan risiko peristiwa ekstrem dan gap harga, yang memerlukan pengaturan kondisi stop loss yang tepat untuk mengendalikannya. Selain itu, masih ada ruang untuk optimasi lebih lanjut dalam hal pengaturan parameter dan manajemen risiko, seperti memperkenalkan filter tren, penumpukan sinyal, manajemen posisi, kepadatan grid adaptif, dll. untuk meningkatkan ketahanan dan profitabilitas strategi. Secara keseluruhan, strategi ini didasarkan pada logika dasar grid dan menambahkan mekanisme adaptif dinamis, yang dapat memberikan ide dan referensi baru bagi investor kuantitatif jangka menengah-panjang.
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jcloyd
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1) // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float) // for manual grid bounds only. The upperbound price of your grid
i_lowerBound = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float) // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty = input(group="Grid Lines", title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer) // how many grid lines are in your grid- 1

