From a4b267439638877b3766922f75cbfa70f182576b Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 2 Aug 2025 04:41:07 +0000 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B48=E6=9C=882=E6=97=A5=2004:41?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3in1.pine | 82 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/3in1.pine b/3in1.pine index 0bcc6c5..9409016 100644 --- a/3in1.pine +++ b/3in1.pine @@ -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