
Strategi ini adalah strategi arbitrage cryptocurrency adaptif yang didasarkan pada konsep perdagangan grid. Strategi ini dapat secara otomatis menyesuaikan kisaran harga perdagangan grid sesuai dengan fluktuasi pasar dan melakukan perdagangan yang sangat efisien dalam kisaran harga tersebut.
Strategi ini didasarkan pada ide-ide:
Berdasarkan harga tinggi dan rendah historis, dinamika menghitung kisaran harga dari grid transaksi.
Dalam kisaran harga ini, N garis grid transaksi diatur pada interval yang sama.
Ketika harga menembus setiap garis grid, maka posisi harus di buka atau ditutup dengan jumlah tetap.
Arbitrage dilakukan di antara garis grid yang berdekatan, dan posisi yang sama setelah mendapat keuntungan.
Ketika harga kembali ke dalam kisaran grid, teruslah berposisi pada harga marginal cost pada garis grid.
Dengan begitu, mereka akan berputar-putar dan melakukan perdagangan lelang dengan frekuensi tinggi dalam kisaran harga grid.
Secara khusus, strategi ini pertama-tama menghitung batas atas dan bawah harga grid secara real-time berdasarkan konfigurasi jendela lookback ((i_boundLookback) dan parameter bandwidth ((i_boundDev)).
Kemudian N garis grid dibagi antara batas atas dan bawah ((i_gridQty). Harga dari garis grid ini disimpan ke dalam array gridLineArr.
Ketika harga menembus suatu garis grid, maka akan terjadi over atau short position dengan jumlah tetap ((strategy capital divided by the number of grids)). Pesanan akan dicatat dalam array orderArr.
Ketika harga menembus garis grid yang berdekatan lagi, Anda dapat mencocokkan keuntungan dengan pesanan sebelumnya dan mendapatkan posisi profit leveling.
Hal ini terjadi karena adanya siklus yang berulang, dimana arbitrage dilakukan dengan frekuensi tinggi dalam rentang fluktuasi harga.
Keuntungan terbesar dari strategi ini dibandingkan dengan strategi grid tradisional adalah bahwa jangkauan grid ini disesuaikan secara otomatis dan dapat beradaptasi sesuai dengan fluktuasi pasar. Strategi ini memiliki fitur berikut:
Ada juga yang mengatakan bahwa sistem ini tidak dapat dioperasikan secara otomatis.
Ini adalah salah satu cara yang paling efektif untuk mendapatkan uang dari Bitcoin.
Ini adalah risiko yang dapat dikendalikan, menghindari risiko serangan sepihak.
Frekuensi transaksi tinggi, margin tinggi.
Mudah dipahami, konfigurasi sederhana.
Ini adalah salah satu dari beberapa hal yang dapat Anda lakukan untuk mendapatkan keuntungan dari investasi Anda.
Perdagangan robot juga dapat digunakan untuk memantau pergerakan pasar secara real-time.
Meskipun ada banyak keuntungan dari strategi ini, ada juga beberapa risiko, terutama yang berkonsentrasi pada:
Jika harga turun-temurun, risiko kerugian yang lebih besar dapat terjadi.
Perlu waktu yang tepat untuk memegang posisi dan pasangan perdagangan untuk mendapatkan keuntungan.
Perlu hati-hati untuk menilai apakah ukuran dana sesuai dengan rentang fluktuasi.
Parameter mungkin perlu dipantau dan dioptimalkan secara teratur untuk memastikan operasi yang baik.
Tindakan yang diambil meliputi:
Meningkatkan jarak jaring, memperluas ruang jaring.
Pilih pasangan yang lebih stabil.
Menyesuaikan skala dana untuk memastikan likuiditas yang memadai.
Menciptakan mekanisme pengawasan dan alarm otomatis.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Jaringan DinamisParameter grid dapat disesuaikan secara otomatis dengan volatilitas pasangan perdagangan.
Mekanisme Stop LossHal ini dikarenakan banyaknya orang Indonesia yang tidak tahu apa yang harus dilakukan.
Jaringan Komposit: Kombinasi kisi dengan parameter yang berbeda pada periode waktu yang berbeda, untuk mencapai pengulangan waktu.
Pembelajaran Mesin: Menggunakan aturan alternatif seperti jaringan saraf untuk mengoptimalkan parameter secara otomatis.
Arbitrase lintas pasarPerdagangan Arbitrage: Perdagangan Arbitrage antara pertukaran atau antara pasangan mata uang.
Strategi ini secara keseluruhan adalah strategi arbitrage grid cryptocurrency yang sangat praktis. Dibandingkan dengan strategi grid tradisional, fitur utamanya adalah bahwa ruang lingkup grid disesuaikan secara otomatis, dan Anda dapat mengkonfigurasi ruang lingkup perdagangan Anda sendiri sesuai dengan perubahan pasar.
/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@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
f_getGridBounds(_bs, _bl, _bd, _up) =>
if _bs == "Hi & Low"
_up ? highest(close, _bl) * (1 + _bd) : lowest(close, _bl) * (1 - _bd)
else
avg = sma(close, _bl)
_up ? avg * (1 + _bd) : avg * (1 - _bd)
f_buildGrid(_lb, _gw, _gq) =>
gridArr = array.new_float(0)
for i=0 to _gq-1
array.push(gridArr, _lb+(_gw*i))
gridArr
f_getNearGridLines(_gridArr, _price) =>
arr = array.new_int(3)
for i = 0 to array.size(_gridArr)-1
if array.get(_gridArr, i) > _price
array.set(arr, 0, i == array.size(_gridArr)-1 ? i : i+1)
array.set(arr, 1, i == 0 ? i : i-1)
break
arr
var upperBound = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true) : i_upperBound // upperbound of our grid
var lowerBound = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false) : i_lowerBound // lowerbound of our grid
var gridWidth = (upperBound - lowerBound)/(i_gridQty-1) // space between lines in our grid
var gridLineArr = f_buildGrid(lowerBound, gridWidth, i_gridQty) // an array of prices that correspond to our grid lines
var orderArr = array.new_bool(i_gridQty, false) // a boolean array that indicates if there is an open order corresponding to each grid line
var closeLineArr = f_getNearGridLines(gridLineArr, close) // for plotting purposes - an array of 2 indices that correspond to grid lines near price
var nearTopGridLine = array.get(closeLineArr, 0) // for plotting purposes - the index (in our grid line array) of the closest grid line above current price
var nearBotGridLine = array.get(closeLineArr, 1) // for plotting purposes - the index (in our grid line array) of the closest grid line below current price
strategy.initial_capital = 50000
for i = 0 to (array.size(gridLineArr) - 1)
if close < array.get(gridLineArr, i) and not array.get(orderArr, i) and i < (array.size(gridLineArr) - 1)
buyId = i
array.set(orderArr, buyId, true)
strategy.entry(id=tostring(buyId), long=true, qty=(strategy.initial_capital/(i_gridQty-1))/close, comment="#"+tostring(buyId))
if close > array.get(gridLineArr, i) and i != 0
if array.get(orderArr, i-1)
sellId = i-1
array.set(orderArr, sellId, false)
strategy.close(id=tostring(sellId), comment="#"+tostring(sellId))
if i_autoBounds
upperBound := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true)
lowerBound := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false)
gridWidth := (upperBound - lowerBound)/(i_gridQty-1)
gridLineArr := f_buildGrid(lowerBound, gridWidth, i_gridQty)
closeLineArr := f_getNearGridLines(gridLineArr, close)
nearTopGridLine := array.get(closeLineArr, 0)
nearBotGridLine := array.get(closeLineArr, 1)