脚本帮助,编写 Weis Wave

script help, coding a Weis Wave

我正在分段计算 VWAP,每次收盘价与 运行 VWAP 的差异大于偏差时,它都会翻转趋势并开始新的 VWAP 计数。交易量应在每个趋势内汇总。

到目前为止,成交量处于上升趋势,但不处于下降趋势。此外,当从向下切换到向上时,上升趋势量 "steals" 最后一个下降趋势量并将其添加到自己的趋势量中。这一切都非常令人困惑,因为逻辑非常简单......

这是我的代码:

//@version=3
study("My Script")
deviation = input(title = "Deviation %", type=float, defval = 0.1)
running_vol = 0.0
running_sum = 0.0
Tup = true
Tdown = false

running_vol := nz(volume[1]) == 0 ? 0 : running_vol[1] + volume
running_sum := nz(volume[1]) == 0 ? 0 : running_sum[1] + (close*volume)

volwap = (running_sum/running_vol)

// flip to downtrend
if (Tup == true) and (Tdown == false) and (close < close[1]) and ((1 - (close/volwap)) > (deviation/100.0))
    // reset running_vol and sum to current volume and sum since it's a new trend
    running_vol := volume
    running_sum := (close*volume)
    // flip the trend switches
    Tup := false
    Tdown := true
// flip to uptrend
if (Tup == false) and (Tdown == true) and (close > close[1]) and (((close/volwap) - 1) > (deviation/100.0))
    running_vol := volume
    running_sum := (close*volume)
    Tup := true
    Tdown := false


up = Tup == true ? running_vol : 0
down = Tdown == true ? running_vol : 0

plot(up, style=histogram, color=green, linewidth=3)
plot(down, style=histogram, color=red, linewidth=3)

原脚本中Tup和Tdown的自引用有问题。您必须参考过去的 Tup 和 Tdown,否则每次扫描脚本时都会重新引入用户定义的 Tup=true 和 tdown =false。由于 Tup 在每次扫描时重新启动为真,您一次只能有一个熊市成交量条。我还看到了这个新颖有趣的波浪定义所需的转折点策略存在问题。有些玩可能会找到比这个剧本中的情节更让你满意的转折点。我曾经尝试过对 volwap 和 close[1] 相对于 close[0] 的使用保持真实,但我不确定我是否按照您真正想要的方式捕获了它。我希望这能为您提供一个改进波浪定义的起点。这是我对您的代码的 pine 脚本再现。杰伊干杯:

//@version=3
// my impression of the Weis VWAP code by Moreina by Jayy
study("Moreina Weis vwap")
deviation = input(title = "Deviation %", type=float, defval = 0.00000000)
running_vol = 0.0
running_sum = 0.0
Tup = 0

count=1
count:= nz(count[1])+1
running_vol := Tup[1]!=Tup[2] and nz(running_vol[1])==nz(volume[1])? nz(running_vol[1]) + volume:  (Tup[1]==1 and Tup[2]==1) or (Tup[1]==-1 and Tup[2]==-1)? nz(running_vol[1]) + volume:na
running_sum := Tup[1]!=Tup[2] and nz(running_sum[1])==nz(close[1]*volume[1])? nz(running_sum[1]) + close*volume: (Tup[1]==1 and Tup[2]==1) or (Tup[1]==-1 and Tup[2]==-1)? nz(running_sum[1]) +close* volume:na

volwap = (running_sum/running_vol)

// flip to downtrend
if ((Tup[1] == 1) or (Tup[1] == 0)) and not ((close > close[1]) or (close/volwap)>1) //

    // reset running_vol and sum to current volume and sum since it's a new trend
    running_vol := volume
    running_sum := (close*volume)
    // flip the trend switches
    Tup := -1

// flip to uptrend
if ((Tup[1] == -1) or (Tup[1] == 0))  and not ((close < close[1]) or ((close/volwap)) <1) //and (close/volwap) > 1) 

    running_vol := volume
    running_sum := (close*volume)
    Tup := 1


Tup:= nz(Tup[0])==1 and count>1?Tup[0]:nz(Tup[0])==-1 and count>1?Tup[0]: count>1 and Tup[0]==0?nz(Tup[1]):na//Tup
up = Tup == 1 ? running_vol : na
down = Tup == -1  ? running_vol : na

plot(up, style=histogram, color=green, linewidth=3)
plot(down, style=histogram, color=red, linewidth=3)