Strategi ini menggunakan indikator KDJ dan Moving Average (MA) untuk mengidentifikasi tren pasar dan menghasilkan sinyal perdagangan. Ketika indikator KDJ melebihi tingkat overbought dan harga melanggar di bawah MA, sinyal pendek dihasilkan; ketika indikator KDJ berada di bawah tingkat oversold dan harga melanggar di atas MA, sinyal panjang dihasilkan. Dengan menggabungkan indikator KDJ dengan konfirmasi tren MA, strategi ini dapat lebih baik menangkap tren pasar sambil menghindari sinyal palsu di pasar berkisar.
Dengan menggabungkan indikator KDJ dengan rata-rata bergerak, strategi ini dapat secara efektif menangkap tren pasar dan menghasilkan sinyal perdagangan. Penggunaan informasi overbought/oversold dan arah tren yang wajar dapat mengarah pada kinerja perdagangan yang kuat. Namun, masih ada ruang untuk optimalisasi, seperti memperkenalkan lebih banyak kondisi penyaringan, manajemen posisi dinamis, stop-loss dan take-profit, dll., untuk lebih meningkatkan ketahanan dan profitabilitas strategi. Dalam aplikasi praktis, strategi perlu disesuaikan dan diuji untuk lingkungan dan instrumen pasar yang berbeda untuk memverifikasi efektivitas 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")