Adaptive Regularized Moving Average Cross-Market Arbitrage Strategy (Strategi Arbitrage lintas pasar rata-rata bergerak adaptif)

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

img

Gambaran umum

Strategi ini mengimplementasikan perdagangan arbitrase antara pasar yang berbeda dengan menghitung garis rata-rata bergerak yang terregulasi adaptif. Strategi ini menampilkan arbitrase lintas pasar, penyesuaian parameter dinamis, kontrol risiko, dll.

Prinsip Strategi

Strategi ini pertama-tama mendefinisikan fungsi skala Minimax untuk menstandarisasi deret waktu ke kisaran yang ditentukan. Kemudian mendefinisikan fungsi rata-rata bergerak yang terregulasi adaptif rema untuk menghitung garis sinyal yang dihaluskan sig. Perhitungan garis sinyal adalah:

  1. Menentukan jendela geser, default panjang 5 hari.

  2. Nilai sig untuk setiap hari adalah rata-rata tertimbang dari nilai sig sebelumnya dan harga penutupan saat ini.

  3. Tambahkan parameter λ sebagai regularizer untuk membuat transisi sig lebih halus.

Setelah mendapatkan garis sinyal, strategi menentukan panjang / pendek berdasarkan salib emas / mati dari garis sinyal dan harga. Secara khusus:

  1. Ketika SIG melintasi harga, pergi panjang.

  2. Ketika SIG melintasi harga, pergi pendek.

Selain itu, strategi menambahkan faktor halus dan show_line sebagai parameter yang dapat disesuaikan untuk meningkatkan fleksibilitas.

Analisis Keuntungan

Dibandingkan dengan strategi rata-rata bergerak tradisional, strategi ini memiliki keuntungan berikut:

  1. Mekanisme bobot adaptif dapat merespons perubahan harga dengan lebih cepat.

  2. Regularizer yang ditambahkan membuat garis sinyal lebih halus, menghindari sinyal yang salah dari fluktuasi harga yang drastis.

  3. Arbitrage lintas pasar dapat mendapatkan keuntungan dari perbedaan harga antara pasar.

  4. Parameter yang dapat disesuaikan yang fleksibel dapat dioptimalkan sesuai dengan kondisi pasar.

Risiko dan Solusi

Strategi ini juga memiliki beberapa risiko:

  1. Kemungkinan sinyal yang salah dari penyeberangan ganda lebih tinggi. Solusinya adalah menyesuaikan parameter halus dengan benar untuk menghindari osilasi garis sinyal.

  2. Arbitrage lintas pasar mengharuskan kedua pasar memiliki korelasi harga dan tren yang konsisten. Solusinya adalah memilih pasar yang sangat berkorelasi untuk arbitrase.

  3. Optimasi parameter membutuhkan data historis yang cukup untuk backtesting.

Arahan Optimasi

Strategi ini juga dapat dioptimalkan dalam aspek berikut:

  1. Dalam pemilihan parameter, algoritma pembelajaran mesin dapat diperkenalkan untuk mengoptimalkan kombinasi parameter secara otomatis.

  2. Dalam generasi sinyal, lebih banyak indikator dapat diperkenalkan untuk membangun sinyal perdagangan yang lebih stabil.

  3. Dalam pengendalian risiko, stop loss dapat diatur untuk membatasi kerugian per perdagangan.

  4. Dalam arbitrage lintas pasar, dapat diperluas ke aset perdagangan yang lebih berkorelasi tinggi.

Ringkasan

Strategi ini mengimplementasikan perdagangan arbitrage antara pasar dengan menghitung rata-rata bergerak secara adaptif. Dibandingkan dengan strategi rata-rata bergerak tradisional, strategi ini memiliki keuntungan dari parameter adaptif, pemrosesan yang halus, arbitrage lintas pasar, dll. Langkah selanjutnya adalah untuk lebih mengoptimalkan strategi melalui pembelajaran mesin, sinyal gabungan, manajemen 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 banyak