up
This commit is contained in:
307
MaxTrendPoints.pine
Normal file
307
MaxTrendPoints.pine
Normal file
@@ -0,0 +1,307 @@
|
||||
// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
// https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
// © BigBeluga
|
||||
|
||||
//@version=6
|
||||
indicator("Max Trend Points [BigBeluga]", overlay = true, max_lines_count = 500, max_labels_count = 500)
|
||||
|
||||
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
|
||||
var line_up = line(na)
|
||||
var line_dn = line(na)
|
||||
var lbl_up = label(na)
|
||||
var lbl_dn = label(na)
|
||||
|
||||
var highest = array.new_float(0)
|
||||
var lowest = array.new_float(0)
|
||||
|
||||
var int start = na
|
||||
var int last_trend_change = 0
|
||||
var float last_trend_price = 0.0
|
||||
|
||||
// Trend Factor Inputs
|
||||
factor_default = input.float(2.5, step = 0.1, title="默认趋势因子")
|
||||
factor_btc = input.float(3.0, step = 0.1, title="BTCUSD 趋势因子")
|
||||
factor_xau = input.float(2.5, step = 0.1, title="XAUUSD 趋势因子")
|
||||
factor_eth = input.float(2.8, step = 0.1, title="ETHUSD 趋势因子")
|
||||
factor_gbp = input.float(2.5, step = 0.1, title="GBPJPY 趋势因子")
|
||||
|
||||
// Consolidation Bars Inputs
|
||||
consolidation_bars_default = input.int(20, title="默认震荡检测周期", minval=10)
|
||||
consolidation_bars_btc = input.int(25, title="BTCUSD 震荡检测周期", minval=10)
|
||||
consolidation_bars_xau = input.int(25, title="XAUUSD 震荡检测周期", minval=10)
|
||||
consolidation_bars_eth = input.int(20, title="ETHUSD 震荡检测周期", minval=10)
|
||||
consolidation_bars_gbp = input.int(18, title="GBPJPY 震荡检测周期", minval=10)
|
||||
|
||||
// Consolidation Threshold Inputs
|
||||
consolidation_threshold_default = input.float(0.1, title="默认震荡阈值(%)", minval=0.1, step=0.02)
|
||||
consolidation_threshold_btc = input.float(0.2, title="BTCUSD 震荡阈值(%)", minval=0.1, step=0.02)
|
||||
consolidation_threshold_xau = input.float(0.3, title="XAUUSD 震荡阈值(%)", minval=0.1, step=0.02)
|
||||
consolidation_threshold_eth = input.float(0.15, title="ETHUSD 震荡阈值(%)", minval=0.1, step=0.02)
|
||||
consolidation_threshold_gbp = input.float(0.16, title="GBPJPY 震荡阈值(%)", minval=0.1, step=0.02)
|
||||
|
||||
// Activity Period Inputs
|
||||
activity_period_default = input.int(14, title="默认活跃度检测周期", minval=5)
|
||||
activity_period_btc = input.int(20, title="BTCUSD 活跃度检测周期", minval=5)
|
||||
activity_period_xau = input.int(20, title="XAUUSD 活跃度检测周期", minval=5)
|
||||
activity_period_eth = input.int(20, title="ETHUSD 活跃度检测周期", minval=5)
|
||||
activity_period_gbp = input.int(12, title="GBPJPY 活跃度检测周期", minval=5)
|
||||
|
||||
// Activity Threshold Inputs
|
||||
activity_threshold_default = input.float(1.3, title="默认活跃度阈值(ATR倍数)", minval=0.1, step=0.1)
|
||||
activity_threshold_btc = input.float(1.5, title="BTCUSD 活跃度阈值(ATR倍数)", minval=0.1, step=0.1)
|
||||
activity_threshold_xau = input.float(1.4, title="XAUUSD 活跃度阈值(ATR倍数)", minval=0.1, step=0.1)
|
||||
activity_threshold_eth = input.float(1.4, title="ETHUSD 活跃度阈值(ATR倍数)", minval=0.1, step=0.1)
|
||||
activity_threshold_gbp = input.float(1.3, title="GBPJPY 活跃度阈值(ATR倍数)", minval=0.1, step=0.1)
|
||||
|
||||
// Colors
|
||||
col_up = input.color(color.rgb(28, 194, 216), "上涨颜色")
|
||||
col_dn = input.color(color.rgb(228, 144, 19), "下跌颜色")
|
||||
|
||||
// Alert Settings
|
||||
alert_group = "警报设置"
|
||||
enable_trend_alert = input.bool(true, "启用趋势变化警报", group=alert_group)
|
||||
enable_consolidation_alert = input.bool(true, "启用震荡警报", group=alert_group)
|
||||
enable_activity_alert = input.bool(true, "启用市场活跃度警报", group=alert_group)
|
||||
|
||||
// Select Parameters Based on Trading Pair
|
||||
sym = syminfo.tickerid
|
||||
factor =
|
||||
sym == "TICKMILL:BTCUSD" ? factor_btc :
|
||||
sym == "TICKMILL:XAUUSD" ? factor_xau :
|
||||
sym == "TICKMILL:ETHUSD" ? factor_eth :
|
||||
sym == "TICKMILL:GBPJPY" ? factor_gbp :
|
||||
factor_default
|
||||
|
||||
consolidation_bars =
|
||||
sym == "TICKMILL:BTCUSD" ? consolidation_bars_btc :
|
||||
sym == "TICKMILL:XAUUSD" ? consolidation_bars_xau :
|
||||
sym == "TICKMILL:ETHUSD" ? consolidation_bars_eth :
|
||||
sym == "TICKMILL:GBPJPY" ? consolidation_bars_gbp :
|
||||
consolidation_bars_default
|
||||
|
||||
consolidation_threshold =
|
||||
sym == "TICKMILL:BTCUSD" ? consolidation_threshold_btc :
|
||||
sym == "TICKMILL:XAUUSD" ? consolidation_threshold_xau :
|
||||
sym == "TICKMILL:ETHUSD" ? consolidation_threshold_eth :
|
||||
sym == "TICKMILL:GBPJPY" ? consolidation_threshold_gbp :
|
||||
consolidation_threshold_default
|
||||
|
||||
activity_period =
|
||||
sym == "TICKMILL:BTCUSD" ? activity_period_btc :
|
||||
sym == "TICKMILL:XAUUSD" ? activity_period_xau :
|
||||
sym == "TICKMILL:ETHUSD" ? activity_period_eth :
|
||||
sym == "TICKMILL:GBPJPY" ? activity_period_gbp :
|
||||
activity_period_default
|
||||
|
||||
activity_threshold =
|
||||
sym == "TICKMILL:BTCUSD" ? activity_threshold_btc :
|
||||
sym == "TICKMILL:XAUUSD" ? activity_threshold_xau :
|
||||
sym == "TICKMILL:ETHUSD" ? activity_threshold_eth :
|
||||
sym == "TICKMILL:GBPJPY" ? activity_threshold_gbp :
|
||||
activity_threshold_default
|
||||
// }
|
||||
|
||||
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
|
||||
trend_line(factor)=>
|
||||
src = hl2
|
||||
dist = ta.hma(high-low, 200)
|
||||
upperBand = src + factor * dist
|
||||
lowerBand = src - factor * dist
|
||||
prevLowerBand = nz(lowerBand[1])
|
||||
prevUpperBand = nz(upperBand[1])
|
||||
|
||||
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
|
||||
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
|
||||
|
||||
int _direction = na
|
||||
float trend_line = na
|
||||
prevTrendLine = nz(trend_line[1])
|
||||
if na(dist[1])
|
||||
_direction := 1
|
||||
else if prevTrendLine == prevUpperBand
|
||||
_direction := close > upperBand ? -1 : 1
|
||||
else
|
||||
_direction := close < lowerBand ? 1 : -1
|
||||
|
||||
trend_line := _direction == -1 ? lowerBand : upperBand
|
||||
|
||||
[trend_line, _direction]
|
||||
|
||||
[trend_line, _direction] = trend_line(factor)
|
||||
|
||||
t_change = ta.cross(_direction, 0)
|
||||
|
||||
// Oscillation Detection
|
||||
highest_recent = ta.highest(high, consolidation_bars)
|
||||
lowest_recent = ta.lowest(low, consolidation_bars)
|
||||
price_range = (highest_recent - lowest_recent) / lowest_recent * 100
|
||||
is_consolidating = price_range < consolidation_threshold
|
||||
|
||||
// Market Activity Detection
|
||||
atr_current = ta.atr(activity_period)
|
||||
atr_avg = ta.sma(atr_current, activity_period * 2)
|
||||
is_active = atr_current > atr_avg * activity_threshold
|
||||
|
||||
// Calculate Trend Strength
|
||||
trend_strength = math.abs(close - trend_line) / trend_line * 100
|
||||
|
||||
if t_change
|
||||
array.clear(highest)
|
||||
array.clear(lowest)
|
||||
start := bar_index
|
||||
last_trend_change := bar_index
|
||||
last_trend_price := close
|
||||
|
||||
if t_change and _direction == 1
|
||||
line_dn := line.new(bar_index, close, na, na, color = chart.fg_color, style = line.style_dashed)
|
||||
lbl_dn := label.new(bar_index, low, color = color.new(col_dn, 50), textcolor = chart.fg_color, size = size.small, style = label.style_label_up)
|
||||
|
||||
if t_change and _direction == -1
|
||||
lbl_up := label.new(bar_index, high, color = color.new(col_up, 50), textcolor = chart.fg_color, size = size.small, style = label.style_label_down)
|
||||
line_up := line.new(bar_index, close, na, na, color = chart.fg_color, style = line.style_dashed)
|
||||
|
||||
if not t_change and _direction == -1
|
||||
array.push(highest, high)
|
||||
label.set_xy(lbl_up, start + array.indexof(highest, array.max(highest))+1, array.max(highest))
|
||||
line.set_xy2(line_up, start + array.indexof(highest, array.max(highest))+1, array.max(highest))
|
||||
|
||||
if not t_change and _direction == 1
|
||||
array.push(lowest, low)
|
||||
label.set_xy(lbl_dn, start + array.indexof(lowest, array.min(lowest))+1, array.min(lowest))
|
||||
line.set_xy2(line_dn, start + array.indexof(lowest, array.min(lowest))+1, array.min(lowest))
|
||||
|
||||
if line.get_y2(line_up) > line.get_y1(line_up)
|
||||
label.set_text(lbl_up, str.tostring((line.get_y2(line_up) - line.get_y1(line_up)) / line.get_y1(line_up) * 100, format.percent))
|
||||
if line.get_y2(line_dn) < line.get_y1(line_dn)
|
||||
label.set_text(lbl_dn, str.tostring((line.get_y2(line_dn) - line.get_y1(line_dn)) / line.get_y1(line_dn) * 100, format.percent))
|
||||
|
||||
t_color = _direction == -1 ? col_up : col_dn
|
||||
|
||||
// Track previous states for state change detection
|
||||
var bool was_consolidating = false
|
||||
var bool was_active = false
|
||||
was_consolidating := is_consolidating
|
||||
was_active := is_active
|
||||
// }
|
||||
|
||||
// ===== 统一警报系统 =====
|
||||
// 统一警报系统 - 只需添加一次警报即可捕获所有信号
|
||||
|
||||
// 检测所有警报条件并生成对应的JSON消息
|
||||
alert_message = ""
|
||||
|
||||
// 趋势变化警报
|
||||
if enable_trend_alert and t_change and _direction == -1
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格转为上涨趋势","方向":"上涨趋势","信号":"trend_up"}'
|
||||
alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
if enable_trend_alert and t_change and _direction == 1
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格转为下跌趋势","方向":"下跌趋势","信号":"trend_down"}'
|
||||
alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// 震荡状态变化警报
|
||||
// if enable_consolidation_alert and is_consolidating and not was_consolidating[1]
|
||||
// alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"市场进入震荡状态","状态":"震荡","信号":"consolidation_start"}'
|
||||
// alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// if enable_consolidation_alert and not is_consolidating and was_consolidating[1]
|
||||
// direction_text = _direction == -1 ? "上涨趋势" : "下跌趋势"
|
||||
// alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"市场突破震荡状态","方向":"' + direction_text + '","信号":"consolidation_break"}'
|
||||
// alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// // 活跃度变化警报
|
||||
// if enable_activity_alert and is_active and not was_active[1]
|
||||
// alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"市场活跃度增加","活跃状态":"活跃","信号":"activity_increase"}'
|
||||
// alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// if enable_activity_alert and not is_active and was_active[1]
|
||||
// alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"市场活跃度降低","活跃状态":"不活跃","信号":"activity_decrease"}'
|
||||
// alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// 综合市场分析警报
|
||||
// if t_change and (enable_trend_alert or enable_consolidation_alert or enable_activity_alert)
|
||||
// direction_text = _direction == -1 ? "上涨趋势" : "下跌趋势"
|
||||
// status_text = is_consolidating ? "震荡" : (is_active ? "活跃" : "正常")
|
||||
// alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"综合市场分析","方向":"' + direction_text + '","状态":"' + status_text + '","信号":"market_analysis"}'
|
||||
// alert(alert_message, alert.freq_once_per_bar_close)
|
||||
|
||||
// 状态监控警报(频率较低)
|
||||
if enable_trend_alert and _direction == -1
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格处于上涨趋势","方向":"上涨趋势","信号":"trend_up_status"}'
|
||||
alert(alert_message, alert.freq_once_per_bar)
|
||||
|
||||
if enable_trend_alert and _direction == 1
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格处于下跌趋势","方向":"下跌趋势","信号":"trend_down_status"}'
|
||||
alert(alert_message, alert.freq_once_per_bar)
|
||||
|
||||
if enable_consolidation_alert and is_consolidating
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格处于震荡状态","状态":"震荡","信号":"consolidation_status"}'
|
||||
alert(alert_message, alert.freq_once_per_bar)
|
||||
|
||||
if enable_activity_alert and is_active
|
||||
alert_message := '{"指标名称":"MaxTrendPoints","交易对":"' + syminfo.ticker + '","周期":"' + timeframe.period + '","趋势线":"' + str.tostring(trend_line, '#.####') + '","趋势强度":"' + str.tostring(trend_strength, '#.##') + '","价格范围":"' + str.tostring(price_range, '#.####') + '","当前ATR":"' + str.tostring(atr_current, '#.####') + '","开盘价":"' + str.tostring(open, '#.####') + '","收盘价":"' + str.tostring(close, '#.####') + '","最高价":"' + str.tostring(high, '#.####') + '","最低价":"' + str.tostring(low, '#.####') + '","触发时间":"' + str.tostring(timenow) + '","时间":"' + str.tostring(time) + '","事件":"价格处于活跃状态","活跃状态":"活跃","信号":"activity_status"}'
|
||||
alert(alert_message, alert.freq_once_per_bar)
|
||||
|
||||
// ===== 传统警报条件(保留兼容性)=====
|
||||
// 注意:使用统一警报系统时,建议只使用上面的alert()函数
|
||||
// 以下alertcondition保留用于需要单独设置警报的情况
|
||||
|
||||
// 创建用于警报的plot变量
|
||||
plot(trend_line, title = '趋势线', display = display.none)
|
||||
plot(trend_strength, title = '趋势强度', display = display.none)
|
||||
plot(price_range, title = '价格范围', display = display.none)
|
||||
plot(atr_current, title = '当前ATR', display = display.none)
|
||||
|
||||
// 趋势变化警报
|
||||
alertcondition(enable_trend_alert and t_change and _direction == -1, title = '价格转为上涨趋势', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格转为上涨趋势","方向":"上涨趋势","信号":"trend_up"}')
|
||||
|
||||
alertcondition(enable_trend_alert and t_change and _direction == 1, title = '价格转为下跌趋势', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格转为下跌趋势","方向":"下跌趋势","信号":"trend_down"}')
|
||||
|
||||
// 震荡状态变化警报
|
||||
alertcondition(enable_consolidation_alert and is_consolidating and not was_consolidating[1], title = '市场进入震荡状态', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"市场进入震荡状态","状态":"震荡","信号":"consolidation_start"}')
|
||||
|
||||
alertcondition(enable_consolidation_alert and not is_consolidating and was_consolidating[1], title = '市场突破震荡状态', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"市场突破震荡状态","信号":"consolidation_break"}')
|
||||
|
||||
// 活跃度变化警报
|
||||
alertcondition(enable_activity_alert and is_active and not was_active[1], title = '市场活跃度增加', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"市场活跃度增加","活跃状态":"活跃","信号":"activity_increase"}')
|
||||
|
||||
alertcondition(enable_activity_alert and not is_active and was_active[1], title = '市场活跃度降低', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"市场活跃度降低","活跃状态":"不活跃","信号":"activity_decrease"}')
|
||||
|
||||
// 综合市场分析警报
|
||||
alertcondition(t_change and (enable_trend_alert or enable_consolidation_alert or enable_activity_alert), title = '综合市场分析', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"综合市场分析","信号":"market_analysis"}')
|
||||
|
||||
// 状态监控警报
|
||||
alertcondition(enable_trend_alert and _direction == -1, title = '价格处于上涨趋势', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格处于上涨趋势","方向":"上涨趋势","信号":"trend_up_status"}')
|
||||
|
||||
alertcondition(enable_trend_alert and _direction == 1, title = '价格处于下跌趋势', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格处于下跌趋势","方向":"下跌趋势","信号":"trend_down_status"}')
|
||||
|
||||
alertcondition(enable_consolidation_alert and is_consolidating, title = '价格处于震荡状态', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格处于震荡状态","状态":"震荡","信号":"consolidation_status"}')
|
||||
|
||||
alertcondition(enable_activity_alert and is_active, title = '价格处于活跃状态', message = '{"指标名称":"MaxTrendPoints","交易对":"{{ticker}}","周期":"{{interval}}","趋势线":"{{plot("趋势线")}}","趋势强度":"{{plot("趋势强度")}}","价格范围":"{{plot("价格范围")}}","当前ATR":"{{plot("当前ATR")}}","开盘价":"{{open}}","收盘价":"{{close}}","最高价":"{{high}}","最低价":"{{low}}","触发时间":"{{timenow}}","时间":"{{time}}","事件":"价格处于活跃状态","活跃状态":"活跃","信号":"activity_status"}')
|
||||
|
||||
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
|
||||
plotshape(t_change ? trend_line : na, "趋势变化", style = shape.circle, location = location.absolute, color = t_color, size = size.tiny)
|
||||
|
||||
t_p = plot(trend_line, "趋势线", color = t_change ? color.new(t_color, 100) : t_color, linewidth = 2)
|
||||
m_p = plot(hl2, color = color.new(color.gray, 100), editable = false)
|
||||
|
||||
fill(t_p, m_p, hl2, trend_line, color.new(t_color, 95), color.new(t_color, 90))
|
||||
|
||||
// Status Panel
|
||||
var table panel = table.new(position.top_right, 3, 4, bgcolor=color.new(color.black, 80))
|
||||
if barstate.islast
|
||||
table.cell(panel, 0, 0, "市场状态", text_color=color.white, text_size=size.small)
|
||||
table.cell(panel, 1, 0, "当前值", text_color=color.white, text_size=size.small)
|
||||
|
||||
table.cell(panel, 0, 1, "趋势方向", text_color=color.gray, text_size=size.small)
|
||||
table.cell(panel, 1, 1, _direction == -1 ? "↑ 上涨" : "↓ 下跌",
|
||||
text_color=_direction == -1 ? col_up : col_dn, text_size=size.small)
|
||||
|
||||
table.cell(panel, 0, 2, "市场状态", text_color=color.gray, text_size=size.small)
|
||||
table.cell(panel, 1, 2, is_consolidating ? "震荡中" : "趋势中",
|
||||
text_color=is_consolidating ? color.rgb(43, 43, 39) : color.green, text_size=size.small)
|
||||
|
||||
table.cell(panel, 0, 3, "活跃度", text_color=color.gray, text_size=size.small)
|
||||
table.cell(panel, 1, 3, is_active ? "活跃" : "平静",
|
||||
text_color=is_active ? color.rgb(60, 60, 60) : color.blue, text_size=size.small)
|
||||
// }
|
||||
Reference in New Issue
Block a user