
Стратегия многовременного перекрестного подтверждения случайных относительно слабых сильных индикаторов - это комплексная торговая система, которая искусно сочетает в себе перекрестные характеристики сигналов случайных относительно слабых индикаторов (Stochastic RSI) в разных временных рамках, а также дополняется фильтром средней реальной amplitude (ATR), чтобы обеспечить достаточную волатильность рынка. Основная идея стратегии заключается в том, чтобы захватить первоначальный сигнал через короткие временные рамки (5 минут) и затем использовать длинные временные рамки (15 минут) для подтверждения, что повышает надежность и точность торговых сигналов. Кроме того, стратегия также разработала механизм охлаждения сигнала, который позволяет избежать проблем с частотой торговли в короткие сроки и эффективно снижает риск чрезмерной торговли.
Эта стратегия основана на четырех ключевых механизмах: инициирование начального сигнала, подтверждение многократных временных рамок, фильтрация частоты колебаний и система охлаждения сигнала.
Первоначальный сигнал:
Механизм подтверждения многовременных рамок:
ATR фильтрация колебаний:
Сигнал охлаждения:
Стратегия использует перекрестный обратный способ управления позициями, то есть при появлении сигнала “сделай больше” устраняется любая существующая свободная позиция и создается позиция, а при появлении сигнала “сделай меньше” устраняется любая существующая свободная позиция и создается позиция.
Многоуровневая система фильтрации: Система значительно уменьшает количество ложных сигналов и повышает качество сделок, используя в сочетании подтверждение сигналов в разных временных рамках и фильтрацию ATR-волатильности. Многоуровневый механизм проверки гарантирует вход только при наиболее благоприятных рыночных условиях и снижает ненужную частоту сделок.
Умение адаптироватьсяВысоко настраиваемые параметры стратегии, включая циклы RSI, случайные показатели, сигнальные триггеры и т. д., позволяют трейдерам оптимизировать корректировки в зависимости от различных рыночных условий и личных предпочтений в отношении риска.
Ощущение колебанийС помощью фильтра ATR стратегия может интеллектуально идентифицировать состояние волатильности рынка и торговать только в условиях, когда волатильность достаточна, избегая недействительных сигналов, вызванных незначительными колебаниями на консолидированном рынке.
Защита от чрезмерной торговлиСигнальное охлаждение - инновационная конструкция, ограничивающая частоту однонаправленных сделок с помощью обязательного срока ожидания, эффективно предотвращающая создание слишком большого количества сделок в системе за короткий промежуток времени, снижая комиссионные расходы и потери проскальзывающих точек.
Ясность и прозрачностьКаждый компонент стратегии имеет четкую функцию и цель, без сложных и непонятных алгоритмов черного ящика, что позволяет трейдерам полностью понять, как работает система, что повышает уверенность в работе.
Задержка сигналаМногоуровневые механизмы подтверждения, хотя и повышают качество сигнала, неизбежно увеличивают его задержку. Особенно в быстро меняющихся рынках ожидание подтверждения в 15-минутных временных рамках может привести к пропуску оптимальной точки входа или входу в невыгодную позицию.
Параметр ЧувствительностьЭффективность этой стратегии сильно зависит от параметров, таких как цикличность стохастического RSI, перекуп и перепродажа, подтверждение ожидания окна и т. Д. Неправильная параметровая настройка может привести к пропуску эффективного сигнала или созданию слишком много ложных сигналов.
Отсутствие четких механизмов по ликвидации убытковСтратегия основывается на управлении риском, основанном на обратных сигналах, без четкой стратегии стоп-лосса. В экстремальных рыночных условиях, таких как резкий скачок или односторонний быстрый ход, это может привести к значительным потерям.
Циклы влияют друг на другаВ стратегии с несколькими временными рамками, индикаторы различных временных циклов влияют друг на друга, иногда создавая сложные отношения. Например, в некоторых рыночных условиях, 5-минутный и 15-минутный стохастический RSI могут долгое время оставаться в одном направлении, в результате чего система пропускает обратный сигнал.
Вызовы установки ATRНастройка порогового значения фильтра ATR имеет две сложные проблемы: слишком высокая установка может пропустить эффективную торговую возможность, а слишком низкая установка не может эффективно отфильтровывать ложные сигналы в низко-волатильной среде.
Динамический тормозной механизм:
strategy.exit()Команда, настраивающая стоп на основе ATR-множества, напримерstrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)。Добавить фильтр тренда:
trend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)В частности, он отметил, что “все это является одним из самых важных факторов, которые влияют на то, что происходит на рынке”.Оптимизация динамических параметров:
dynamic_overbought = 70 + math.min(15, current_atr_value / 2)。Усиленный механизм подтверждения сигнала:
bb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2), используемый для оценки отклонения цен от средних значений.Оптимизация управления капиталом:
position_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)。Стратегия относительно слабых индикаторов с перекрестным подтверждением в нескольких временных рамках - это продуманная система торговли, которая эффективно повышает качество торговли и снижает риск ложных сигналов с помощью многоуровневого механизма подтверждения и фильтрации сигналов. Эта стратегия особенно подходит для рыночных условий с высокой волатильностью. Посредством фильтра ATR удается избежать создания слишком много недействительных сигналов в низко волатильных рынках, а механизм охлаждения сигналов эффективно контролирует проблему чрезмерной торговли.
Наибольшие преимущества этой стратегии заключаются в ее логической ясности, регулируемости параметров и адаптивности, что позволяет ей адаптироваться к различным торговым видам и рыночным условиям. Однако, из-за отсутствия четкого механизма остановки убытков и возможной задержки сигналов, трейдеры должны в практическом применении добавить дополнительные меры управления риском и оптимизировать параметры в соответствии с конкретными торговыми видами и личными предпочтениями в отношении риска.
С помощью внедрения предлагаемых оптимизационных мер, таких как динамический стоп-ложажный механизм, тренд-фильтр и оптимизация управления капиталом, стратегия надеется еще больше повысить свою стабильность и прибыльность, чтобы стать более всеобъемлющей и надежной торговой системой.
/*backtest
start: 2025-05-04 00:00:00
end: 2025-06-03 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Archertoria
//@version=6
strategy("System 0530 - Stoch RSI Strategy with ATR filter")
// --- 原始指标输入参数 ---
g_stoch = "Stochastic RSI 参数"
rsi_len = input.int(14, "RSI 周期", minval=1, group=g_stoch)
stoch_rsi_len = input.int(14, "Stochastic of RSI 周期 (K Period for Stoch)", minval=1, group=g_stoch)
stoch_k_smooth = input.int(3, "Stochastic %K 平滑 (D Period for Stoch)", minval=1, group=g_stoch)
stoch_d_smooth = input.int(3, "Stochastic %D 平滑 (Smoothing for final D)", minval=1, group=g_stoch)
g_signal = "信号触发与确认参数"
stoch_5min_k_long_trigger = input.float(30.0, "5分钟 Stoch K 做多触发水平 (K需 ≤ 此值)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="5分钟图上,K线向上交叉D线时,当时的K值必须小于或等于此设定值,才会启动做多信号等待。")
stoch_5min_k_short_trigger = input.float(70.0, "5分钟 Stoch K 做空触发水平 (K需 ≥ 此值)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="5分钟图上,K线向下交叉D线时,当时的K值必须大于或等于此设定值,才会启动做空信号等待。")
stoch_15min_long_entry_level = input.int(40, "15分钟 Stoch K 做多确认阈值 (K需低于此值)", minval=0, maxval=100, group=g_signal, tooltip="15分钟图上,最终确认做多时,15分钟K线值需低于此设定值。")
stoch_15min_short_entry_level = input.int(60, "15分钟 Stoch K 做空确认阈值 (K需高于此值)", minval=0, maxval=100, group=g_signal, tooltip="15分钟图上,最终确认做空时,15分钟K线值需高于此设定值。")
wait_window_5min_bars = input.int(5, "等待15分钟信号的K线数 (5分钟图)", minval=1, group=g_signal, tooltip="5分钟信号发出后,在接下来的N根5分钟K线内等待15分钟信号确认。")
g_repeat_filter = "重复信号过滤设置"
use_signal_cooldown_filter = input.bool(true, title="启用重复信号过滤器", group=g_repeat_filter, tooltip="过滤掉短时间内同向的重复信号。")
min_bars_between_signals = input.int(18, title="同向信号最小间隔K线数", minval=1, group=g_repeat_filter, tooltip="一个信号发出后,至少等待这么多根K线才会发出下一个同向信号。")
// --- 策略特定输入参数 ---
g_strategy = "策略参数"
leverage_multiplier = input.float(1.0, "杠杆倍数 (仅影响理论头寸大小)", minval=1.0, step=0.1, group=g_strategy, tooltip="注意:TradingView策略本身不直接模拟保证金账户的杠杆爆仓。此杠杆用于计算理论头寸大小。实际杠杆效果需在支持杠杆的经纪商处体现。")
// --- ATR波动率过滤器参数 --- (止盈止损参数组已删除)
g_volatility = "波动率过滤器参数 (ATR)"
use_atr_filter = input.bool(true, "启用ATR波动率过滤器", group=g_volatility, tooltip="勾选以启用ATR过滤器。")
atr_period = input.int(14, "ATR计算周期", minval=1, group=g_volatility)
min_atr_value_ticks = input.float(10, "ATR最小跳动点数阈值", minval=0, step=1, group=g_volatility, tooltip="ATR值(以合约最小跳动点数为单位)必须大于等于此阈值才允许开仓。例如,如果最小跳动点是0.1,这里填10,则要求ATR至少为1.0。0表示不基于此项过滤。")
// --- 函数: 计算 Stochastic RSI ---
getStochasticRSI(src, rsiLen, stochLen, kSmooth, dSmooth) =>
rsi_val = ta.rsi(src, rsiLen)
stoch_rsi_k_raw = ta.stoch(rsi_val, rsi_val, rsi_val, stochLen)
stoch_rsi_k = ta.sma(stoch_rsi_k_raw, kSmooth)
stoch_rsi_d = ta.sma(stoch_rsi_k, dSmooth)
[stoch_rsi_k, stoch_rsi_d]
// --- 时间序列数据获取与Stochastic RSI计算 ---
[stoch_k_15min_val, stoch_d_15min_val] = request.security(syminfo.tickerid, "15", getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth), lookahead=barmerge.lookahead_off)
[stoch_k_5min_val, stoch_d_5min_val] = getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth)
// --- ATR 计算 ---
current_atr_value = ta.atr(atr_period)
atr_condition_met = not use_atr_filter or (min_atr_value_ticks == 0) or (current_atr_value / syminfo.mintick >= min_atr_value_ticks)
// --- 信号逻辑状态变量 ---
var bool waiting_for_15m_long_confirm = false
var bool waiting_for_15m_short_confirm = false
var int bars_elapsed_in_wait_state = 0
var int last_long_signal_bar_idx = -min_bars_between_signals
var int last_short_signal_bar_idx = -min_bars_between_signals
// --- 检测5分钟Stochastic RSI交叉事件 ---
bool stoch_5min_crossed_up_prev_bar = ta.crossover(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool stoch_5min_crossed_down_prev_bar = ta.crossunder(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool condition_5min_k_level_for_long_trigger = stoch_k_5min_val[1] <= stoch_5min_k_long_trigger
bool condition_5min_k_level_for_short_trigger = stoch_k_5min_val[1] >= stoch_5min_k_short_trigger
// --- 管理等待状态和容错期 ---
if (stoch_5min_crossed_up_prev_bar and condition_5min_k_level_for_long_trigger)
can_trigger_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
if (can_trigger_new_long)
waiting_for_15m_long_confirm := true
waiting_for_15m_short_confirm := false
bars_elapsed_in_wait_state := 1
else
if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm)
bars_elapsed_in_wait_state := 1
else if (stoch_5min_crossed_down_prev_bar and condition_5min_k_level_for_short_trigger)
can_trigger_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
if (can_trigger_new_short)
waiting_for_15m_short_confirm := true
waiting_for_15m_long_confirm := false
bars_elapsed_in_wait_state := 1
else
if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm)
bars_elapsed_in_wait_state := 1
else if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm)
bars_elapsed_in_wait_state += 1
if (bars_elapsed_in_wait_state > wait_window_5min_bars)
waiting_for_15m_long_confirm := false
waiting_for_15m_short_confirm := false
// bars_elapsed_in_wait_state := 0 // Optional reset
// --- 15分钟Stochastic RSI确认条件 ---
bool confirm_15min_long_stoch_kd_cond = stoch_k_15min_val >= stoch_d_15min_val
bool confirm_15min_short_stoch_kd_cond = stoch_k_15min_val <= stoch_d_15min_val
bool filter_15min_stoch_level_long = stoch_k_15min_val < stoch_15min_long_entry_level
bool filter_15min_stoch_level_short = stoch_k_15min_val > stoch_15min_short_entry_level
// --- 主要信号判断 (用于策略逻辑) ---
entry_long_signal = false
entry_short_signal = false
if (waiting_for_15m_long_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
if (confirm_15min_long_stoch_kd_cond and filter_15min_stoch_level_long)
can_confirm_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
if (can_confirm_new_long)
if (atr_condition_met) // ATR 过滤器检查
entry_long_signal := true
last_long_signal_bar_idx := bar_index
waiting_for_15m_long_confirm := false
bars_elapsed_in_wait_state := 0
else
waiting_for_15m_long_confirm := false
bars_elapsed_in_wait_state := 0
if (waiting_for_15m_short_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
if (confirm_15min_short_stoch_kd_cond and filter_15min_stoch_level_short)
can_confirm_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
if (can_confirm_new_short)
if (atr_condition_met) // ATR 过滤器检查
entry_short_signal := true
last_short_signal_bar_idx := bar_index
waiting_for_15m_short_confirm := false
bars_elapsed_in_wait_state := 0
else
waiting_for_15m_short_confirm := false
bars_elapsed_in_wait_state := 0
// --- 策略执行逻辑 ---
if (entry_long_signal)
strategy.entry("LE", strategy.long, comment="long entry")
if (entry_short_signal)
strategy.entry("SE", strategy.short, comment="short entry")
// --- 绘图 ---
plotshape(entry_long_signal, title="做多信号点", location=location.belowbar, color=color.new(color.green,0), style=shape.triangleup, size=size.small)
plotshape(entry_short_signal, title="做空信号点", location=location.abovebar, color=color.new(color.red,0), style=shape.triangledown, size=size.small)