如何设置变量以在满足条件时更改 - Pine Script

问题描述

我正在使用 Pine-Script 语言和 EMA 20 和 EMA 50 交易策略构建一个脚本,我想当烛台开盘大于 EMA 20 且 EMA 20 大于 EMA 50 时,较慢的移动线,在烛台下方绘制“开始做多”交易图,一旦发生这种情况,我希望代码将“GoneLong”变量值设置为 TRUE,因此如果下一根蜡烛在与前一根相同的条件下打开不会触发图表上的另一个“开始做多”交易,因为这已经在前一个蜡烛图中开始。

然后,我希望当烛台收盘价低于 EMA 50 线时,将 GoneLong 变量设置回“FALSE”,如果起始多头条件为遇见了。

我已经尝试在下面对此进行编码,(请参阅代码

// © SDudders

//@version=4
study(title="Double EMA + Alerts",shorttitle="DEMA",overlay=true,resolution="")

length_20 = input(20,minval=1)
src_20 = input(close,title="Source")
e1_20 = ema(src_20,length_20)
e2_20 = ema(e1_20,length_20)
dema_20 = 2 * e1_20 - e2_20
plot(dema_20,"DEMA 20",color=color.green)

length_50 = input(50,minval=1)
src_50 = input(close,title="Source")
e1_50 = ema(src_50,length_50)
e2_50 = ema(e1_50,length_50)
dema_50 = 2 * e1_50 - e2_50
plot(dema_50,"DEMA 50",color=color.red)


GoneLong = "FALSE"

Start_Long = (GoneLong == "FALSE" and open >= dema_20 and dema_20 > dema_50),GoneLong := "TRUE"
plotshape(series=Start_Long,text="START LONG",style=shape.triangleup,location=location.belowbar,color=color.green,size=size.small)

End_Long = (GoneLong == "TRUE" and close < dema_50),GoneLong := "FALSE"
plotshape(series=End_Long,text="END LONG",style=shape.triangledown,location=location.abovebar,size=size.small)

代码无法正常工作...每次新的烛台在 EMA 20 和 EMA 50 上方开盘时,它都会在图表上绘制一个新的“开始做多”图。

如何才能让代码只在图表上绘制,直到满足“End_Long”条件并且不在每根蜡烛上标记

非常感谢您对此的任何帮助。

See screenshot https://i.stack.imgur.com/Ua2eq.png

干杯:)

解决方法

稍微修改了您的脚本。

-删除了 GoneLong 字符串变量

-在局部 Start_Long 范围内重新分配 End_Longif 变量。

-添加了一个检查以仅显示非连续调用。

//@version=4
study(title="Double EMA + Alerts",shorttitle="DEMA",overlay=true,resolution="")

length_20 = input(20,minval=1)
src_20 = input(close,title="Source")
e1_20 = ema(src_20,length_20)
e2_20 = ema(e1_20,length_20)
dema_20 = 2 * e1_20 - e2_20
plot(dema_20,"DEMA 20",color=color.green)

length_50 = input(50,minval=1)
src_50 = input(close,title="Source")
e1_50 = ema(src_50,length_50)
e2_50 = ema(e1_50,length_50)
dema_50 = 2 * e1_50 - e2_50
plot(dema_50,"DEMA 50",color=color.red)

var bool Start_Long = na
var bool End_Long = na

if (open >= dema_20 and dema_20 > dema_50)
    Start_Long := true
    End_Long := false

plotshape(series=Start_Long and not nz(Start_Long[1]),text="START LONG",style=shape.triangleup,location=location.belowbar,color=color.green,size=size.small)

if close < dema_50
    Start_Long := false
    End_Long := true

plotshape(series=End_Long and not nz(End_Long[1]),text="END LONG",style=shape.triangledown,location=location.abovebar,size=size.small)

enter image description here