Chiến lược này sử dụng chỉ số KDJ và Moving Average (MA) để xác định xu hướng thị trường và tạo tín hiệu giao dịch. Khi chỉ số KDJ vượt quá mức mua quá mức và giá phá vỡ dưới mức MA, một tín hiệu ngắn được tạo ra; khi chỉ số KDJ dưới mức bán quá mức và giá phá vỡ trên mức MA, một tín hiệu dài được tạo ra. Bằng cách kết hợp chỉ số KDJ với xác nhận xu hướng MA, chiến lược này có thể nắm bắt tốt hơn xu hướng thị trường trong khi tránh các tín hiệu sai trong các thị trường dao động.
Bằng cách kết hợp chỉ số KDJ với đường trung bình động, chiến lược này có thể nắm bắt hiệu quả xu hướng thị trường và tạo ra các tín hiệu giao dịch. Việc sử dụng hợp lý thông tin mua quá mức / bán quá mức và hướng xu hướng có thể dẫn đến hiệu suất giao dịch mạnh mẽ. Tuy nhiên, vẫn còn chỗ cho tối ưu hóa, chẳng hạn như giới thiệu nhiều điều kiện lọc hơn, quản lý vị trí năng động, dừng lỗ và lấy lợi nhuận, vv, để tăng cường hơn nữa tính mạnh mẽ và lợi nhuận của chiến lược. Trong ứng dụng thực tế, chiến lược cần được tinh chỉnh và thử nghiệm cho các môi trường và công cụ thị trường khác nhau để xác minh hiệu quả và khả năng áp dụng của nó.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("KDJ Trending View with Signals and MA Strategy", overlay=true) // KDJ Settings kdjLength = input.int(9, title="KDJ Length") kdjSignal = input.int(3, title="KDJ Signal") kdjOverbought = input.int(80, title="KDJ Overbought Level") kdjOversold = input.int(20, title="KDJ Oversold Level") // Margin Settings longMargin = input.float(2.0, title="Long Margin", step=0.01) shortMargin = input.float(2.0, title="Short Margin", step=0.01) // MA Settings maLength = input.int(20, title="MA Length") maType = input.string("SMA", title="MA Type (SMA, EMA, etc.)") // Calculate KDJ kdj_highest = ta.highest(high, kdjLength) kdj_lowest = ta.lowest(low, kdjLength) kdjRSV = 100 * ((close - kdj_lowest) / (kdj_highest - kdj_lowest)) kdjK = ta.sma(kdjRSV, kdjSignal) kdjD = ta.sma(kdjK, kdjSignal) kdjJ = 3 * kdjK - 2 * kdjD // Calculate Moving Average ma = ta.sma(close, maLength) // SMA kullanarak ortalama hesaplama // Determine MA Direction maCrossUp = ta.crossover(close, ma) maCrossDown = ta.crossunder(close, ma) // Plot MA with Direction Color Change maColor = maCrossUp ? color.green : maCrossDown ? color.red : color.gray plot(ma, color=maColor, title="Moving Average") // Plot Trading Signals plotshape(kdjJ >= kdjOverbought ? low : na, style=shape.triangleup, location=location.belowbar, color=color.red, size=size.small, title="Short Signal") plotshape(kdjJ <= kdjOversold ? high : na, style=shape.triangledown, location=location.abovebar, color=color.green, size=size.small, title="Long Signal") // Trading Strategy with Manual Margin and MA Strategy if (kdjJ >= kdjOverbought and maCrossDown) strategy.entry("Short", strategy.short, qty=1, comment="Short Entry") if (kdjJ <= kdjOversold and maCrossUp) strategy.entry("Long", strategy.long, qty=1, comment="Long Entry")