Strategi pulangan Santa Claus dinamik adalah strategi perdagangan kuantitatif untuk mengenal pasti titik masuk dan keluar yang berpotensi berdasarkan hubungan pulangan dinamik antara harga dan indeks garis tiang. Strategi ini menggunakan garis purata dinamik parameter yang boleh disesuaikan dengan panjangnya untuk melukis garis trend pulangan harga.
Strategi ini berpusat pada pengiraan hubungan pengembalian linear antara harga dan indeks barisan. Pertama, pengiraan purata bergerak sederhana dan perbezaan piawai dengan panjang N. Kemudian, berdasarkan faktor berkaitan sampel dan nilai perbezaan piawai, cari kemiringan k dan jarak b untuk garis pengembalian.
y = kx + b
Di antaranya, x ialah indeks tiang dan y ialah harga.
Berdasarkan hubungan saiz garis pengembalian pada masa ini dengan masa lalu, menilai arah trend. Jika garis pengembalian naik dan harga penutupan lebih tinggi daripada harga pembukaan dan harga tertinggi saat sebelumnya, ia menghasilkan isyarat beli; Jika garis pengembalian turun dan harga penutupan lebih rendah daripada harga pembukaan dan harga terendah saat sebelumnya, ia menghasilkan isyarat jual.
Strategi pulangan Santa Claus yang dinamik memanfaatkan hubungan pulangan dinamik harga dan masa untuk mewujudkan sistem perdagangan kuantitatif yang fleksibel, intuitif, dan parameter yang boleh disesuaikan. Logik strategi ini jelas, mudah difahami, dan dapat digunakan untuk produk dan kitaran perdagangan yang berbeza melalui pengoptimuman parameter. Inovasi strategi ini adalah dengan memperkenalkan faktor masa untuk membina model dinamik, menjadikan penghakiman lebih cenderung.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Creator - TradeAI
strategy('Moving Santa Claus Strategy | TradeAI', overlay=true)
// Set the length of the moving average
length = input(64)
// Calculate the moving averages and standard deviations
x = bar_index
y = close
x_ = ta.sma(x, length)
y_ = ta.sma(y, length)
mx = ta.stdev(x, length)
my = ta.stdev(y, length)
c = ta.correlation(x, y, length)
slope = c * (my / mx)
// Calculate the parameters of the regression line
inter = y_ - slope * x_
reg = x * slope + inter
// Set the line color based on whether EMA is moving up or down
var color lineColor = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColor := color.new(#d8f7ff, 0)
if (reg < reg[1] and (close < open and close < low[1]))
lineColor := color.new(#ff383b, 0)
// Plot the EMA line with different thicknesses
plot(reg, color=lineColor, title="EMA")
var color lineColorrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrr := color.new(#d8f7ff, 77)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrr := color.new(#ff383b, 77)
plot(reg, color=lineColorrr, title="EMA", linewidth=5)
var color lineColorr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorr := color.new(#d8f7ff, 93)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorr := color.new(#ff383b, 93)
plot(reg, color=lineColorr, title="EMA", linewidth=10)
var color lineColorrrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrrr := color.new(#d8f7ff, 97)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrrr := color.new(#ff383b, 97)
plot(reg, color=lineColorr, title="EMA", linewidth=15)
var color lineColorrrrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrrrr := color.new(#d8f7ff, 99)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrrrr := color.new(#ff383b, 99)
plot(reg, color=lineColorr, title="EMA", linewidth=20)
// Implement trading strategy based on EMA direction
if reg > reg[1] and (close > open and close > high[1])
strategy.entry('buy', strategy.long)
if reg < reg[1] and (close < open and close < low[1])
strategy.close('buy')