
Chiến lược này là một hệ thống giao dịch thích ứng dựa trên Chỉ báo động lượng ngẫu nhiên (SMI). Công cụ này dự đoán xu hướng thị trường bằng cách phân tích điểm giao nhau giữa chỉ báo SMI và đường tín hiệu của nó, đồng thời tự động đưa ra tín hiệu mua và bán tại các vị trí quan trọng. Chiến lược này sử dụng đường trung bình động hàm mũ kép (EMA) để làm mịn dữ liệu và cải thiện độ tin cậy của tín hiệu. Hệ thống này đặc biệt phù hợp với các giao dịch trung và dài hạn và có thể nắm bắt hiệu quả các điểm ngoặt của xu hướng thị trường chính.
Cốt lõi của chiến lược này là đo động lượng giá bằng cách tính toán Chỉ báo động lượng ngẫu nhiên (SMI). Đầu tiên, phạm vi giá cao và thấp trong một khoảng thời gian cụ thể được tính toán, sau đó giá đóng cửa được chuẩn hóa theo phạm vi này. Bằng cách áp dụng phương pháp làm mịn EMA kép vào phạm vi tương đối và phạm vi giá, giá trị SMI sẽ ổn định hơn. Khi đường SMI tạo ra điểm giao cắt vàng với đường tín hiệu của nó (EMA của SMI), tín hiệu mua sẽ được kích hoạt; khi đường SMI tạo ra điểm giao cắt tử thần, tín hiệu bán sẽ được kích hoạt. Đồng thời, phạm vi quá mua và quá bán (+40/-40) được thiết lập để xác nhận độ tin cậy của tín hiệu.
Đây là một chiến lược giao dịch trưởng thành dựa trên chỉ báo SMI. Nó tạo ra các tín hiệu giao dịch thông qua sự giao nhau của các chỉ báo kỹ thuật và rất thực tế. Ưu điểm cốt lõi của chiến lược này là tín hiệu rõ ràng và có khả năng chống nhiễu cao, nhưng cũng có độ trễ nhất định. Bằng cách bổ sung các biện pháp tối ưu hóa như xác minh khối lượng và lọc xu hướng, tính ổn định và độ tin cậy của chiến lược có thể được cải thiện hơn nữa. Chiến lược này đặc biệt phù hợp để theo dõi xu hướng trung và dài hạn và là lựa chọn tốt cho các nhà đầu tư muốn xây dựng hệ thống giao dịch có hệ thống.
/*backtest
start: 2024-12-19 00:00:00
end: 2024-12-26 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Iban_Boe
//@version=6
strategy("SMI Strategy with Signals", "SMI Strategy", overlay=false)
// Parámetros del SMI
lengthK = input.int(14, "%K Length", minval=1, maxval=15000)
lengthD = input.int(3, "%D Length", minval=1, maxval=4999)
lengthEMA = input.int(3, "EMA Length", minval=1, maxval=4999)
// Función de doble EMA
emaEma(source, length) => ta.ema(ta.ema(source, length), length)
// Cálculos del SMI
highestHigh = ta.highest(lengthK)
lowestLow = ta.lowest(lengthK)
highestLowestRange = highestHigh - lowestLow
relativeRange = close - (highestHigh + lowestLow) / 2
smi = 200 * (emaEma(relativeRange, lengthD) / emaEma(highestLowestRange, lengthD))
smiSignal = ta.ema(smi, lengthEMA)
// Gráficos del SMI
smiPlot = plot(smi, "SMI", color=color.blue)
plot(smiSignal, "SMI-based EMA", color=color.orange)
// Level lines
hline(40, "Overbought Line", color=color.green)
hline(-40, "Oversold Line", color=color.red)
hline(0, "Middle Line", color=color.gray)
midLinePlot = plot(0, color = na, editable = false, display = display.none)
fill(smiPlot, midLinePlot, 120, 40, top_color = color.new(#4caf4f, 50), bottom_color = color.new(color.green, 100), title = "Overbought Gradient Fill")
fill(smiPlot, midLinePlot, -40, -120, top_color = color.new(color.red, 100), bottom_color = color.new(color.red, 50), title = "Oversold Gradient Fill")
// Señales de compra y venta
buySignal = ta.crossover(smi, smiSignal) // Detect crossover
sellSignal = ta.crossunder(smi, smiSignal) // Detect crossover
// Graficar señales de compra/venta
plotshape(series=buySignal, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="Señal de Compra")
plotshape(series=sellSignal, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="Señal de Venta")
// Lógica de la estrategia
if (buySignal)
strategy.entry("Compra", strategy.long)
if (sellSignal)
strategy.entry("Venta", strategy.short)
// Alertas
alertcondition(buySignal, title="Alerta de Compra", message="¡Señal de Compra Detectada!")
alertcondition(sellSignal, title="Alerta de Venta", message="¡Señal de Venta Detectada!")