
Strategi ini menggunakan indikator KDJ dan purata bergerak ((MA) untuk mengenal pasti trend pasaran dan menghasilkan isyarat perdagangan. Ia menghasilkan isyarat penyingkiran apabila indikator KDJ melebihi kawasan overbuy dan harga jatuh di bawah MA; ia menghasilkan isyarat penyingkiran apabila indikator KDJ berada di bawah kawasan oversell dan harga memecahkan MA. Dengan menggabungkan indikator KDJ dan MA untuk mengesahkan trend, strategi ini dapat lebih memahami trend pasaran, sambil mengelakkan isyarat palsu yang berlaku dalam keadaan gegaran.
Strategi ini dapat memahami trend pasaran dengan lebih baik dan menghasilkan isyarat perdagangan melalui gabungan indikator dan purata bergerak KDJ. Penggunaan maklumat overbought dan oversold dan arah trend yang wajar dapat menghasilkan prestasi perdagangan yang mantap. Tetapi strategi masih mempunyai ruang untuk pengoptimuman, seperti memperkenalkan lebih banyak syarat penapisan, pengurusan kedudukan posisi dinamik dan henti rugi, untuk meningkatkan kestabilan dan keuntungan strategi. Strategi ini memerlukan penyesuaian dan pengujian untuk persekitaran dan parameter pasaran yang berbeza untuk membuktikan keberkesanan dan kesesuaiannya dalam aplikasi sebenar.
/*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")