Усреднение закрытия только красных свечей

Давайте погрузимся прямо в это. Итак, в настоящее время я работаю над индикатором, и поэтому я хочу иметь возможность усреднять только закрытия красных свечей. Проблема в том, что решение, которое я пришел к средним зеленым свечам по какой-то странной причине, я буду признателен за помощь в этом.

averagePastRedCandles(amount) =>
    currentnum = 0.0
    currentreds = 0.0
    for i = 0 to 99999
        if currentreds == amount // end the loop if amount averaged is met
            break
        else
            if open > close // check if the candles is red
                currentreds := currentreds + 1 // basically the current
amount that's already averaged
                currentnum := currentnum + close[i] // the sum of the closes of the red candles only
            continue

    currentnum / amount

person Dan shpaner    schedule 25.07.2019    source источник


Ответы (2)


Я еще не написал ни строчки "pine-script", но, глядя на ваш код, я предполагаю, что проблема здесь.

if open > close // check if the candles is red

вы всегда делаете проверку на последнем баре.

Возможно, код должен быть примерно таким:

if open[i] > close[i] // check if the candles is red

?

person karlacio    schedule 26.07.2019

Добро пожаловать в переполнение стека. Вот вам аккуратный код с комментариями.

//@author=lucemanb
//@version=4
study("Red Candles Average")

averagePastRedCandles(amount) =>
    // number of counted candles
    candles = 0
    // current average
    sum = 0.0
    // check if the number of candles so far has exceeded the amount of bars on the chart
    if bar_index > amount
        // start counting with a limit of the current bars in chart
        for i=0 to bar_index - 1
            // confirm if the candle is red
            if open[i] > close[i]
                // add the average
                sum := sum + close[i]
                // add count of the candles we have counted
                candles := candles + 1
            // check if we have reached the amount of the candles that we want
            if candles == amount
                //close the loop
                break
    // return the average
    avarege = sum/amount

s = averagePastRedCandles(10)
plot(s)

Наслаждайтесь ????

person Lucem    schedule 26.07.2019
comment
Ваш ответ тоже правильный, но он объяснил мне причину, по которой мой код не работает, я хотел бы также отметить ваш ответ как ответ. - person Dan shpaner; 28.07.2019
comment
все в порядке, вы можете проголосовать за это. просто отметим, что метод, который вы используете, менее эффективен, но вы этого не заметите, я бы рекомендовал изменить 99999 на bar_index, если вы используете pinescript>v3. спасибо @Danshpaner - person Lucem; 28.07.2019