
Strategi penyenaraian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian rantaian r
Strategi ini beroperasi berdasarkan empat mekanisme teras: pemicu isyarat awal, pengesahan bingkai masa berbilang, penapisan kadar lonjakan dan sistem penyejukan isyarat.
Pencetus isyarat awal:
Mekanisme pengesahan pelbagai kerangka masa:
Penapis kadar turun naik ATR:
Sistem penyejukan isyarat:
Strategi ini menggunakan cara membalikkan kedudukan yang berlawanan, iaitu apabila terdapat banyak isyarat, ia akan menghapuskan mana-mana kedudukan kosong yang sedia ada dan membina lebih banyak kedudukan, dan apabila terdapat isyarat untuk menghapuskan sebarang kedudukan kosong yang sedia ada dan membina lebih banyak kedudukan kosong.
Sistem penapisan bertingkatDengan menggabungkan pengesahan isyarat dan penapisan kadar turun naik ATR dalam pelbagai bingkai masa, sistem ini mengurangkan isyarat palsu dan meningkatkan kualiti perdagangan. Mekanisme pengesahan bertingkat memastikan kemasukan hanya dalam keadaan pasaran yang paling menguntungkan, mengurangkan frekuensi perdagangan yang tidak perlu.
Kebolehan menyesuaikan diriParameter strategi yang sangat disesuaikan, termasuk kitaran RSI, nilai rataan penunjuk rawak, dan nilai rendah isyarat, membolehkan peniaga menyesuaikan diri secara optimum mengikut keadaan pasaran yang berbeza dan keutamaan risiko peribadi.
Keupayaan untuk mengesan kadar turun naikMelalui penapis ATR, strategi dapat mengenal pasti keadaan turun naik pasaran dengan bijak dan hanya berdagang dalam keadaan yang cukup turun naik, mengelakkan isyarat tidak sah yang dihasilkan oleh turun naik kecil dalam pasaran yang disusun.
Perlindungan daripada OvertradingMekanisme penyejukan isyarat adalah reka bentuk inovatif yang mengehadkan kekerapan transaksi dalam satu arah melalui tempoh menunggu yang wajib, yang berkesan menghalang sistem daripada menghasilkan terlalu banyak transaksi dalam masa yang singkat, mengurangkan kos komisen dan kehilangan titik slip.
Logik yang jelas dan telusSetiap komponen strategi mempunyai fungsi dan tujuan yang jelas, tanpa algoritma kotak hitam yang rumit dan tidak dapat difahami, yang membolehkan peniaga memahami sepenuhnya bagaimana sistem berfungsi, meningkatkan keyakinan dalam operasi.
Lagging isyaratMekanisme pengesahan bertingkat, walaupun meningkatkan kualiti isyarat, juga pasti meningkatkan keterlambatan isyarat. Terutama dalam pasaran yang berubah dengan cepat, menunggu pengesahan dalam jangka masa 15 minit boleh menyebabkan kehilangan tempat masuk yang terbaik atau masuk dalam kedudukan yang tidak menguntungkan.
Kepekaan ParameterKesan strategi ini sangat bergantung kepada parameter yang ditetapkan, seperti kitaran Stochastic RSI, overbought dan oversold, pengesahan menunggu tingkap, dan sebagainya. Tetapan parameter yang tidak sesuai boleh menyebabkan kehilangan isyarat yang sah atau menghasilkan terlalu banyak isyarat palsu.
Kurangnya mekanisme penghentian kerugian yang jelasStrategi ini bergantung kepada isyarat terbalik untuk menguruskan risiko, tanpa strategi hentian kerugian yang jelas. Dalam keadaan pasaran yang melampau, seperti lompatan besar atau pergerakan pesat satu arah, ini boleh menyebabkan kerugian yang besar.
Siklus saling mempengaruhiDalam strategi pelbagai bingkai masa, indikator setiap kitaran masa saling mempengaruhi, kadang-kadang membentuk hubungan yang rumit. Sebagai contoh, dalam keadaan pasaran tertentu, RSI Stochastic 5 minit dan 15 minit mungkin berada dalam arah yang konsisten untuk masa yang lama, menyebabkan sistem kehilangan isyarat pembalikan.
Cabaran untuk menetapkan ATRTetapan nilai ambang penapis ATR mempunyai dua masalah: tetapan yang terlalu tinggi akan kehilangan peluang perdagangan yang berkesan, dan tetapan yang terlalu rendah tidak dapat menyaring isyarat palsu dalam persekitaran yang bergelombang rendah.
Mekanisme penangguhan kerosakan dinamik:
strategy.exit()Perintah yang menetapkan stop loss berdasarkan ATR, sepertistrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)。Tambah penapis trend:
trend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)Ia adalah syarat penapis untuk arah transaksi.Optimumkan parameter dinamik:
dynamic_overbought = 70 + math.min(15, current_atr_value / 2)。Mekanisme pengesahan isyarat yang dipertingkat:
bb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2)Untuk menilai perbezaan harga dan nilai purata.Pengurusan wang yang lebih baik:
position_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)。Strategi penunjuk yang agak kuat yang disahkan secara rawak dengan pelbagai kerangka masa adalah sistem perdagangan yang direka dengan baik yang meningkatkan kualiti perdagangan dengan mekanisme pengesahan dan penapisan isyarat bertingkat. Strategi ini sangat sesuai untuk persekitaran pasaran yang bergelombang, dengan penapis ATR untuk mengelakkan terlalu banyak isyarat tidak sah di pasaran yang bergelombang rendah, dan mekanisme penyejukan isyarat yang berkesan untuk mengawal masalah perdagangan berlebihan.
Kelebihan terbesar strategi ini adalah kejernihan logiknya, parameter yang boleh disesuaikan, dan kebolehlakuannya yang kuat, yang membolehkannya menyesuaikan diri dengan pelbagai jenis perdagangan dan persekitaran pasaran. Walau bagaimanapun, kerana kekurangan mekanisme penghentian kerugian yang jelas dan kemunduran isyarat yang mungkin ada, peniaga harus menambah langkah-langkah pengurusan risiko tambahan dalam aplikasi praktikal dan mengoptimumkan parameter mengikut jenis perdagangan tertentu dan pilihan risiko peribadi.
Dengan memperkenalkan langkah-langkah pengoptimuman yang dicadangkan, seperti mekanisme menghentikan kerugian dinamik, penapis trend, dan pengoptimuman pengurusan dana, strategi ini dijangka meningkatkan kestabilan dan keuntungan, menjadi sistem perdagangan yang lebih komprehensif dan boleh dipercayai.
/*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)