Strategi ini menggunakan penunjuk KDJ dan Moving Average (MA) untuk mengenal pasti trend pasaran dan menjana isyarat perdagangan. Apabila penunjuk KDJ melebihi tahap overbought dan harga melanggar di bawah MA, isyarat pendek dihasilkan; apabila penunjuk KDJ berada di bawah tahap oversold dan harga melanggar di atas MA, isyarat panjang dihasilkan. Dengan menggabungkan penunjuk KDJ dengan pengesahan trend MA, strategi ini dapat menangkap lebih baik trend pasaran sambil mengelakkan isyarat palsu di pasaran berkisar.
Dengan menggabungkan penunjuk KDJ dengan purata bergerak, strategi ini dapat menangkap trend pasaran dengan berkesan dan menghasilkan isyarat perdagangan. Penggunaan maklumat overbought / oversold dan arah trend yang munasabah dapat membawa kepada prestasi perdagangan yang kukuh. Walau bagaimanapun, masih ada ruang untuk pengoptimuman, seperti memperkenalkan lebih banyak keadaan penapisan, pengurusan kedudukan dinamik, stop-loss dan mengambil keuntungan, dan lain-lain, untuk meningkatkan lagi kekuatan dan keuntungan strategi. Dalam aplikasi praktikal, strategi perlu disesuaikan dan diuji untuk persekitaran dan instrumen pasaran yang berbeza untuk mengesahkan keberkesanannya dan penerapannya.
/*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")