Adaptive Regularised Moving Average Cross-Market Arbitrage Strategy

Penulis:ChaoZhang, Tarikh: 2023-11-16 16:20:11
Tag:

img

Ringkasan

Strategi ini melaksanakan perdagangan arbitraj antara pasaran yang berbeza dengan mengira garis purata bergerak yang teratur adaptif. Strategi ini mempunyai arbitraj rentas pasaran, penyesuaian parameter dinamik, kawalan risiko, dll.

Prinsip Strategi

Strategi ini mula-mula mentakrifkan fungsi skala Minimax untuk menstandarisasi siri masa ke julat tertentu. Kemudian ia mentakrifkan fungsi rata-rata bergerak berkala adaptif untuk mengira garis isyarat yang diluruskan sig. Pengiraan garis isyarat adalah:

  1. Tentukan tetingkap bergerak, panjang lalai 5 hari.

  2. Nilai sig untuk setiap hari adalah purata berat nilai sig sebelumnya dan harga penutupan semasa.

  3. Tambah parameter λ sebagai regularizer untuk membuat peralihan sig lebih lancar.

Selepas mendapatkan garis isyarat, strategi menentukan panjang / pendek berdasarkan salib emas / mati garis isyarat dan harga.

  1. Apabila SIG melintasi harga, pergi panjang.

  2. Apabila SIG melintasi di bawah harga, pergi pendek.

Di samping itu, strategi menambah faktor halus dan show_line sebagai parameter yang boleh disesuaikan untuk meningkatkan fleksibiliti.

Analisis Kelebihan

Berbanding dengan strategi purata bergerak tradisional, strategi ini mempunyai kelebihan berikut:

  1. Mekanisme berat adaptif boleh bertindak balas dengan lebih cepat terhadap perubahan harga.

  2. Regularizer tambahan menjadikan garis isyarat lebih lancar, mengelakkan isyarat yang salah dari turun naik harga yang drastik.

  3. Arbitraj lintas pasaran boleh mendapat keuntungan daripada perbezaan harga antara pasaran.

  4. Parameter yang boleh diselaraskan fleksibel boleh dioptimumkan mengikut keadaan pasaran.

Risiko dan Penyelesaian

Strategi ini juga mempunyai beberapa risiko:

  1. Kemungkinan isyarat yang salah dari persilangan berganda lebih tinggi. Penyelesaian adalah untuk menyesuaikan parameter halus dengan betul untuk mengelakkan goyangan garis isyarat.

  2. Arbitraj lintas pasaran memerlukan kedua-dua pasaran mempunyai korelasi harga dan trend yang konsisten.

  3. Pengoptimuman parameter memerlukan data sejarah yang mencukupi untuk backtesting.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan dalam aspek berikut:

  1. Dalam pemilihan parameter, algoritma pembelajaran mesin boleh diperkenalkan untuk mengoptimumkan kombinasi parameter secara automatik.

  2. Dalam penjanaan isyarat, lebih banyak penunjuk boleh diperkenalkan untuk membina isyarat perdagangan yang lebih stabil.

  3. Dalam kawalan risiko, stop loss boleh ditetapkan untuk mengehadkan kerugian setiap perdagangan.

  4. Dalam arbitraj rentas pasaran, ia boleh diperluaskan kepada aset perdagangan yang lebih berkorelasi.

Ringkasan

Strategi ini melaksanakan perdagangan arbitraj antara pasaran dengan mengira purata bergerak secara adaptif. Berbanding dengan strategi purata bergerak tradisional, ia mempunyai kelebihan parameter adaptif, pemprosesan yang lancar, arbitraj rentas pasaran, dll. Langkah seterusnya adalah untuk mengoptimumkan lagi strategi melalui pembelajaran mesin, isyarat gabungan, pengurusan risiko, dll.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Crossover82%", overlay=true)

//
// Functions
//
scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

rema(ts, p) => // regularized ma
    rm = 0.0, lambda = .5, a = 2 / (p + 1)
    rm := (nz(rm[1]) + a * (ts - nz(rm[1])) + lambda * (2 * nz(rm[1]) - nz(rm[2]))) / (lambda + 1)
    rm
    
//
// Inputs
//
X = input(close, title="Data source")
smooth = input(2, title="REMA smooth factor")
show_line = input(true, title="Show signal line")

//
// Main
//
p = 5
sig = rema(scaleMinimax(pow(X*p,-X) - 0.1, 100, lowest(X, 100), highest(X, 100)), smooth)

plot(show_line ? sig : na, linewidth=1)
plot(cross(sig, X) ? ohlc4 : na, style=circles, linewidth=8, color=blue, transp=50)

longCondition = crossover(sig, X)
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossunder(sig, X)
if (shortCondition)
    strategy.entry("SE", strategy.short)



Lebih lanjut