Multi-Time-Frame-Cross-Confirmation-Strategie für stochastische Relative-Stärke-Indexe und Volatilitätsfiltersystem

RSI ATR SRSI MTF
Erstellungsdatum: 2025-06-04 10:31:03 zuletzt geändert: 2025-06-04 10:31:03
Kopie: 0 Klicks: 274
2
konzentrieren Sie sich auf
319
Anhänger

Multi-Time-Frame-Cross-Confirmation-Strategie für stochastische Relative-Stärke-Indexe und Volatilitätsfiltersystem Multi-Time-Frame-Cross-Confirmation-Strategie für stochastische Relative-Stärke-Indexe und Volatilitätsfiltersystem

Überblick

Die Multi-Time-Frame-Cross-Confirmation-Random-Relative-Strength-Weakness-Strategie ist ein integriertes Handelssystem, das die Signalkreuzung von Stochastic RSI in verschiedenen Zeitrahmen geschickt kombiniert und mit einem Filter für die durchschnittliche tatsächliche Breite von ATR versehen ist, um sicherzustellen, dass der Markt ausreichend Volatilität aufweist. Die Kernidee der Strategie ist es, das anfängliche Signal über einen kurzen Zeitrahmen (5 Minuten) zu erfassen und dann über einen längeren Zeitrahmen (15 Minuten) zu bestätigen, um die Zuverlässigkeit und Genauigkeit des Handelssignals zu verbessern.

Strategieprinzip

Die Strategie basiert auf vier zentralen Mechanismen: Erstsignal-Triggerung, Multi-Time-Frame-Bestätigung, Schwankungsrate-Filterung und Signalkühlung.

  1. Auslöser für das erste Signal

    • Auf dem 5-Minuten-Chart tritt das System in den Multi-Signal-Wartezustand, wenn der Stochastic RSI auf der %K-Linie die %D-Linie durchbricht und der %K-Wert zu diesem Zeitpunkt unter dem vorgegebenen Überverkaufsniveau liegt (default 30).
    • Wenn der Stochastic RSI unterhalb der %K-Linie die %D-Linie durchbricht und der %K-Wert höher ist als der voreingestellte Überkauflevel (default 70), wird das System in den Wartezustand für das Short-Signal gestellt.
  2. Mehrfache Zeitrahmenbestätigung

    • Sobald das System in der Signalwartestatus ist, sucht es innerhalb des vorgegebenen Wartefensters (die Standard-K-Linie 5x5 Minuten) nach Bestätigung des 15-Minuten-Zeitrahmens.
    • Mehrfachbestätigung: Der Stochastic RSI %K-Wert auf dem 15-Minuten-Chart ist größer oder gleich dem %D-Wert, und der %K-Wert ist kleiner als der voreingestellte Threshold ((Standard 40)).
    • Bestätigungsbedingung: Der Stochastic RSI %K-Wert auf dem 15-Minuten-Chart ist kleiner oder gleich dem %D-Wert, und der %K-Wert ist höher als der voreingestellte Schwellenwert ((Standard 60) ◦
  3. ATR-Schwankungsrate-Filtermechanismus

    • Das System berechnet den aktuellen ATR-Wert und wandelt ihn in die Mindestbeats-Punkte um.
    • Das Handelssignal wird nur ausgeführt, wenn der aktuelle ATR-Wert die vom Benutzer vorgegebene Mindestschwelle (die Standardwert von 10 Pulspunkten) überschreitet.
    • Dieser Mechanismus sorgt dafür, dass nur dann gehandelt wird, wenn der Markt ausreichend volatil ist, und vermeidet falsche Signale, die durch geringfügige Preisschwankungen in niedrig volatilen Märkten erzeugt werden.
  4. Signalkühlung

    • Sobald ein Transaktionssignal erzeugt wurde, wurde die minimale Anzahl der vorgegebenen K-Linien gezwungen zu warten (die Standardzahl beträgt 18 K-Linien), bevor neue Signale in derselben Richtung erzeugt werden durften.
    • Dieser Mechanismus verhindert effektiv, dass die Systeme zu viele synchronisierte Signale in kurzer Zeit erzeugen, wodurch das Risiko eines übermäßigen Handels verringert wird.

Die Strategie verwaltet die Positionen in einer Art von Kreuz-Umkehrung, d.h. bei einem Mehrwertsignal werden alle vorhandenen Leerpositionen abgebaut und ein Mehrwert eingerichtet. Bei einem Leerwertsignal werden alle vorhandenen Leerpositionen abgebaut und ein Mehrwertsignal eingerichtet.

Strategische Vorteile

  1. Mehrstufige FiltersystemeDurch die Kombination von Signalbestätigung in verschiedenen Zeitrahmen und ATR-Schwankungs-Filter erhöht das System die Qualität der Transaktionen und reduziert die Anzahl der Falschsignale. Die mehrstufige Verifizierungsmechanismen sorgen dafür, dass der Zugang nur unter den günstigsten Marktbedingungen erfolgt, wodurch die unnötige Häufigkeit der Transaktionen reduziert wird.

  2. AnpassungsfähigkeitDie Strategieparameter sind sehr individuell anpassbar, einschließlich RSI-Perioden, Zufallsindikator-Gleichungen und Signal-Trigger-Tiefs, so dass der Händler sich optimal an unterschiedliche Marktbedingungen und persönliche Risikopräferenzen anpassen kann.

  3. SchwankungsempfindlichkeitMit dem ATR-Filter ist die Strategie in der Lage, die Marktschwankungen intelligent zu erkennen und nur unter Bedingungen zu handeln, die voller Volatilität sind, und vermeidet unwirksame Signale, die durch geringe Schwankungen in einem konsolidierten Markt erzeugt werden.

  4. Schutz vor ÜbertriebenheitDie Signalkühlmechanismen sind ein innovatives Design, das die Häufigkeit der gleichgerichteten Transaktionen durch eine obligatorische Wartezeit einschränkt, wodurch effektiv verhindert wird, dass die Systeme zu viele Transaktionen in kurzer Zeit erzeugen, und die Kosten für die Provisionen und den Verlust von Schlupfpunkten reduziert werden.

  5. Klarheit und TransparenzEs gibt keine komplizierten, schwer verständlichen Black-Box-Algorithmen, die es dem Händler ermöglichen, die Funktionsweise des Systems vollständig zu verstehen, was das Vertrauen in den Handel erhöht.

Strategisches Risiko

  1. SignalverzögerungDie Mehrfachbestätigungsmechanismen erhöhen zwar die Signalqualität, erhöhen aber zwangsläufig auch die Verzögerung des Signals. Besonders in schnelllebigen Märkten kann das Warten auf die Bestätigung eines 15-Minuten-Zeitrahmens dazu führen, dass die besten Einstiegspunkte verpasst oder in einer ungünstigen Position eingegeben werden.

  2. ParameterempfindlichkeitDie Wirksamkeit der Strategie ist stark von Parameter-Settings abhängig, wie z. B. der Zyklus des stochastischen RSI, Überkauf-Überverkauf-Schwellenwerte, Bestätigung von Wartefenstern usw. Eine unangemessene Parameter-Setting kann dazu führen, dass ein gültiges Signal verpasst wird oder zu viele falsche Signale erzeugt werden.

  3. Fehlen eindeutiger SchadensersatzmechanismenDie Strategie beruht hauptsächlich auf Rückwärtssignalen, um das Risiko zu verwalten. Es gibt keine eindeutige Stop-Loss-Strategie.

  4. Zyklen beeinflussen einanderIn einer Multi-Time-Frame-Strategie beeinflussen sich die Indikatoren der einzelnen Zeiträume gegenseitig und bilden manchmal eine komplexe Beziehung. Zum Beispiel kann der 5-minütige und der 15-minütige Stochastic RSI unter bestimmten Marktbedingungen eine lange Zeit in der gleichen Richtung bleiben, was dazu führt, dass das System ein Umkehrsignal verpasst.

  5. ATR-Threshold-Einstellungs-HerausforderungenDie Threshold-Einstellung des ATR-Filters hat zwei Schwierigkeiten: Eine zu hohe Einstellung verpasst eine effektive Handelsmöglichkeit, eine zu niedrige Einstellung filtert keine falschen Signale in einer niedrig schwankenden Umgebung.

Richtung der Strategieoptimierung

  1. Dynamische Schadensbegrenzung

    • Die dynamischen Stop-Loss-Levels werden auf der Grundlage von ATR oder anderen Volatilitätsindikatoren entworfen, so dass die Risikokontrollen sich anpassungsfähig an die Marktvolatilität anpassen können.
    • Implementierung: Hinzufügenstrategy.exit()Befehle, die auf der Grundlage von ATR-Multiplikatoren eingestellt wurden, wiestrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)
  2. Trendfilter hinzufügen

    • In Kombination mit Trendindikatoren für längere Zeiträume (z. B. 1 Stunde oder 4 Stunden), wie beispielsweise Moving Averages oder MACD, wird sichergestellt, dass die Handelsrichtung mit den wichtigsten Trends übereinstimmt.
    • Wie das funktioniert: Hinzufügen von Code, um Trendindikatoren für höhere Zeiträume zu erhalten, wie z. B.trend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)Das sind die Filterbedingungen für den Handel.
  3. Optimierung der dynamischen Parameter

    • Die automatische Anpassung der Strategieparameter basierend auf Marktvolatilität oder Handelszeiten ermöglicht es dem System, sich besser an unterschiedliche Marktbedingungen anzupassen.
    • Umsetzungsweise: Funktionen können geschrieben werden, die die Überkauf-Überverkauf-Schwelle an den aktuellen ATR-Wert oder an die Dynamik der Marktschwankungen anpassen, wie z. B.dynamic_overbought = 70 + math.min(15, current_atr_value / 2)
  4. Erweiterte Signalbestätigung

    • Neben dem stochastischen RSI werden weitere Indikatoren wie Brin-Band, Transaktionsvolumen oder Preismodelle als zusätzliche Bestätigungsbedingungen eingeführt.
    • Implementierung: Hinzufügen von Brin-Band-Abweichungs-Detektionscodes, wiebb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2)Die Abweichungen zwischen den Preisen und den Durchschnittswerten werden in den folgenden Tabellen ermittelt:
  5. Optimierung der Geldverwaltung

    • Umsetzen Sie dynamische Positionsmanagement, die Risikobergrenze für jeden Handel entsprechend der aktuellen Trendstärke, der Marktvolatilität und der Dynamik der historischen Gewinnrate anpassen.
    • Umsetzungsart: Code hinzufügen, der die dynamische Positionsgröße berechnet, basierend auf der letzten N-Trade-Gewinnrate, wieposition_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)

Zusammenfassen

Die Multi-Time-Frame-Cross-Confirmation-Random-Relativ-Weak Indicator-Strategie ist ein raffiniertes Handelssystem, das die Handelsqualität durch mehrere Ebenen von Signalbestätigung und Filtermechanismen effektiv verbessert und das Risiko von Falschsignalen reduziert. Die Strategie ist besonders für ein volatiles Marktumfeld geeignet. Durch den ATR-Filter werden zu viele unwirksame Signale in niedrig schwankenden Märkten vermieden, während ein Signalkühlmechanismus das Problem des Überhandels wirksam kontrolliert.

Der größte Vorteil dieser Strategie liegt in ihrer logischen Klarheit, der Anpassbarkeit der Parameter und der Anpassungsfähigkeit, die sie an verschiedene Handelsarten und Marktumgebungen anpassen lässt. Aufgrund des Fehlens eines eindeutigen Stop-Loss-Mechanismus und der möglichen Signalverzögerung sollte der Händler jedoch zusätzliche Risikomanagementmaßnahmen in der praktischen Anwendung hinzufügen und die Parameter entsprechend der jeweiligen Handelsarten und der persönlichen Risikopräferenzen optimieren.

Durch die Einführung von empfohlenen Optimierungsmaßnahmen wie Dynamic Stop Losses, Trendfilter und Optimierung der Kapitalverwaltung wird die Strategie ihre Stabilität und Profitabilität weiter verbessern und zu einem umfassenderen und zuverlässigeren Handelssystem werden.

Strategiequellcode
/*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)