
RMI, ALMA, CTI, STC, GUNXO, DEMA-DMI, MM, DMI-LOOP, TO, STOCH
Không còn giao dịch với chỉ số đơn lẻ nữa. Chiến lược này tích hợp 10 chỉ số kỹ thuật khác nhau để “đầu cử dân chủ” thông qua hệ thống điểm cân nặng. ALMA và STC, DEMA-DMI có trọng lượng là 2, các chỉ số khác có trọng lượng là 1.
Nhìn scoreDiff>1 thì bạn đã mở lệnh? Quá ngây thơ. Chiến lược này được thiết kế với cơ chế xác nhận kép: tín hiệu gốc phải đồng hướng trong 2 chu kỳ liên tiếp để hình thành một xu hướng xác nhận. Điều này có nghĩa là một đột phá giả sẽ rất khó để kích hoạt tín hiệu giao dịch.
RMI ((8 chu kỳ) kết hợp với tỷ lệ biến động EMA5, phản ứng nhanh hơn 15% so với RSI tiêu chuẩn. Khi RMI tăng và độ dốc EMA5 là đúng thời gian, nó tạo ra tín hiệu đa đầu.
82 chu kỳ ALMA ((chênh lệch 0.7, tín hiệu 3.8) so với cùng chu kỳ EMA 2-3 chu kỳ nhận dạng xu hướng chuyển hướng. Bộ tham số này đã được tối ưu hóa để tối đa hóa tốc độ phản ứng trong khi vẫn giữ được sự mịn màng. Giá vượt qua đường ALMA là điều kiện lọc cốt lõi, dữ liệu lịch sử cho thấy tín hiệu này đạt 72%, nhưng cần được xác nhận với các chỉ số khác.
45 chu kỳ CTI ngưỡng được thiết lập là ± 0.3, thiết lập này là nhạy cảm hơn so với 0.5 truyền thống. CTI> 0.3 cho thấy giá đang ở trong phạm vi mạnh so với biến động lịch sử, <-0.3 là yếu. Chỉ số này xuất hiện trong giai đoạn tăng tốc xu hướng, nhưng dễ gây tiếng ồn khi biên soạn ngang.
Cặp EMA 21⁄50 chu kỳ là cấu hình cổ điển, xác nhận xu hướng đa đầu trên đường nhanh. Mặc dù trông bình thường, nhưng nó đóng vai trò là bộ lọc cơ bản trong hệ thống đa chỉ số. Tỷ lệ chiến thắng sử dụng một mình chỉ là 55%, nhưng sau khi kết hợp với các chỉ số khác, tỷ lệ chiến thắng chiến lược tổng thể tăng lên 65%.
50 chu kỳ DEMA kết hợp với 14 chu kỳ DMI, tạo ra tín hiệu đa đầu khi giá phá vỡ DEMA và DI +> DI - DEMA giảm khoảng 30% so với EMA thông thường, DMI đảm bảo đủ cường độ xu hướng. Sự kết hợp này chiếm 2 điểm trong thiết kế trọng lượng, cho thấy tầm quan trọng của nó.
Chỉ số 13 chu kỳ MM chuẩn hóa vị trí giá trong khoảng 0-100 với> 70 là mua quá mức và <30 là bán quá mức. Tuy nhiên, chiến lược này không phải là một hoạt động ngược đơn giản, mà là yêu cầu giá vượt qua EMA và xác nhận xu hướng tiếp tục. Thiết kế này tránh được sự ngượng ngùng của “truyền văn bản ở sườn núi”, giữ vị trí trong xu hướng mạnh chứ không phải là rời đi sớm.
Trong hệ thống trọng số 13 điểm, ALMA, STC và DEMA-DMI chiếm 2 điểm cho thấy tầm quan trọng của việc theo dõi xu hướng. Khi chênh lệch điểm trống lớn hơn là 4, tín hiệu mạnh sẽ được kích hoạt, khi tín hiệu yếu hơn là 1. Thiết kế này đảm bảo quyền nói của các chỉ số xu hướng chính và tránh cho các chỉ số xung động bị sai lệch trong bối cảnh xu hướng.
Chiến lược này hoạt động tốt trong thị trường có xu hướng rõ ràng, nhưng sẽ tạo ra tín hiệu giả thường xuyên khi dao động ngang. Dữ liệu đánh giá lại dựa trên hiệu suất lịch sử, không đại diện cho lợi nhuận trong tương lai.
//@version=6
strategy("Swing Trade Strategy", overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=95,
commission_type=strategy.commission.percent,
commission_value=0.1,
calc_on_every_tick=false)
// INDIKATOR 1: RMI TREND SNIPER
rmiLength = 8
rmiUp = ta.rma(math.max(ta.change(close), 0), rmiLength)
rmiDown = ta.rma(-math.min(ta.change(close), 0), rmiLength)
rmiValue = rmiDown == 0 ? 100 : rmiUp == 0 ? 0 : 100 - (100 / (1 + rmiUp / rmiDown))
ema5 = ta.ema(close, 5)
ema5Change = ta.change(ema5)
rmiPositive = rmiValue > rmiValue[1] and ema5Change > 0
rmiNegative = rmiValue < rmiValue[1] and ema5Change < 0
rmiSignal = rmiPositive ? 1 : rmiNegative ? -1 : 0
// INDIKATOR 2: ALMA SMOOTH
almaLength = 82
almaOffset = 0.7
almaSigma = 3.8
almaValue = ta.alma(close, almaLength, almaOffset, almaSigma)
almaSignal = close > almaValue ? 1 : close < almaValue ? -1 : 0
// INDIKATOR 3: CTI
ctiLength = 45
ctiThreshold = 0.3
ctiSum = 0.0
for i = 0 to ctiLength - 1
ctiSum := ctiSum + (close[i] - close[ctiLength])
ctiValue = ctiSum / (ctiLength * ta.stdev(close, ctiLength))
ctiSignal = ctiValue > ctiThreshold ? 1 : ctiValue < -ctiThreshold ? -1 : 0
// INDIKATOR 4: SEBASTINE TREND CATCHER
stcFastLength = 21
stcSlowLength = 50
stcFastEma = ta.ema(close, stcFastLength)
stcSlowEma = ta.ema(close, stcSlowLength)
stcSignal = stcFastEma > stcSlowEma ? 1 : stcFastEma < stcSlowEma ? -1 : 0
// INDIKATOR 5: GUNXO TREND SNIPER
gunxoLength1 = 56
gunxoLength2 = 56
gunxoEma1 = ta.ema(close, gunxoLength1)
gunxoEma2 = ta.ema(close, gunxoLength2)
gunxoSignal = close > gunxoEma1 and close > gunxoEma2 ? 1 : close < gunxoEma1 and close < gunxoEma2 ? -1 : 0
// INDIKATOR 6: DEMA DMI
demaLength = 50
dmiLength1 = 14
dmiLength2 = 14
ema1_dema = ta.ema(close, demaLength)
ema2_dema = ta.ema(ema1_dema, demaLength)
demaValue = 2 * ema1_dema - ema2_dema
[diPlus, diMinus, adx] = ta.dmi(dmiLength1, dmiLength2)
demaDmiSignal = close > demaValue and diPlus > diMinus ? 1 : close < demaValue and diMinus > diPlus ? -1 : 0
// INDIKATOR 7: MM FOR LOOP
mmLength = 13
mmThreshold = 70
mmEma = ta.ema(close, mmLength)
mmHigh = ta.highest(high, mmLength)
mmLow = ta.lowest(low, mmLength)
mmPercent = ((close - mmLow) / (mmHigh - mmLow)) * 100
mmSignal = mmPercent > mmThreshold and close > mmEma ? 1 : mmPercent < (100 - mmThreshold) and close < mmEma ? -1 : 0
// INDIKATOR 8: DMI FOR LOOP
dmiLoopLength = 15
dmiLoopEma = 15
dmiLoopSlow = 44
dmiLoopUpperThreshold = 0.25
dmiLoopLowerThreshold = -0.25
[diPlus2, diMinus2, adx2] = ta.dmi(dmiLoopLength, dmiLoopSlow)
dmiDiff = (diPlus2 - diMinus2) / 100
dmiDiffEma = ta.ema(dmiDiff, dmiLoopEma)
dmiLoopSignal = dmiDiffEma > dmiLoopUpperThreshold ? 1 : dmiDiffEma < dmiLoopLowerThreshold ? -1 : 0
// INDIKATOR 9: TREND OSCILLATOR
toLength = 12
toFast = ta.ema(close, toLength)
toSlow = ta.ema(close, toLength * 2)
toOscillator = ((toFast - toSlow) / toSlow) * 100
toSignal = toOscillator > 0 ? 1 : toOscillator < 0 ? -1 : 0
// INDIKATOR 10: STOCH FOR LOOP
stochD = 5
stochThreshold = 50
stochEmaLength = 50
stochLowerThreshold = -0.5
stochNeutralThreshold = 0.1
stochValue = ta.stoch(close, high, low, stochD)
stochEma = ta.ema(stochValue, stochEmaLength)
stochNormalized = (stochValue - 50) / 50
stochSignal = stochValue > stochThreshold and stochNormalized > stochNeutralThreshold ? 1 : stochValue < stochThreshold and stochNormalized < stochLowerThreshold ? -1 : 0
// VIKTAD SAMMANSLAGNING
bullishScore = (rmiSignal == 1 ? 1 : 0) + (almaSignal == 1 ? 2 : 0) + (ctiSignal == 1 ? 1 : 0) + (stcSignal == 1 ? 2 : 0) + (gunxoSignal == 1 ? 1 : 0) + (demaDmiSignal == 1 ? 2 : 0) + (mmSignal == 1 ? 1 : 0) + (dmiLoopSignal == 1 ? 1 : 0) + (toSignal == 1 ? 1 : 0) + (stochSignal == 1 ? 1 : 0)
bearishScore = (rmiSignal == -1 ? 1 : 0) + (almaSignal == -1 ? 2 : 0) + (ctiSignal == -1 ? 1 : 0) + (stcSignal == -1 ? 2 : 0) + (gunxoSignal == -1 ? 1 : 0) + (demaDmiSignal == -1 ? 2 : 0) + (mmSignal == -1 ? 1 : 0) + (dmiLoopSignal == -1 ? 1 : 0) + (toSignal == -1 ? 1 : 0) + (stochSignal == -1 ? 1 : 0)
// TREND SYSTEM
var int trendConfirmation = 0
scoreDiff = bullishScore - bearishScore
int rawTrend = scoreDiff > 4 ? 2 : scoreDiff > 1 ? 1 : scoreDiff < -4 ? -2 : scoreDiff < -1 ? -1 : 0
if rawTrend > 0
trendConfirmation := trendConfirmation >= 0 ? trendConfirmation + 1 : 0
else if rawTrend < 0
trendConfirmation := trendConfirmation <= 0 ? trendConfirmation - 1 : 0
confirmedTrend = trendConfirmation >= 2 ? rawTrend : trendConfirmation <= -2 ? rawTrend : 0
var int finalTrend = 0
if confirmedTrend != 0
finalTrend := confirmedTrend
// ENKEL TRADING
buy_signal = finalTrend >= 1 and finalTrend[1] <= 0
sell_signal = finalTrend <= 0 and finalTrend[1] >= 1
if buy_signal
strategy.entry("LONG", strategy.long)
if sell_signal
strategy.close("LONG")
// VISUELLT
trendColor = finalTrend == 2 ? color.new(color.green, 0) : finalTrend == 1 ? color.new(color.green, 40) : finalTrend == -1 ? color.new(color.red, 40) : color.new(color.red, 0)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 92) : na)
lineY = low - (ta.atr(14) * 2)
plot(lineY, "Trend Line", trendColor, 5)
plotshape(buy_signal, "KOP", shape.triangleup, location.belowbar, color.green, size=size.huge, text="KOP")
plotshape(sell_signal, "SALJ", shape.triangledown, location.abovebar, color.red, size=size.large, text="SALJ")