如何计算最近N天的绿色和红色条数?

How to count green and red bars number in the last N days?

//@version=5
indicator('Bar Count', overlay=false, max_bars_back=1000)
green = close > close[1] ? 1 : 0
red = close < close[1] ? -1 : 0
length = input(30, title='Number of bars lookback')
greenbar = math.sum(green, length)
redbar = math.sum(red, length)

var g_count = 0 
var r_count = 0

我完成了第一部分,但我认为它需要添加“tostring”部分,因为我需要在第二天再次计算,但我真的不知道如何计算这些数字...请帮助我编写这个松树脚本。我是松树脚本的新手。谢谢。

您可以将 red/green 状态保存在数组中,然后计算该数组中元素的总和以获得 red/green 柱数,如下所示:

//@version=5
indicator("Count Bar Color", "CBC")

var int     barsBack        = input.int(30, 'Number of bars lookback', 0)

var int[]   greenBars       = array.new_int(barsBack, 0)
var int[]   redBars         = array.new_int(barsBack, 0)
var int     greenBarCount   = 0
var int     redBarCount     = 0

direction = ta.change(close) // red or green ?

if barstate.isconfirmed             // bar is complete
    if direction > 0                // green bar
        array.push(greenBars, 1)    // append 1 to end of array
        array.push(redBars,   0)    // append 0 to end of array
    else if direction < 0           // red bar
        array.push(greenBars, 0)    // append 0 to end of array
        array.push(redBars,   1)    // append 1 to end of array

    if direction != 0               // we've appended an element to the end of the array
        array.shift(greenBars)      // remove 1st element of array to keep size of array constant
        array.shift(redBars)        // remove 1st element of array to keep size of array constant

    greenBarCount := array.sum(greenBars)
    redBarCount   := array.sum(redBars)

plot(greenBarCount, 'greenBarCount', color.green)
plot(redBarCount,   'redBarCount',   color.red)

较短的版本:

//@version=5
indicator("Count Bar Color", "CBC")

var int     barsBack        = input.int(30, 'Number of bars lookback', 0)

var int[]   greenBars       = array.new_int(barsBack, 0)
var int[]   redBars         = array.new_int(barsBack, 0)
var int     greenBarCount   = 0
var int     redBarCount     = 0

direction = ta.change(close)

if barstate.isconfirmed and direction != 0
    array.push(greenBars, direction > 0 ? 1 : 0)
    array.push(redBars,   direction < 0 ? 1 : 0)
    array.shift(greenBars)
    array.shift(redBars)
    
    greenBarCount := array.sum(greenBars)
    redBarCount   := array.sum(redBars)

plot(greenBarCount, 'greenBarCount', color.green)
plot(redBarCount,   'redBarCount',   color.red)