在 Pine Script 的计算中过滤掉 Down-candles 以仅包括 Up-candles
Filter out Down-candles to only include Up-candles in calculations in Pine Script
所以,这就是我的目标:
我想编写一个脚本,该脚本仅使用来自 UP-candles [close > open] 的 OHLC 数据来计算从开盘价到高价、收盘价到高价和开盘价到低价的百分比变化,然后取这些值的(移动)平均值到确定动态止盈、尾随偏差和止损水平。我认为这应该可以解决问题。
// Variables
upCandle = (close > open) and barstate.isconfirmed
MP = if upCandle
((high - open) / open) * 100
TD = if upCandle
((high - close) / close) * 100
ML = if upCandle
((low - open) / open) * 100
它正确地获取了 Up-candles 的值(以便该部分工作),但随后它在从 Down-candles 获得的空值之间进行插值。我只想从 Up-candles 中获取 OHLC 数据,如果没有数据可用,则不插入 N/A- 或零值。
我想我可以使用数组来解决这个问题,类似于“如果 Up-candle 得到确认,将适当的值放入相应的 FIFO 数组中,如果没有,则不要”。然后,我可以计算具有指定回溯期的数组的平均值(f.x。仅包括最后 9 个上升蜡烛),然后我可以将其绘制为数组数据的移动平均值和直方图原始上升蜡烛数据。
换句话说,我想我可以通过从数组中过滤掉 Down-candles 来完成我想做的事情。
但是我该怎么做呢?谁有想法? :)
你确实可以使用数组来完成目标。
仅当当前蜡烛是您正在寻找的蜡烛时才添加数组元素 - upCandle,使用输入您可以控制数组中的元素数量并使用 [= 取其平均值11=] built-in。
我还为 plot()
函数引入了 upCandleCount 计数器,仅在找到 9 upCandles 后才开始在图表上绘制。
//@version=5
indicator("My script")
// Variables
upCandle = (close > open) and barstate.isconfirmed
MP = if upCandle
((high - open) / open) * 100
TD = if upCandle
((high - close) / close) * 100
ML = if upCandle
((low - open) / open) * 100
// Average of the given values for the latest 9 upCandles
avgPeriod = input.int(9, 'Average Period')
var float[] upCandleMPs = array.new<float>(avgPeriod)
var float[] upCandleTDs = array.new<float>(avgPeriod)
var float[] upCandleMLs = array.new<float>(avgPeriod)
var int upCandleCount = 0
if upCandle
array.unshift(upCandleMPs, MP)
array.unshift(upCandleTDs, TD)
array.unshift(upCandleMLs, ML)
upCandleCount += 1
plot(upCandleCount >= avgPeriod ? array.avg(upCandleMPs) : na)
plot(upCandleCount >= avgPeriod ? array.avg(upCandleTDs) : na)
plot(upCandleCount >= avgPeriod ? array.avg(upCandleMLs) : na)
所以,这就是我的目标: 我想编写一个脚本,该脚本仅使用来自 UP-candles [close > open] 的 OHLC 数据来计算从开盘价到高价、收盘价到高价和开盘价到低价的百分比变化,然后取这些值的(移动)平均值到确定动态止盈、尾随偏差和止损水平。我认为这应该可以解决问题。
// Variables
upCandle = (close > open) and barstate.isconfirmed
MP = if upCandle
((high - open) / open) * 100
TD = if upCandle
((high - close) / close) * 100
ML = if upCandle
((low - open) / open) * 100
它正确地获取了 Up-candles 的值(以便该部分工作),但随后它在从 Down-candles 获得的空值之间进行插值。我只想从 Up-candles 中获取 OHLC 数据,如果没有数据可用,则不插入 N/A- 或零值。 我想我可以使用数组来解决这个问题,类似于“如果 Up-candle 得到确认,将适当的值放入相应的 FIFO 数组中,如果没有,则不要”。然后,我可以计算具有指定回溯期的数组的平均值(f.x。仅包括最后 9 个上升蜡烛),然后我可以将其绘制为数组数据的移动平均值和直方图原始上升蜡烛数据。 换句话说,我想我可以通过从数组中过滤掉 Down-candles 来完成我想做的事情。
但是我该怎么做呢?谁有想法? :)
你确实可以使用数组来完成目标。
仅当当前蜡烛是您正在寻找的蜡烛时才添加数组元素 - upCandle,使用输入您可以控制数组中的元素数量并使用 [= 取其平均值11=] built-in。
我还为 plot()
函数引入了 upCandleCount 计数器,仅在找到 9 upCandles 后才开始在图表上绘制。
//@version=5
indicator("My script")
// Variables
upCandle = (close > open) and barstate.isconfirmed
MP = if upCandle
((high - open) / open) * 100
TD = if upCandle
((high - close) / close) * 100
ML = if upCandle
((low - open) / open) * 100
// Average of the given values for the latest 9 upCandles
avgPeriod = input.int(9, 'Average Period')
var float[] upCandleMPs = array.new<float>(avgPeriod)
var float[] upCandleTDs = array.new<float>(avgPeriod)
var float[] upCandleMLs = array.new<float>(avgPeriod)
var int upCandleCount = 0
if upCandle
array.unshift(upCandleMPs, MP)
array.unshift(upCandleTDs, TD)
array.unshift(upCandleMLs, ML)
upCandleCount += 1
plot(upCandleCount >= avgPeriod ? array.avg(upCandleMPs) : na)
plot(upCandleCount >= avgPeriod ? array.avg(upCandleTDs) : na)
plot(upCandleCount >= avgPeriod ? array.avg(upCandleMLs) : na)