
Strategi ini adalah sistem perdagangan berdasarkan pelbagai petunjuk teknikal, yang menggabungkan kelebihan trend tracking dan indikator goyah. Logik utamanya adalah untuk menilai arah trend melalui penyambungan rata-rata SMA, mengkonfirmasi kekuatan trend menggunakan ADX, kemudian menggunakan RSI rawak untuk mencari titik masuk yang paling baik dalam arah trend, dan menggunakan tracking stop loss untuk melindungi keuntungan.
Kaedah ini berfungsi seperti berikut:
Strategi ini membina sistem perdagangan yang komprehensif dengan menggabungkan beberapa petunjuk teknikal klasik. Ia mampu menangkap trend utama dan mencari titik masuk terbaik dalam trend, dengan mekanisme pengurusan risiko yang lengkap. Walaupun terdapat beberapa risiko yang wujud, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam keadaan pasaran yang berbeza melalui pengoptimuman berterusan dan penyesuaian parameter yang halus. Reka bentuk modular strategi juga menyediakan asas yang baik untuk pengoptimuman selanjutnya, yang dapat terus diperbaiki dan disempurnakan berdasarkan kesan perdagangan sebenar.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("XAU/USD 5M SMA + Stochastic RSI + ADX Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)
// === Входные параметры ===
sma_fast_length = input(20, title="SMA Fast Period")
sma_slow_length = input(200, title="SMA Slow Period")
stoch_k_length = input(14, title="Stochastic RSI K Length")
stoch_d_length = input(3, title="Stochastic RSI D Length")
adx_length = input(10, title="ADX Period")
adx_smoothing = input(10, title="ADX Smoothing Period")
atr_length = input(14, title="ATR Period")
// === Уровни фильтрации ===
adx_min_trend = input(20, title="ADX Minimum Trend Strength") // Было 25 → уменьшено до 20
stoch_buy_level = input(30, title="Stoch RSI Buy Level") // Было 20 → увеличено для входов
stoch_sell_level = input(70, title="Stoch RSI Sell Level") // Было 80 → снижено для входов
// === Трейлинг-стоп ===
use_trailing_stop = input(true, title="Enable Trailing Stop")
trailing_stop_pips = input(40, title="Trailing Stop (Pips)") // Было 50 → уменьшено для активной торговли
trailing_step_pips = input(5, title="Trailing Step (Pips)")
// === Управление позициями ===
entry_delay = input(1, title="Bars Delay Before Re-Entry") // Было 2 → уменьшено до 1
// === Расчёт индикаторов ===
sma_fast = ta.sma(close, sma_fast_length)
sma_slow = ta.sma(close, sma_slow_length)
[diPlus, diMinus, adx_value] = ta.dmi(adx_length, adx_smoothing)
atr_value = ta.atr(atr_length)
// === Stochastic RSI ===
stoch_rsi_k = ta.stoch(close, stoch_k_length, stoch_d_length, stoch_d_length)
stoch_rsi_d = ta.sma(stoch_rsi_k, stoch_d_length)
// === Фильтр волатильности (Убран, если мешает входам) ===
// atr_threshold = ta.sma(atr_value, 20)
// volatility_ok = atr_value > atr_threshold // Комментируем, если ATR слишком строгий
// === Пересечения ===
sma_crossover = ta.crossover(sma_fast, sma_slow)
sma_crossunder = ta.crossunder(sma_fast, sma_slow)
stoch_rsi_crossover = ta.crossover(stoch_rsi_k, stoch_rsi_d)
stoch_rsi_crossunder = ta.crossunder(stoch_rsi_k, stoch_rsi_d)
// === Условия входа ===
longCondition = sma_crossover and adx_value > adx_min_trend and stoch_rsi_crossover and stoch_rsi_k < stoch_buy_level
shortCondition = sma_crossunder and adx_value > adx_min_trend and stoch_rsi_crossunder and stoch_rsi_k > stoch_sell_level
// === Исправленный таймер на повторные входы ===
barsSinceExit = ta.barssince(strategy.position_size == 0)
canReenter = not na(barsSinceExit) and barsSinceExit > entry_delay
// === Переворот позиции (исправлен) ===
if strategy.position_size > 0 and shortCondition and canReenter
strategy.close("BUY")
strategy.entry("SELL", strategy.short)
if strategy.position_size < 0 and longCondition and canReenter
strategy.close("SELL")
strategy.entry("BUY", strategy.long)
// === Открытие позиций ===
if strategy.position_size == 0 and longCondition
strategy.entry("BUY", strategy.long)
if strategy.position_size == 0 and shortCondition
strategy.entry("SELL", strategy.short)
// === Трейлинг-стоп (работает корректно) ===
if use_trailing_stop
strategy.exit("Exit Long", from_entry="BUY", trail_points=trailing_stop_pips, trail_offset=trailing_step_pips)
strategy.exit("Exit Short", from_entry="SELL", trail_points=trailing_stop_pips, trail_offset=trailing_step_pips)
// === Визуализация ===
plot(sma_fast, color=color.blue, title="SMA 20")
plot(sma_slow, color=color.red, title="SMA 200")
hline(stoch_buy_level, title="Stoch RSI Buy Level", color=color.blue)
hline(stoch_sell_level, title="Stoch RSI Sell Level", color=color.purple)
hline(adx_min_trend, title="ADX Min Trend Level", color=color.orange)