基于Pine Script实现多时间周期EMA指标趋势一致性信号构建
多周期EMA同向趋势信号Pine Script脚本
以下脚本实现了需求:获取同一标的1日、4小时、1小时、30分钟周期的EMA指标当前值与前一周期值,判断各周期趋势方向,当所有周期趋势完全一致时生成信号。
//@version=5 indicator("多周期EMA同向信号", overlay=true, shorttitle="Multi-Timeframe EMA Signal") // 自定义EMA参数,可根据需求调整 emaLength = input.int(20, title="EMA周期长度") // 获取各周期EMA当前值与前一周期值 // 1日周期 ema1d = request.security(syminfo.tickerid, "D", ta.ema(close, emaLength)) ema1d_prev = request.security(syminfo.tickerid, "D", ta.ema(close, emaLength)[1]) // 4小时周期 ema4h = request.security(syminfo.tickerid, "240", ta.ema(close, emaLength)) ema4h_prev = request.security(syminfo.tickerid, "240", ta.ema(close, emaLength)[1]) // 1小时周期 ema1h = request.security(syminfo.tickerid, "60", ta.ema(close, emaLength)) ema1h_prev = request.security(syminfo.tickerid, "60", ta.ema(close, emaLength)[1]) // 30分钟周期 ema30m = request.security(syminfo.tickerid, "30", ta.ema(close, emaLength)) ema30m_prev = request.security(syminfo.tickerid, "30", ta.ema(close, emaLength)[1]) // 判断各周期趋势方向:向上/向下 trend1d_up = ema1d > ema1d_prev trend1d_down = ema1d < ema1d_prev trend4h_up = ema4h > ema4h_prev trend4h_down = ema4h < ema4h_prev trend1h_up = ema1h > ema1h_prev trend1h_down = ema1h < ema1h_prev trend30m_up = ema30m > ema30m_prev trend30m_down = ema30m < ema30m_prev // 所有周期趋势一致条件 all_up = trend1d_up and trend4h_up and trend1h_up and trend30m_up all_down = trend1d_down and trend4h_down and trend1h_down and trend30m_down // 绘制信号 plotshape(all_up, title="全周期向上信号", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(all_down, title="全周期向下信号", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) // 可选:在图表上显示各周期EMA趋势状态 var table statusTable = table.new(position.top_right, 2, 5) if barstate.islast table.cell(statusTable, 0, 0, "周期", text_color=color.white, bgcolor=color.blue) table.cell(statusTable, 1, 0, "趋势方向", text_color=color.white, bgcolor=color.blue) table.cell(statusTable, 0, 1, "1D", text_color=color.white) table.cell(statusTable, 1, 1, trend1d_up ? "向上" : trend1d_down ? "向下" : "持平", text_color=trend1d_up ? color.green : trend1d_down ? color.red : color.gray) table.cell(statusTable, 0, 2, "4H", text_color=color.white) table.cell(statusTable, 1, 2, trend4h_up ? "向上" : trend4h_down ? "向下" : "持平", text_color=trend4h_up ? color.green : trend4h_down ? color.red : color.gray) table.cell(statusTable, 0, 3, "1H", text_color=color.white) table.cell(statusTable, 1, 3, trend1h_up ? "向上" : trend1h_down ? "向下" : "持平", text_color=trend1h_up ? color.green : trend1h_down ? color.red : color.gray) table.cell(statusTable, 0, 4, "30M", text_color=color.white) table.cell(statusTable, 1, 4, trend30m_up ? "向上" : trend30m_down ? "向下" : "持平", text_color=trend30m_up ? color.green : trend30m_down ? color.red : color.gray)
关键说明
- 使用
request.security()函数跨周期获取数据,参数中"D"代表1日、"240"代表4小时(分钟数)、"60"代表1小时、"30"代表30分钟 - 可通过输入框调整
EMA周期长度,默认设置为20 - 当所有周期EMA当前值均大于前一周期值时,在K线下方绘制绿色向上三角形信号;当所有周期EMA当前值均小于前一周期值时,在K线上方绘制红色向下三角形信号
- 脚本右上角的表格会实时显示各周期的趋势状态,方便快速查看
内容的提问来源于stack exchange,提问作者AShar
相关产品推荐
相关产品推荐

