Эта стратегия использует индикатор KDJ и скользящую среднюю (MA) для выявления рыночных тенденций и генерации торговых сигналов. Когда индикатор KDJ превышает уровень перекупленности и цена превышает MA, генерируется короткий сигнал; когда индикатор KDJ ниже уровня перепродажи и цена превышает MA, генерируется длинный сигнал. Объединяя индикатор KDJ с подтверждением тренда MA, эта стратегия может лучше улавливать рыночные тенденции, избегая ложных сигналов на рыночных рынках.
Сочетая индикатор KDJ с скользящими средними, эта стратегия может эффективно улавливать рыночные тенденции и генерировать торговые сигналы. Разумное использование информации о перекупленном/перепроданном и направлении тренда может привести к надежной торговой производительности. Однако, все еще есть место для оптимизации, такой как внедрение более фильтрующих условий, динамическое управление позициями, стоп-лосс и взятка прибыли и т. д., чтобы еще больше повысить надежность и рентабельность стратегии. В практическом применении стратегия должна быть отточена и протестирована для различных рыночных сред и инструментов для проверки ее эффективности и применимости.
/*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")