
La estrategia es un sistema de negociación basado en múltiples indicadores técnicos, que combina las ventajas del seguimiento de tendencias y los indicadores de oscilación. La lógica central es determinar la dirección de la tendencia a través de la cruz de la media SMA, confirmar la fuerza de la tendencia con el ADX, luego usar el RSI aleatorio para encontrar el mejor punto de entrada en la dirección de la tendencia y proteger los beneficios con el seguimiento de los paros.
La estrategia funciona de la siguiente manera:
La estrategia combina varios indicadores técnicos clásicos para construir un sistema de negociación integral. Puede capturar las tendencias principales y encontrar los mejores puntos de entrada en las tendencias, y tiene un mecanismo de gestión de riesgos completo. Aunque existe algún riesgo inherente, la estrategia espera mantener un rendimiento estable en diferentes entornos de mercado a través de la optimización continua y el ajuste de parámetros minuciosos. El diseño modular de la estrategia también proporciona una buena base para la optimización posterior, que puede mejorar y perfeccionarse constantemente en función de la efectividad de las operaciones reales.
/*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)