
Chiến lược này là một hệ thống giao dịch dựa trên nhiều chỉ số kỹ thuật, kết hợp các lợi thế của theo dõi xu hướng và chỉ số biến động. Lý luận cốt lõi là đánh giá hướng xu hướng bằng đường trung bình SMA, sử dụng ADX để xác nhận cường độ xu hướng, sau đó sử dụng RSI ngẫu nhiên để tìm điểm vào tốt nhất theo hướng xu hướng và sử dụng tracking stop loss để bảo vệ lợi nhuận. Chiến lược này phù hợp cho giao dịch trong chu kỳ thời gian 5 phút, có thể nắm bắt hiệu quả các cơ hội xu hướng chính trên thị trường.
Chính sách này hoạt động như sau:
Chiến lược này xây dựng một hệ thống giao dịch toàn diện bằng cách kết hợp một số chỉ số kỹ thuật cổ điển. Nó có thể nắm bắt các xu hướng chính và tìm kiếm điểm nhập cảnh tối ưu trong xu hướng, đồng thời có cơ chế quản lý rủi ro hoàn hảo. Mặc dù có một số rủi ro vốn có, chiến lược này có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau thông qua tối ưu hóa liên tục và điều chỉnh tham số tinh tế. Thiết kế mô đun của chiến lược cũng cung cấp nền tảng tốt cho việc tối ưu hóa sau này, có thể liên tục cải tiến và hoàn thiện dựa trên hiệu quả giao dịch thực tế.
/*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)