Обновление значений или создание новой серии

Этот скрипт разработан для генерации волн с кумулятивным объемом в соответствии с заданными условиями. На последних барах бывают случаи, когда условия не определяют, какая волна формируется вверх или вниз. Это принимается как факт, и мы соглашаемся ждать формирования следующих баров. После того, как новые бары определяют направление волны, следует добавить предыдущие бары в качестве начала этой новой волны. Предполагалось, что выполнение условий формирования волны будет сохраняться в одном ряду и вноситься поправки при переносе в другой ряд. Можно ли исправить написанный код или сделать реализацию другим методом, например, через массивы или офсет?

Я переработал скрипт для использования массивов. Еще несколько уточнений по алгоритму. Строится временной ряд «-1», «0» и «1».

"-1" - волна ВНИЗ "0" - нейтральная волна "1" - волна ВВЕРХ.

На основе этого ряда создается массив, в котором все значения «0» заменяются первым ненулевым значением справа. Это должно работать! НО почему-то не работает.

study("Weis Wave Volume VSA", shorttitle = "WWV m1_v4 arr")

var wave = array.new_int(0)
//First main condition for up / down wave formation
CondUp1 = close[2] < close[0] and close[1] < close[0] ?  1 : 0
CondDn1 = close[2] > close[0] and close[1] > close[0] ? -1 : 0 
//Second additional condition for up / down wave formation
CondUp2 = open[1] <= close[0] and close[1] < close[0] ?  2 : 0
CondDn2 = open[1] >= close[0] and close[1] > close[0] ? -2 : 0
//Time series for a wave
wavetemp = 0
if CondUp1 != 0 and CondDn1 == 0
    wavetemp := 1 
if CondUp1 == 0 and CondDn1 != 0
    wavetemp := -1
if CondUp1 == 0 and CondDn1 == 0 and CondUp2 != 0 and CondDn2 == 0
    wavetemp := 1
if CondUp1 == 0 and CondDn1 == 0 and CondUp2 == 0 and CondDn2 != 0
    wavetemp := -1
//Array for wave
begin_index = int(na)
if nz(wavetemp[1]) == 0 and  nz(wavetemp[0]) != 0 
    begin_index := max(array.lastindexof(wave, 1), array.lastindexof(wave,-1))
    array.push(wave, wavetemp[0])
    for i = begin_index + 1 to bar_index - 1
        array.set(wave, i, wavetemp[0]) // New value for historic elements 
else 
    array.push(wave, wavetemp[0])

vol = float(na)
vol := bar_index == 0 ? nz(volume) : ( array.get(wave, bar_index - 1) == array.get(wave, bar_index) ? nz(vol[1]) + nz(volume) : nz(volume) )

up = float(na)
up := array.get(wave, bar_index) == 1 ? vol : na

pd = float(na)
pd := array.get(wave, bar_index) == 0 ? vol : na

dn = float(na)
dn := array.get(wave, bar_index) == -1 ? vol : na

plot(up, style=plot.style_columns, color=color.green)
plot(pd, style=plot.style_columns, color=color.black)
plot(dn, style=plot.style_columns, color=color.red)

[ОБНОВЛЯТЬ]

Альтернативное описание вопроса.

  1. Есть условия, которые создают серию wavetemp значений «-1», «0» и «1».

  2. Из серии wavetemp создайте новую серию wave по правилам:

а. если значение ряда wavetemp равно «-1» или «1», то ему присваивается новый ряд wave;

б. если значение ряда wavetemp равно «0», то дождитесь, пока ряд значения станет равным «-1» или «1», весь недостающий элемент нового ряда wave выдается на первое ненулевое значение

Этот скрипт отлично работает имхо. Смотрите скриншот. Мне непонятно, в чем проблема.

Bjorn Mistiaen 10.01.2021 16:03

@BjornMistiaen, большое спасибо за интерес к моей проблеме. Постараюсь переформулировать свой вопрос, чтобы было понятнее. Пожалуйста, извините меня за использование переводчика Google.

AnyDozer 10.01.2021 17:42

Не беспокойся. Просто не забудьте оставить комментарий, когда закончите изменять вопрос, чтобы я получил уведомление.

Bjorn Mistiaen 10.01.2021 18:32

@BjornMistiaen, посмотрите обновление вопроса, спасибо.

AnyDozer 11.01.2021 05:45

Это невозможно сделать в Pine. Вы не можете изменить исторические точки данных ряда. Объяснение здесь. Вы сможете создать массив, содержащий точки данных, как на картинке, но вы не сможете отображать их на bar_index в прошлом.

Bjorn Mistiaen 11.01.2021 10:12

@BjornMistiaen, поэтому я пытаюсь рисовать с помощью функций line., но мне не хватает настройки ширины линии автомасштабирования.

AnyDozer 11.01.2021 10:39

Вы не можете автоматически масштабировать ширину линии. Вы должны использовать plot с style=plot.style_columns. Это идеальное решение. Я не знаю, почему вы хотите использовать линии для того, что вы делаете.

Bjorn Mistiaen 11.01.2021 12:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

plot(wave_vol,      style=plot.style_columns, editable=false, color=wave_col,      offset = -3)
plot(wave_vol_end2, style=plot.style_columns, editable=false, color=wave_col_end2, offset = -2, show_last = 1)
plot(wave_vol_end1, style=plot.style_columns, editable=false, color=wave_col_end1, offset = -1, show_last = 1)
plot(wave_vol_end0, style=plot.style_columns, editable=false, color=wave_col_end0, offset =  0, show_last = 1)

Другие вопросы по теме