//@version=6 indicator(title="Dynamic Levels (Volume, VWAP, POC Proxy) v6 Fixed Again", shorttitle="DynLevels+", overlay=true, max_lines_count=500, max_labels_count=500) // --- Вхідні дані --- (Без змін) // Секція: S/R Рівні на основі Обсягу Свічок grp_vol_sr = "S/R Levels (Candle Volume)" i_enable_vol_sr = input.bool(true, title="Enable S/R Levels", group=grp_vol_sr) i_lookback = input.int(100, title="Lookback Period (Bars)", minval=10, group=grp_vol_sr) i_num_candles = input.int(5, title="Num Highest Volume Candles", minval=1, group=grp_vol_sr) i_levels_to_show = input.int(3, title="Num S/R Levels to Show (Max 3)", minval=1, maxval=3, group=grp_vol_sr) i_price_source = input.source(close, "Price Source for Levels", group=grp_vol_sr) i_level_color_sup = input.color(color.green, title="Support Level Color", group=grp_vol_sr) i_level_color_res = input.color(color.red, title="Resistance Level Color", group=grp_vol_sr) i_label_color_sup = input.color(color.new(color.green, 10), title="Support Label BgColor", group=grp_vol_sr) i_label_color_res = input.color(color.new(color.red, 10), title="Resistance Label BgColor", group=grp_vol_sr) // Секція: Проксі-POC (Точка Контролю) grp_poc = "Proxy Point of Control (POC)" i_enable_poc = input.bool(true, title="Enable POC Proxy", group=grp_poc) i_poc_color = input.color(color.new(color.blue, 0), title="POC Line Color", group=grp_poc) i_poc_label_color = input.color(color.new(color.blue, 10), title="POC Label BgColor", group=grp_poc) // Секція: VWAP grp_vwap = "VWAP & Bands" i_enable_vwap = input.bool(true, title="Enable VWAP", group=grp_vwap) i_vwap_color = input.color(color.orange, title="VWAP Line Color", group=grp_vwap) i_enable_vwap_bands = input.bool(false, title="Enable VWAP Bands", group=grp_vwap) i_vwap_band_mult = input.float(1.0, title="StdDev Multiplier", minval=0.1, step=0.1, group=grp_vwap) i_vwap_band_color = input.color(color.new(color.orange, 70), title="VWAP Bands Color", group=grp_vwap) i_vwap_stdev_len = input.int(20, title="StdDev Length for Bands", minval=2, group=grp_vwap) // Загальні налаштування i_label_text_color = input.color(color.white, title="Label Text Color") // --- Логіка Збору Даних для S/R та POC --- (Без змін) var volume_array = array.new(0) var price_array = array.new(0) var bool data_ready = false volume_array.unshift(volume) price_array.unshift(i_price_source) while volume_array.size() > i_lookback volume_array.pop() price_array.pop() if not data_ready and volume_array.size() >= i_lookback data_ready := true var level_prices = array.new(0) var float max_volume_in_lookback = 0.0 var float poc_proxy_price = na var int highest_vol_index = -1 if data_ready level_prices.clear() max_volume_in_lookback := 0.0 poc_proxy_price := na highest_vol_index := -1 for i = 0 to volume_array.size() - 1 vol = volume_array.get(i) if vol > max_volume_in_lookback max_volume_in_lookback := vol highest_vol_index := i if highest_vol_index != -1 and highest_vol_index < price_array.size() poc_proxy_price := price_array.get(highest_vol_index) volume_copy = volume_array.copy() sorted_indices_desc = volume_copy.sort_indices(order.descending) for i = 0 to math.min(i_num_candles, sorted_indices_desc.size()) - 1 original_index = sorted_indices_desc.get(i) if original_index < price_array.size() price_level = price_array.get(original_index) is_unique = true for existing_level in level_prices if math.abs(price_level - existing_level) < syminfo.mintick * 2 is_unique := false break if is_unique array.push(level_prices, price_level) // --- Розділення та Сортування S/R --- (Розрахунок залишається тут) var support_levels = array.new(0) var resistance_levels = array.new(0) support_levels.clear() resistance_levels.clear() current_price = close s1_price = float(na) // Ініціалізуємо змінні для рівнів S/R як na s2_price = float(na) s3_price = float(na) r1_price = float(na) r2_price = float(na) r3_price = float(na) if i_enable_vol_sr // Розраховуємо рівні, якщо опція ввімкнена for level in level_prices if level < current_price array.push(support_levels, level) else if level > current_price array.push(resistance_levels, level) if support_levels.size() > 1 support_levels.sort(order.descending) if resistance_levels.size() > 1 resistance_levels.sort(order.ascending) // Присвоюємо значення змінним після розрахунку s1_price := support_levels.size() > 0 ? support_levels.get(0) : na s2_price := support_levels.size() > 1 ? support_levels.get(1) : na s3_price := support_levels.size() > 2 ? support_levels.get(2) : na r1_price := resistance_levels.size() > 0 ? resistance_levels.get(0) : na r2_price := resistance_levels.size() > 1 ? resistance_levels.get(1) : na r3_price := resistance_levels.size() > 2 ? resistance_levels.get(2) : na // --- Розрахунок VWAP --- (Без змін) vwap_value = ta.vwap(close) vwap_stdev = ta.stdev(close, i_vwap_stdev_len) vwap_upper_band = vwap_value + vwap_stdev * i_vwap_band_mult vwap_lower_band = vwap_value - vwap_stdev * i_vwap_band_mult // --- Візуалізація --- // Масиви для ID міток var support_labels = array.new