Volume

Wait 5 sec.

Volume S / TetherUSBINANCE:SUSDTmojtabamirghafari982//@version=6 indicator("30 Day Volume Profile - POC VAH VAL", overlay=true, max_boxes_count=100) // تنظیمات daysBack = input.int(30, "Lookback Days", minval=1) rows = input.int(40, "Price Levels", minval=10, maxval=100) vaPercent = input.float(70.0, "Value Area %", minval=50, maxval=95) // تعداد کندل‌های مورد بررسی بر اساس تایم‌فریم barsBack = math.max(1, int(daysBack * 86400 / timeframe.in_seconds())) // محدوده قیمت در 30 روز گذشته lookback = math.min(barsBack, bar_index + 1) periodHigh = ta.highest(high, lookback) periodLow = ta.lowest(low, lookback) priceStep = (periodHigh - periodLow) / rows // آرایه حجم در سطوح قیمتی var array volumes = array.new_float(100, 0.0) if barstate.islast and priceStep > 0 array.fill(volumes, 0.0) // تخصیص حجم هر کندل به سطح قیمت میانی آن for i = 0 to lookback - 1 midPrice = (high + low) / 2.0 idx = int((midPrice - periodLow) / priceStep) idx := math.max(0, math.min(rows - 1, idx)) array.set(volumes, idx, array.get(volumes, idx) + nz(volume, 0)) // پیدا کردن POC و حجم کل maxVol = 0.0 totalVol = 0.0 pocIndex = 0 for j = 0 to rows - 1 v = array.get(volumes, j) totalVol += v if v > maxVol maxVol := v pocIndex := j // گسترش محدوده ارزش از POC تا پوشش 70 درصد حجم targetVol = totalVol * vaPercent / 100.0 accumulated = array.get(volumes, pocIndex) lowIndex = pocIndex highIndex = pocIndex while accumulated < targetVol and (lowIndex > 0 or highIndex < rows - 1) lowerVol = lowIndex > 0 ? array.get(volumes, lowIndex - 1) : -1.0 upperVol = highIndex < rows - 1 ? array.get(volumes, highIndex + 1) : -1.0 if upperVol >= lowerVol and highIndex < rows - 1 highIndex += 1 accumulated += array.get(volumes, highIndex) else if lowIndex > 0 lowIndex -= 1 accumulated += array.get(volumes, lowIndex) else break // قیمت سطوح poc = periodLow + (pocIndex + 0.5) * priceStep val = periodLow + lowIndex * priceStep vah = periodLow + (highIndex + 1) * priceStep // نمایش خطوط var line pocLine = na var line vahLine = na var line valLine = na var label info = na line.delete(pocLine) line.delete(vahLine) line.delete(valLine) label.delete(info) pocLine := line.new(bar_index - lookback + 1, poc, bar_index, poc, color=color.red, width=3) vahLine := line.new(bar_index - lookback + 1, vah, bar_index, vah, color=color.green, width=2) valLine := line.new(bar_index - lookback + 1, val, bar_index, val, color=color.blue, width=2) info := label.new(bar_index, poc, "POC: " + str.tostring(poc, format.mintick) + "\nVAH: " + str.tostring(vah, format.mintick) + "\nVAL: " + str.tostring(val, format.mintick), style=label.style_label_left, color=color.black, textcolor=color.white)