2025年8月2日 04:41

This commit is contained in:
2025-08-02 04:41:07 +00:00
parent 96d3601726
commit a4b2674396

View File

@@ -61,14 +61,31 @@ alert_cooldown_minutes = input.int(30, title='警报冷却时间(分钟)', m
volumeFilterSet = input(false, '═════════ Volume Filter Configuration ════════')
enable_volume_filter = input.bool(true, title='启用成交量过滤', group='VolumeFilter')
vol_filter_length = input.int(5, title='成交量过滤长度', minval=1, maxval=20, group='VolumeFilter')
vol_multiplier = input.float(1.2, title='成交量倍数', minval=0.5, maxval=5.0, step=0.01, group='VolumeFilter')
vol_multiplier = input.float(1.2, title='默认成交量倍数', minval=0.5, maxval=5.0, step=0.01, group='VolumeFilter')
volume_confirmation_bars = input.int(5, title='成交量确认K线数', minval=1, maxval=20, group='VolumeFilter')
volume_strength_multiplier = input.float(1.05, title='成交量强度倍数', minval=1.0, maxval=2.0, step=0.01, group='VolumeFilter')
volume_strength_multiplier = input.float(1.05, title='默认成交量强度倍数', minval=1.0, maxval=2.0, step=0.01, group='VolumeFilter')
volume_filter_mode = input.string('适中', title='过滤强度', options=['温和', '适中', '中等', '严格'], group='VolumeFilter')
apply_volume_to_trigger = input.bool(false, title='启动条件应用成交量过滤', group='VolumeFilter')
min_volume_ratio = input.float(0.3, title='最小成交量比率(温和模式)', minval=0.1, maxval=1.0, step=0.01, group='VolumeFilter')
min_volume_ratio = input.float(0.3, title='默认最小成交量比率', minval=0.1, maxval=1.0, step=0.01, group='VolumeFilter')
show_volume_debug = input.bool(true, title='显示成交量调试信息', group='VolumeFilter')
// ═════════ 品种特定成交量参数 ════════
volumeSymbolSet = input(false, '═════════ Symbol-Specific Volume Parameters ════════')
btc_vol_multiplier = input.float(0.8, title='BTCUSD 成交量倍数', minval=0.1, maxval=5.0, step=0.01, group='SymbolVolume')
xau_vol_multiplier = input.float(1.5, title='XAUUSD 成交量倍数', minval=0.1, maxval=5.0, step=0.01, group='SymbolVolume')
eth_vol_multiplier = input.float(1.0, title='ETHUSD 成交量倍数', minval=0.1, maxval=5.0, step=0.01, group='SymbolVolume')
gbp_vol_multiplier = input.float(2.0, title='GBPJPY 成交量倍数', minval=0.1, maxval=5.0, step=0.01, group='SymbolVolume')
btc_vol_strength = input.float(0.9, title='BTCUSD 成交量强度倍数', minval=0.5, maxval=3.0, step=0.01, group='SymbolVolume')
xau_vol_strength = input.float(1.2, title='XAUUSD 成交量强度倍数', minval=0.5, maxval=3.0, step=0.01, group='SymbolVolume')
eth_vol_strength = input.float(1.0, title='ETHUSD 成交量强度倍数', minval=0.5, maxval=3.0, step=0.01, group='SymbolVolume')
gbp_vol_strength = input.float(1.5, title='GBPJPY 成交量强度倍数', minval=0.5, maxval=3.0, step=0.01, group='SymbolVolume')
btc_min_vol_ratio = input.float(0.2, title='BTCUSD 最小成交量比率', minval=0.05, maxval=1.0, step=0.01, group='SymbolVolume')
xau_min_vol_ratio = input.float(0.4, title='XAUUSD 最小成交量比率', minval=0.05, maxval=1.0, step=0.01, group='SymbolVolume')
eth_min_vol_ratio = input.float(0.25, title='ETHUSD 最小成交量比率', minval=0.05, maxval=1.0, step=0.01, group='SymbolVolume')
gbp_min_vol_ratio = input.float(0.5, title='GBPJPY 最小成交量比率', minval=0.05, maxval=1.0, step=0.01, group='SymbolVolume')
// ═════════ 价格标签配置 ════════
labelSet = input(false, '═════════ Price Labels Configuration ════════')
show_mean_label = input.bool(true, title='显示MEAN价格标签', group='Labels')
@@ -146,13 +163,17 @@ get_volume_filter() =>
if not enable_volume_filter
[true, true] // 如果未启用成交量过滤返回true
else
// 获取品种特定的成交量参数
symbol_vol_multiplier = get_volume_multiplier()
symbol_min_vol_ratio = get_min_volume_ratio()
// 根据过滤强度调整阈值
threshold_multiplier = switch volume_filter_mode
'温和' => vol_multiplier * 0.8 // 降低20%,更容易通过
'适中' => vol_multiplier * 0.9 // 降低10%,介于温和和中等之间
'中等' => vol_multiplier
'严格' => vol_multiplier * 1.3 // 提高30%,更难通过
=> vol_multiplier
'温和' => symbol_vol_multiplier * 0.8 // 降低20%,更容易通过
'适中' => symbol_vol_multiplier * 0.9 // 降低10%,介于温和和中等之间
'中等' => symbol_vol_multiplier
'严格' => symbol_vol_multiplier * 1.3 // 提高30%,更难通过
=> symbol_vol_multiplier
vol_threshold = vol_avg * threshold_multiplier
@@ -162,12 +183,12 @@ get_volume_filter() =>
if volume_filter_mode == '温和'
// 温和模式:只过滤极低成交量的假突破
min_volume_threshold = vol_avg * min_volume_ratio // 用户可配置的最小比率
min_volume_threshold = vol_avg * symbol_min_vol_ratio // 使用品种特定的最小比率
long_volume_ok := Vol > 0 and vol_abs > min_volume_threshold
short_volume_ok := Vol < 0 and vol_abs > min_volume_threshold
else if volume_filter_mode == '适中'
// 适中模式:介于温和和中等之间,使用稍高的最小成交量要求
moderate_volume_threshold = vol_avg * (min_volume_ratio + 0.2) // 比温和模式高20%
moderate_volume_threshold = vol_avg * (symbol_min_vol_ratio + 0.2) // 比温和模式高20%
long_volume_ok := Vol > 0 and vol_abs > moderate_volume_threshold
short_volume_ok := Vol < 0 and vol_abs > moderate_volume_threshold
else
@@ -186,13 +207,16 @@ volume_trend_confirmation(signal_type) =>
volume_avg = ta.sma(math.abs(Vol), volume_confirmation_bars)
current_volume = math.abs(Vol)
// 获取品种特定的成交量强度参数
symbol_vol_strength = get_volume_strength_multiplier()
// 根据过滤强度调整成交量强度要求
strength_multiplier = switch volume_filter_mode
'温和' => volume_strength_multiplier * 0.9 // 降低10%
'适中' => volume_strength_multiplier * 0.95 // 降低5%,介于温和和中等之间
'中等' => volume_strength_multiplier
'严格' => volume_strength_multiplier * 1.2 // 提高20%
=> volume_strength_multiplier
'温和' => symbol_vol_strength * 0.9 // 降低10%
'适中' => symbol_vol_strength * 0.95 // 降低5%,介于温和和中等之间
'中等' => symbol_vol_strength
'严格' => symbol_vol_strength * 1.2 // 提高20%
=> symbol_vol_strength
volume_strength = current_volume > volume_avg * strength_multiplier
@@ -225,6 +249,34 @@ get_r1s1_distance_threshold() =>
'TICKMILL:GBPJPY' => gbp_r1s1_dist
=> default_r1s1_dist
// ═════════ 品种特定成交量参数获取 ════════
get_volume_multiplier() =>
sym = ticker.standard(syminfo.tickerid)
switch sym
'TICKMILL:BTCUSD' => btc_vol_multiplier
'TICKMILL:XAUUSD' => xau_vol_multiplier
'TICKMILL:ETHUSD' => eth_vol_multiplier
'TICKMILL:GBPJPY' => gbp_vol_multiplier
=> vol_multiplier
get_volume_strength_multiplier() =>
sym = ticker.standard(syminfo.tickerid)
switch sym
'TICKMILL:BTCUSD' => btc_vol_strength
'TICKMILL:XAUUSD' => xau_vol_strength
'TICKMILL:ETHUSD' => eth_vol_strength
'TICKMILL:GBPJPY' => gbp_vol_strength
=> volume_strength_multiplier
get_min_volume_ratio() =>
sym = ticker.standard(syminfo.tickerid)
switch sym
'TICKMILL:BTCUSD' => btc_min_vol_ratio
'TICKMILL:XAUUSD' => xau_min_vol_ratio
'TICKMILL:ETHUSD' => eth_min_vol_ratio
'TICKMILL:GBPJPY' => gbp_min_vol_ratio
=> min_volume_ratio
// ═════════ 表格文字大小转换 ════════
get_text_size() =>
switch table_text_size