37 lines
2.0 KiB
Plaintext
37 lines
2.0 KiB
Plaintext
//@version=6
|
||
indicator("多周期 EMA", shorttitle="EMA", overlay=true)
|
||
|
||
// 参数
|
||
src = input.source(close, "价格源")
|
||
showEma26 = input.bool(true, "显示 EMA26?")
|
||
showEma52 = input.bool(true, "显示 EMA52?")
|
||
showEma104 = input.bool(false, "显示 EMA104?")
|
||
showEma156 = input.bool(false, "显示 EMA156?")
|
||
showEma204 = input.bool(false, "显示 EMA204?")
|
||
showDiff = input.bool(false, "显示 EMA26-EMA52 差值线?")
|
||
showCrossMarks = input.bool(false, "标记均线交叉(✕)")
|
||
// 主图 EMA
|
||
ema26 = ta.ema(src, 26)
|
||
ema52 = ta.ema(src, 52)
|
||
ema104 = ta.ema(src, 104)
|
||
ema156 = ta.ema(src, 156)
|
||
ema204 = ta.ema(src, 204)
|
||
diff = ema26 - ema52
|
||
|
||
plot(ema26, title="EMA 26", color=color.new(color.teal, 0), linewidth=2, display=showEma26 ? display.all : display.none)
|
||
plot(ema52, title="EMA 52", color=color.new(color.orange, 0), linewidth=2, display=showEma52 ? display.all : display.none)
|
||
plot(ema104, title="EMA 104", color=color.new(color.blue, 0), linewidth=2, display=showEma104 ? display.all : display.none)
|
||
plot(ema156, title="EMA 156", color=color.new(color.fuchsia, 0), linewidth=2, display=showEma156 ? display.all : display.none)
|
||
plot(ema204, title="EMA 204", color=color.new(color.green, 0), linewidth=2, display=showEma204 ? display.all : display.none)
|
||
|
||
// 交叉信号(快线上穿/下穿慢线)
|
||
crossUp = ta.crossover(ema26, ema52)
|
||
crossDn = ta.crossunder(ema26, ema52)
|
||
|
||
// 交叉点价格(取两条 EMA 的中点,视觉上就是交叉位置)
|
||
crossPrice = (ema26 + ema52) / 2.0
|
||
|
||
// 用 plotshape 标记交叉点(直接画在两条 EMA 的交叉处)
|
||
plotshape(showCrossMarks and crossUp ? crossPrice : na, title="EMA26 上穿 EMA52", style=shape.xcross, location=location.absolute, color=color.lime, size=size.small, text="", textcolor=color.lime)
|
||
plotshape(showCrossMarks and crossDn ? crossPrice : na, title="EMA26 下穿 EMA52", style=shape.xcross, location=location.absolute, color=color.red, size=size.small, text="", textcolor=color.red)
|