Chiến lược quay trở lại của Santa Claus động là một chiến lược giao dịch định lượng để xác định các điểm vào và thoát tiềm năng dựa trên mối quan hệ quay trở lại động giữa giá và chỉ số đường trụ. Chiến lược này sử dụng đường trung bình động của các tham số có thể điều chỉnh chiều dài để vẽ đường xu hướng quay trở lại của giá.
Cốt lõi của chiến lược này là tính toán mối quan hệ hồi quy tuyến tính giữa giá và chỉ số đường cột. Đầu tiên, tính toán đường trung bình di chuyển đơn giản và chênh lệch chuẩn với độ dài N. Sau đó, dựa trên các hệ số liên quan đến mẫu và giá trị chênh lệch chuẩn, tìm ra độ lệch k và độ cắt b của đường hồi quy.
y = kx + b
Trong đó, x là chỉ số cột và y là giá.
Định hướng của xu hướng dựa trên mối quan hệ giữa chiều cao của đường hồi hướng hiện tại và chiều cao của đường hồi hướng trước đó. Nếu đường hồi hướng tăng và giá đóng cửa cao hơn giá mở và giá tối đa trước đó, nó sẽ tạo ra tín hiệu mua; Nếu đường hồi hướng giảm và giá đóng cửa thấp hơn giá mở và giá tối thiểu trước đó, nó sẽ tạo ra tín hiệu bán.
Chiến lược quay trở lại của Santa Claus động sử dụng mối quan hệ quay trở lại động của giá và thời gian để thực hiện một hệ thống giao dịch định lượng linh hoạt, trực quan, có thể điều chỉnh theo tham số. Lập luận của chiến lược rõ ràng, dễ hiểu, có thể áp dụng cho các sản phẩm và chu kỳ giao dịch khác nhau thông qua tối ưu hóa tham số. Sự đổi mới của chiến lược này nằm ở việc đưa ra các yếu tố thời gian để xây dựng mô hình động, làm cho phán quyết có xu hướng hơn.
/*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')