From f2dd6d78b4e2c9f3701103d529a990f8825c838e Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 2 Aug 2025 04:13:40 +0000 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B48=E6=9C=882=E6=97=A5=2004:13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...‘¨æœŸ.pine => srbrå¤šæ—¶é—´å‘¨æœŸåªæ˜¾ç¤ºè¡¨æ ¼æ•°æ®.pine | 78 ++++- srbr警报.pine | 270 ++++++++++++++++++ 2 files changed, 334 insertions(+), 14 deletions(-) rename srbr多时间周期.pine => srbrå¤šæ—¶é—´å‘¨æœŸåªæ˜¾ç¤ºè¡¨æ ¼æ•°æ®.pine (91%) create mode 100644 srbr警报.pine diff --git a/srbr多时间周期.pine b/srbrå¤šæ—¶é—´å‘¨æœŸåªæ˜¾ç¤ºè¡¨æ ¼æ•°æ®.pine similarity index 91% rename from srbr多时间周期.pine rename to srbrå¤šæ—¶é—´å‘¨æœŸåªæ˜¾ç¤ºè¡¨æ ¼æ•°æ®.pine index 66be564..c2d9042 100644 --- a/srbr多时间周期.pine +++ b/srbrå¤šæ—¶é—´å‘¨æœŸåªæ˜¾ç¤ºè¡¨æ ¼æ•°æ®.pine @@ -300,27 +300,61 @@ switch // 多时间周期计算 //************************************************************************************************************ -// â•â•â•â•â•â•â•â•╠多时间周期专用计算函数(无绘图æ“作) â•â•â•â•â•â•â•â• -// 为了é¿å…request.security()中的绘图函数错误,创建简化版本 +// â•â•â•â•â•â•â•â•â• å¤šæ—¶é—´å‘¨æœŸä¸“ç”¨è®¡ç®—å‡½æ•°ï¼ˆåŒ…å«æˆäº¤é‡è¿‡æ»¤ï¼Œæ— ç»˜å›¾æ“作) â•â•â•â•â•â•â•â• +// 为了é¿å…request.security()ä¸­çš„ç»˜å›¾å‡½æ•°é”™è¯¯ï¼Œåˆ›å»ºåŒ…å«æˆäº¤é‡è¿‡æ»¤çš„版本 calcSRForMTF(src, lookback) => - // 使用简化的支撑阻力计算,基于pivot点但无绘图 - pivotHigh = ta.pivothigh(src, lookback, lookback) - pivotLow = ta.pivotlow(src, lookback, lookback) + // Delta Volume Function (与主函数相åŒ) + posVol = 0.0 + negVol = 0.0 + var isBuyVolume = true - // 简化的支撑阻力ä½è¯†åˆ« + switch + close > open => + isBuyVolume := true + isBuyVolume + close < open => + isBuyVolume := false + isBuyVolume + + if isBuyVolume + posVol := posVol + volume + posVol + else + negVol := negVol - volume + negVol + + Vol = posVol + negVol + + // æˆäº¤é‡è¿‡æ»¤é˜ˆå€¼ + vol_hi = ta.highest(Vol / 2.5, vol_len) + vol_lo = ta.lowest(Vol / 2.5, vol_len) + + // 支撑阻力ä½è¯†åˆ«ï¼ˆä¸Žä¸»å‡½æ•°ç›¸åŒçš„逻辑) var float mtf_support = na var float mtf_resistance = na - if not na(pivotLow) + pivotHigh = ta.pivothigh(src, lookback, lookback) + pivotLow = ta.pivotlow(src, lookback, lookback) + + // 支撑ä½ï¼šéœ€è¦æ­£æˆäº¤é‡ä¸”大于高阈值 + if not na(pivotLow) and Vol > vol_hi mtf_support := pivotLow - if not na(pivotHigh) + + // 阻力ä½ï¼šéœ€è¦è´Ÿæˆäº¤é‡ä¸”å°äºŽä½Žé˜ˆå€¼ + if not na(pivotHigh) and Vol < vol_lo mtf_resistance := pivotHigh - // 简化的çªç ´åˆ¤æ–­ - mtf_brekout_res = src > mtf_resistance - mtf_res_holds = src <= mtf_resistance and src >= mtf_resistance * 0.995 - mtf_sup_holds = src >= mtf_support and src <= mtf_support * 1.005 - mtf_brekout_sup = src < mtf_support + // çªç ´åˆ¤æ–­é€»è¾‘ + atr = ta.atr(200) + withd = atr * box_withd + + mtf_support_1 = mtf_support - withd + mtf_resistance_1 = mtf_resistance + withd + + mtf_brekout_res = ta.crossover(low, mtf_resistance_1) + mtf_res_holds = ta.crossunder(high, mtf_resistance) + mtf_sup_holds = ta.crossover(low, mtf_support) + mtf_brekout_sup = ta.crossunder(high, mtf_support_1) [mtf_support, mtf_resistance, mtf_brekout_res, mtf_res_holds, mtf_sup_holds, mtf_brekout_sup] @@ -608,7 +642,14 @@ if show_mtf_table and barstate.islast table.cell(mtf_table, 6, row, status_4h, text_color=color.white, bgcolor=status_color_4h, text_size=text_size) table.cell(mtf_table, 7, row, status_4h, text_color=color.white, bgcolor=status_color_4h, text_size=text_size) -// â•â•â•â•â•â•â•â•â• è¾“å‡ºæ”¯æ’‘é˜»åŠ›ä½æ•°æ®ä¾›webhook使用 â•â•â•â•â•â•â•â• +// â•â•â•â•â•â•â•â•â• å½“å‰æ—¶é—´å‘¨æœŸä»·æ ¼çжæ€åˆ¤æ–­ï¼ˆä½¿ç”¨ä¸»è¦è®¡ç®—æ–¹æ³•ï¼ŒåŒ…å«æˆäº¤é‡è¿‡æ»¤ï¼‰ â•â•â•â•â•â•â•â• +// 使用主è¦è®¡ç®—方法的价格状æ€åˆ¤æ–­ï¼Œä¸Žé€šçŸ¥æ¨¡æ¿ä¿æŒä¸€è‡´ +current_price_status = get_price_status(close, supportLevel, resistanceLevel) +is_bullish = current_price_status == "看多" +is_bearish = current_price_status == "看空" +is_ranging = current_price_status == "震è¡" + +// â•â•â•â•â•â•â•â•â• è¾“å‡ºæ”¯æ’‘é˜»åŠ›ä½æ•°æ®ä¾›webhook使用(使用主è¦è®¡ç®—æ–¹æ³•ï¼ŒåŒ…å«æˆäº¤é‡è¿‡æ»¤ï¼‰ â•â•â•â•â•â•â•â• plot(supportLevel, title="supportLevel", display=display.none) plot(resistanceLevel, title="resistanceLevel", display=display.none) @@ -635,4 +676,13 @@ alertcondition(brekout_res and res_is_sup[1], title = 'é˜»åŠ›è½¬æ”¯æ’‘ä¿æŒ', m // 支撑转阻力警报 alertcondition(brekout_sup and sup_is_res[1], title = 'æ”¯æ’‘è½¬é˜»åŠ›ä¿æŒ', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"æ”¯æ’‘è½¬é˜»åŠ›ä¿æŒ","ä½ç½®":"剿”¯æ’‘ä½","ä¿¡å·":"support_as_resistance"}') +// 价格状æ€è­¦æŠ¥ - éœ‡è¡ +alertcondition(is_ranging, title = '价格处于震è¡', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于震è¡","ä½ç½®":"支撑阻力区间内","ä¿¡å·":"price_ranging"}') + +// 价格状æ€è­¦æŠ¥ - åšå¤š +alertcondition(is_bullish, title = '价格处于åšå¤š', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于åšå¤š","ä½ç½®":"阻力ä½ä¸Šæ–¹","ä¿¡å·":"price_bullish"}') + +// 价格状æ€è­¦æŠ¥ - åšç©º +alertcondition(is_bearish, title = '价格处于åšç©º', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于åšç©º","ä½ç½®":"支撑ä½ä¸‹æ–¹","ä¿¡å·":"price_bearish"}') + // ---------------------------------------------------------------------------------------------------------------------} diff --git a/srbr警报.pine b/srbr警报.pine new file mode 100644 index 0000000..db6e3dd --- /dev/null +++ b/srbr警报.pine @@ -0,0 +1,270 @@ +// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ +// © ChartPrime + +//@version=6 +indicator('Support and Resistance alert', shorttitle = 'SRBR alert ', overlay = true, max_boxes_count = 50) + + +// ---------------------------------------------------------------------------------------------------------------------} +// ð™ð™Žð™€ð™ ð™„ð™‰ð™‹ð™ð™ð™Ž +// ---------------------------------------------------------------------------------------------------------------------{ +int lookbackPeriod = input.int(20, 'Lookback Period', minval = 1, group = 'Settings') +int vol_len = input.int(2, 'Delta Volume Filter Length', tooltip = 'Higher input, will filter low volume boxes', group = 'Settings') +float box_withd = input.float(1, 'Adjust Box Width', maxval = 1000, minval = 0, step = 0.1) + + +// ---------------------------------------------------------------------------------------------------------------------} +// ð™„ð™‰ð˜¿ð™„ð˜¾ð˜¼ð™ð™Šð™ ð˜¾ð˜¼ð™‡ð˜¾ð™ð™‡ð˜¼ð™ð™„ð™Šð™‰ð™Ž +// ---------------------------------------------------------------------------------------------------------------------{ + +// â•â•â•â•â•â•â•â•╠价格状æ€åˆ¤æ–­å‡½æ•° â•â•â•â•â•â•â•â• +get_price_status(price_val, support_val, resistance_val) => + if na(price_val) or na(support_val) or na(resistance_val) + "N/A" + else if price_val > resistance_val + "看多" + else if price_val < support_val + "看空" + else + "震è¡" +// Delta Volume Function +upAndDownVolume() => + posVol = 0.0 + negVol = 0.0 + + var isBuyVolume = true + + switch + close > open => + isBuyVolume := true + isBuyVolume + close < open => + isBuyVolume := false + isBuyVolume + + if isBuyVolume + posVol := posVol + volume + posVol + else + negVol := negVol - volume + negVol + + posVol + negVol + + +// Function to identify support and resistance boxes +calcSupportResistance(src, lookbackPeriod) => + // Volume + Vol = upAndDownVolume() + vol_hi = ta.highest(Vol / 2.5, vol_len) + vol_lo = ta.lowest(Vol / 2.5, vol_len) + + var float supportLevel = na + var float supportLevel_1 = na + var float resistanceLevel = na + var float resistanceLevel_1 = na + var box sup = na + var box res = na + var color res_color = na + var color sup_color = na + var float multi = na + + var bool brekout_res = false + var bool brekout_sup = false + var bool res_holds = false + var bool sup_holds = false + + // Find pivot points + pivotHigh = ta.pivothigh(src, lookbackPeriod, lookbackPeriod) + pivotLow = ta.pivotlow(src, lookbackPeriod, lookbackPeriod) + // Box width + atr = ta.atr(200) + withd = atr * box_withd + + // Volume range for color gradient + vol_highest = ta.highest(Vol, 25) + vol_lowest = ta.lowest(Vol, 25) + + // Find support levels with Positive Volume + if not na(pivotLow) and Vol > vol_hi + + supportLevel := pivotLow + supportLevel_1 := supportLevel - withd + + topLeft = chart.point.from_index(bar_index - lookbackPeriod, supportLevel) + bottomRight = chart.point.from_index(bar_index, supportLevel_1) + + sup_color := color.from_gradient(Vol, 0, vol_highest, color(na), color.new(color.green, 30)) + + sup := box.new(top_left = topLeft, bottom_right = bottomRight, border_color = color.green, border_width = 1, bgcolor = sup_color, text = 'Vol: ' + str.tostring(math.round(Vol, 2)), text_color = chart.fg_color, text_size = size.small) + sup + + + // Find resistance levels with Negative Volume + if not na(pivotHigh) and Vol < vol_lo + + resistanceLevel := pivotHigh + resistanceLevel_1 := resistanceLevel + withd + + topLeft = chart.point.from_index(bar_index - lookbackPeriod, resistanceLevel) + bottomRight = chart.point.from_index(bar_index, resistanceLevel_1) + + res_color := color.from_gradient(Vol, vol_lowest, 0, color.new(color.red, 30), color(na)) + + res := box.new(top_left = topLeft, bottom_right = bottomRight, border_color = color.red, border_width = 1, bgcolor = res_color, text = 'Vol: ' + str.tostring(math.round(Vol, 2)), text_color = chart.fg_color, text_size = size.small) + res + + // Adaptive Box Len + sup.set_right(bar_index + 1) + res.set_right(bar_index + 1) + + // Break of support or resistance conditions + brekout_res := ta.crossover(low, resistanceLevel_1) + res_holds := ta.crossunder(high, resistanceLevel) + + sup_holds := ta.crossover(low, supportLevel) + brekout_sup := ta.crossunder(high, supportLevel_1) + + // Change Color of Support to red if it was break, change color of resistance to green if it was break + if brekout_sup + sup.set_bgcolor(color.new(color.red, 80)) + sup.set_border_color(color.red) + sup.set_border_style(line.style_dashed) + + if sup_holds + sup.set_bgcolor(sup_color) + sup.set_border_color(color.green) + sup.set_border_style(line.style_solid) + + if brekout_res + res.set_bgcolor(color.new(color.green, 80)) + res.set_border_color(color.new(color.green, 0)) + res.set_border_style(line.style_dashed) + + if res_holds + res.set_bgcolor(res_color) + res.set_border_color(color.new(color.red, 0)) + res.set_border_style(line.style_solid) + + [supportLevel, resistanceLevel, brekout_res, res_holds, sup_holds, brekout_sup] + + +// Calculate support and resistance levels and their breakouts +[supportLevel, resistanceLevel, brekout_res, res_holds, sup_holds, brekout_sup] = calcSupportResistance(close, lookbackPeriod) + + +// Check if Resistance become Support or Support Become Resistance +var bool res_is_sup = false +var bool sup_is_res = false + +switch + brekout_res => + res_is_sup := true + res_is_sup + res_holds => + res_is_sup := false + res_is_sup + +switch + brekout_sup => + sup_is_res := true + sup_is_res + sup_holds => + sup_is_res := false + sup_is_res + + +// ---------------------------------------------------------------------------------------------------------------------} +// ð™‘ð™„ð™Žð™ð˜¼ð™‡ð™„ð™•ð˜¼ð™ð™„ð™Šð™‰ +// ---------------------------------------------------------------------------------------------------------------------{ +// Plot Res and Sup breakouts and holds +plotchar(res_holds, 'Resistance Holds', 'â—†', color = #e92929, size = size.tiny, location = location.abovebar, offset = -1) +plotchar(sup_holds, 'Support Holds', 'â—†', color = #20ca26, size = size.tiny, location = location.belowbar, offset = -1) + +plotchar(brekout_res and res_is_sup[1], 'Resistance as Support Holds', 'â—†', color = #20ca26, size = size.tiny, location = location.belowbar, offset = -1) +plotchar(brekout_sup and sup_is_res[1], 'Support as Resistance Holds', 'â—†', color = #e92929, size = size.tiny, location = location.abovebar, offset = -1) + +// Break Out Labels +if brekout_sup and not sup_is_res[1] + label.new(bar_index[1], supportLevel[1], text = 'Break Sup', style = label.style_label_down, color = #7e1e1e, textcolor = chart.fg_color, size = size.small) + +if brekout_res and not res_is_sup[1] + label.new(bar_index[1], resistanceLevel[1], text = 'Break Res', style = label.style_label_up, color = #2b6d2d, textcolor = chart.fg_color, size = size.small) + +// 警报标记 - 醒目的视觉æç¤º +// 支撑ä½ä¿æŒè­¦æŠ¥æ ‡è®° +if sup_holds + label.new(bar_index, low, text = '🔔SUP', style = label.style_label_down, color = color.new(color.lime, 0), textcolor = color.black, size = size.large, tooltip = '支撑ä½ä¿æŒè­¦æŠ¥') + +// 阻力ä½ä¿æŒè­¦æŠ¥æ ‡è®° +if res_holds + label.new(bar_index, high, text = '🔔RES', style = label.style_label_up, color = color.new(color.red, 0), textcolor = color.white, size = size.large, tooltip = '阻力ä½ä¿æŒè­¦æŠ¥') + +// 支撑ä½çªç ´è­¦æŠ¥æ ‡è®° +if brekout_sup + label.new(bar_index[1], supportLevel[1], text = '🚨SUP⬇', style = label.style_label_down, color = color.new(color.orange, 0), textcolor = color.black, size = size.large, tooltip = '支撑ä½çªç ´è­¦æŠ¥') + +// 阻力ä½çªç ´è­¦æŠ¥æ ‡è®° +if brekout_res + label.new(bar_index[1], resistanceLevel[1], text = '🚨RES⬆', style = label.style_label_up, color = color.new(color.aqua, 0), textcolor = color.black, size = size.large, tooltip = '阻力ä½çªç ´è­¦æŠ¥') + +// 阻力转支撑警报标记 +if brekout_res and res_is_sup[1] + label.new(bar_index[1], resistanceLevel[1], text = 'â­R→S', style = label.style_label_down, color = color.new(color.purple, 0), textcolor = color.white, size = size.large, tooltip = 'é˜»åŠ›è½¬æ”¯æ’‘ä¿æŒè­¦æŠ¥') + +// 支撑转阻力警报标记 +if brekout_sup and sup_is_res[1] + label.new(bar_index[1], supportLevel[1], text = 'â­S→R', style = label.style_label_up, color = color.new(color.maroon, 0), textcolor = color.white, size = size.large, tooltip = 'æ”¯æ’‘è½¬é˜»åŠ›ä¿æŒè­¦æŠ¥') + +// â•â•â•â•â•â•â•â•â• å½“å‰æ—¶é—´å‘¨æœŸä»·æ ¼çжæ€åˆ¤æ–­ â•â•â•â•â•â•â•â• +current_price_status = get_price_status(close, supportLevel, resistanceLevel) +is_bullish = current_price_status == "看多" +is_bearish = current_price_status == "看空" +is_ranging = current_price_status == "震è¡" + +// 绘制支撑ä½å’Œé˜»åŠ›ä½ç”¨äºŽè­¦æŠ¥æ¨¡æ¿å˜é‡ +plot(supportLevel, title = "supportLevel", color = color.new(color.blue, 0), display = display.none) +plot(resistanceLevel, title = "resistanceLevel", color = color.new(color.red, 0), display = display.none) + +// 全局作用域的plotshape - 警报形状标记 +plotshape(sup_holds, title = 'æ”¯æ’‘ä¿æŒè­¦æŠ¥', style = shape.triangleup, location = location.belowbar, color = color.new(color.lime, 0), size = size.large) +plotshape(res_holds, title = 'é˜»åŠ›ä¿æŒè­¦æŠ¥', style = shape.triangledown, location = location.abovebar, color = color.new(color.red, 0), size = size.large) +plotshape(brekout_sup, title = '支撑çªç ´è­¦æŠ¥', style = shape.xcross, location = location.belowbar, color = color.new(color.orange, 0), size = size.large) +plotshape(brekout_res, title = '阻力çªç ´è­¦æŠ¥', style = shape.xcross, location = location.abovebar, color = color.new(color.aqua, 0), size = size.large) +plotshape(brekout_res and res_is_sup[1], title = '阻力转支撑警报', style = shape.diamond, location = location.belowbar, color = color.new(color.purple, 0), size = size.large) +plotshape(brekout_sup and sup_is_res[1], title = '支撑转阻力警报', style = shape.diamond, location = location.abovebar, color = color.new(color.maroon, 0), size = size.large) + + +// â—† +// ---------------------------------------------------------------------------------------------------------------------} +// ð˜¼ð™‡ð™€ð™ð™ ð˜¾ð™Šð™‰ð˜¿ð™„ð™ð™„ð™Šð™‰ð™Ž +// ---------------------------------------------------------------------------------------------------------------------{ + +// 支撑ä½ä¿æŒè­¦æŠ¥ +alertcondition(sup_holds, title = '支撑ä½ä¿æŒ', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"支撑ä½ä¿æŒ","ä½ç½®":"支撑ä½","ä¿¡å·":"support_holds"}') + +// 阻力ä½ä¿æŒè­¦æŠ¥ +alertcondition(res_holds, title = '阻力ä½ä¿æŒ', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"阻力ä½ä¿æŒ","ä½ç½®":"阻力ä½","ä¿¡å·":"resistance_holds"}') + +// 支撑ä½çªç ´è­¦æŠ¥ +alertcondition(brekout_sup, title = '支撑ä½çªç ´', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"支撑ä½çªç ´","ä½ç½®":"支撑ä½ä¸‹æ–¹","ä¿¡å·":"support_breakout"}') + +// 阻力ä½çªç ´è­¦æŠ¥ +alertcondition(brekout_res, title = '阻力ä½çªç ´', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"阻力ä½çªç ´","ä½ç½®":"阻力ä½ä¸Šæ–¹","ä¿¡å·":"resistance_breakout"}') + +// 阻力转支撑警报 +alertcondition(brekout_res and res_is_sup[1], title = 'é˜»åŠ›è½¬æ”¯æ’‘ä¿æŒ', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"é˜»åŠ›è½¬æ”¯æ’‘ä¿æŒ","ä½ç½®":"å‰é˜»åŠ›ä½","ä¿¡å·":"resistance_as_support"}') + +// 支撑转阻力警报 +alertcondition(brekout_sup and sup_is_res[1], title = 'æ”¯æ’‘è½¬é˜»åŠ›ä¿æŒ', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"æ”¯æ’‘è½¬é˜»åŠ›ä¿æŒ","ä½ç½®":"剿”¯æ’‘ä½","ä¿¡å·":"support_as_resistance"}') + +// 价格状æ€è­¦æŠ¥ - éœ‡è¡ +alertcondition(is_ranging, title = '价格处于震è¡', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于震è¡","ä½ç½®":"支撑阻力区间内","ä¿¡å·":"price_ranging"}') + +// 价格状æ€è­¦æŠ¥ - åšå¤š +alertcondition(is_bullish, title = '价格处于åšå¤š', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于åšå¤š","ä½ç½®":"阻力ä½ä¸Šæ–¹","ä¿¡å·":"price_bullish"}') + +// 价格状æ€è­¦æŠ¥ - åšç©º +alertcondition(is_bearish, title = '价格处于åšç©º', message = '{"指标åç§°":"SRBR","交易对":"{{ticker}}","周期":"{{interval}}","支撑ä½":"{{plot("supportLevel")}}","阻力ä½":"{{plot("resistanceLevel")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","è§¦å‘æ—¶é—´":"{{timenow}}","æ—¶é—´":"{{time}}","事件":"价格处于åšç©º","ä½ç½®":"支撑ä½ä¸‹æ–¹","ä¿¡å·":"price_bearish"}') + +// ---------------------------------------------------------------------------------------------------------------------}