
Strategi indikator kuat relatif lemah acak multi-frame timeframe cross-confirmation adalah sistem perdagangan komprehensif yang dengan cerdik menggabungkan karakteristik sinyal silang acak relatif kuat indikator ((Stochastic RSI) dalam berbagai kerangka waktu, dan dilengkapi dengan filter rata-rata true amplitude ((ATR) untuk memastikan pasar memiliki cukup volatilitas. Gagasan inti dari strategi ini adalah untuk menangkap sinyal awal melalui kerangka waktu yang singkat (5 menit) dan kemudian menggunakan kerangka waktu yang panjang (15 menit) untuk konfirmasi, sehingga meningkatkan keandalan dan akurasi sinyal perdagangan. Selain itu, strategi ini juga merancang mekanisme penyejukan sinyal, menghindari masalah perdagangan yang sering terjadi dalam waktu singkat, dan secara efektif mengurangi risiko perdagangan yang berlebihan.
Strategi ini didasarkan pada empat mekanisme inti: pemicu sinyal awal, konfirmasi multi-frame waktu, penyaringan tingkat fluktuasi, dan sistem pendinginan sinyal.
Pemicu sinyal awal:
Mekanisme Konfirmasi Multi-Frames Time:
ATR fluktuasi rate filter:
Sistem pendingin sinyal:
Strategi ini menggunakan cara berbalik silang untuk mengelola posisi, yaitu ketika muncul sinyal untuk melakukan lebih banyak, maka akan dihapus semua posisi kosong yang ada dan dibuat posisi kosong, dan ketika muncul sinyal untuk melakukan lebih banyak, maka akan dihapus semua posisi kosong yang ada dan dibuat posisi kosong.
Sistem filtrasi bertingkatDengan mengkombinasikan pengakuan sinyal dari frame waktu yang berbeda dan penyaringan tingkat fluktuasi ATR, sistem secara signifikan mengurangi sinyal palsu dan meningkatkan kualitas transaksi.
AdaptifParameter strategi sangat dapat disesuaikan, termasuk siklus RSI, leveling indikator acak, dan leveling trigger sinyal, yang memungkinkan pedagang untuk melakukan penyesuaian optimal sesuai dengan berbagai kondisi pasar dan preferensi risiko pribadi.
Sensitivitas terhadap fluktuasiDengan menggunakan filter ATR, strategi dapat secara cerdas mengidentifikasi kondisi pasar yang bergejolak, dan hanya berdagang dalam kondisi yang cukup bergejolak, menghindari sinyal yang tidak efektif yang dihasilkan oleh fluktuasi kecil di pasar yang disusun.
Perlindungan dari OvertradingSistem pendingin sinyal adalah desain inovatif yang membatasi frekuensi transaksi dalam satu arah dengan batas waktu tunggu yang wajib, yang secara efektif mencegah sistem menghasilkan terlalu banyak transaksi dalam waktu singkat, mengurangi biaya komisi dan kehilangan titik slip.
Logika yang jelas dan transparanSetiap komponen strategi memiliki fungsi dan tujuan yang jelas, tanpa algoritma kotak hitam yang rumit dan sulit dimengerti, memungkinkan pedagang untuk sepenuhnya memahami cara kerja sistem, meningkatkan kepercayaan diri dalam operasi.
Lagging sinyalMelanjutkan proses ini, Anda akan mendapatkan lebih banyak informasi tentang apa yang terjadi di pasar. Melanjutkan proses ini, Anda akan mendapatkan lebih banyak informasi tentang apa yang terjadi di pasar. Melanjutkan proses ini, Anda akan mendapatkan lebih banyak informasi tentang apa yang terjadi di pasar.
Parameter SensitivitasEfektivitas strategi ini sangat tergantung pada pengaturan parameter, seperti siklus Stochastic RSI, overbought overbought, dan konfirmasi menunggu jendela. Pengaturan parameter yang tidak tepat dapat menyebabkan sinyal yang tidak valid atau menghasilkan terlalu banyak sinyal palsu.
Kurangnya mekanisme penghentian yang jelasStrategi ini terutama bergantung pada sinyal mundur untuk mengelola risiko, tanpa strategi stop loss yang jelas. Dalam kondisi pasar yang ekstrim, seperti lompatan besar atau pergerakan cepat satu arah, ini dapat menyebabkan kerugian yang lebih besar.
Siklus saling mempengaruhiDalam strategi multi-frame, indikator dari setiap periode waktu saling mempengaruhi, kadang-kadang membentuk hubungan yang rumit. Misalnya, dalam kondisi pasar tertentu, RSI Stokastik 5 menit dan 15 menit mungkin memiliki arah yang konsisten untuk waktu yang lama, menyebabkan sistem kehilangan sinyal pembalikan.
Tantangan pengaturan ATRPengaturan ambang batas filter ATR memiliki dua masalah: terlalu tinggi akan kehilangan peluang perdagangan yang efektif, dan terlalu rendah tidak akan efektif memfilter sinyal palsu di lingkungan yang berfluktuasi rendah.
Mekanisme stop kerusakan dinamis:
strategy.exit()Perintah yang mengatur stop loss berdasarkan ATR, sepertistrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)。Tambahkan filter tren:
trend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)Ini adalah kondisi filter dari arah transaksi.Optimalisasi parameter dinamis:
dynamic_overbought = 70 + math.min(15, current_atr_value / 2)。Penguatan mekanisme konfirmasi sinyal:
bb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2), digunakan untuk mengevaluasi deviasi harga dari nilai rata-rata.Pengelolaan dana yang optimal:
position_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)。Strategi indikator yang relatif kuat dengan konfirmasi acak multi-frame timeframe adalah sistem perdagangan yang dirancang dengan baik yang secara efektif meningkatkan kualitas perdagangan dan mengurangi risiko sinyal palsu melalui mekanisme konfirmasi dan penyaringan sinyal bertingkat. Strategi ini sangat cocok untuk lingkungan pasar yang berfluktuasi tinggi, dengan filter ATR untuk menghindari terlalu banyak sinyal tidak valid di pasar yang berfluktuasi rendah, sementara mekanisme pendinginan sinyal secara efektif mengendalikan masalah perdagangan berlebih.
Keuntungan terbesar dari strategi ini adalah kejernihan logis, parameter yang dapat disesuaikan, dan kemampuan untuk beradaptasi dengan berbagai jenis perdagangan dan lingkungan pasar. Namun, karena kurangnya mekanisme penghentian kerugian yang jelas dan keterlambatan sinyal yang mungkin ada, pedagang harus menambahkan langkah-langkah manajemen risiko tambahan dalam aplikasi praktis dan mengoptimalkan parameter sesuai dengan jenis perdagangan tertentu dan preferensi risiko pribadi.
Strategi ini diharapkan dapat meningkatkan stabilitas dan profitabilitasnya menjadi sistem perdagangan yang lebih komprehensif dan dapat diandalkan dengan memperkenalkan langkah-langkah optimasi yang disarankan, seperti mekanisme stop loss dinamis, filter tren, dan pengoptimalan manajemen dana.
/*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)