This Pine Script identifies and displays weekly naked Points of Control (nPOCs) on a TradingView chart. An nPOC represents a Point of Control (POC) from a previous week that has not been revisited by price action in subsequent weeks. These nPOCs are extended to the right as horizontal lines, indicating potential support or resistance levels.
#### Script Overview
1. **Indicator Declaration:** ```pinescript //version=5 indicator("Weekly nPOCs", overlay=true) ``` - The script is defined as a version 5 Pine Script. - The `indicator` function sets the script's name ("Weekly nPOCs") and specifies that the indicator should be overlaid on the price chart (`overlay=true`).
2. **Function to Calculate POC:** ```pinescript f_poc(_hl2, _vol) => var float[] vol_profile = na if (na(vol_profile)) vol_profile := array.new_float(100, 0.0) _bin_size = (high - low) / 100 for i = 0 to 99 if _hl2 >= low + i * _bin_size and _hl2 < low + (i + 1) * _bin_size array.set(vol_profile, i, array.get(vol_profile, i) + _vol)
max_volume = array.max(vol_profile) poc_index = array.indexof(vol_profile, max_volume) poc_price = low + poc_index * _bin_size + _bin_size / 2 poc_price ``` - The function `f_poc` calculates the Point of Control (POC) for a given period. - It takes two parameters: `_hl2` (the average of the high and low prices) and `_vol` (volume). - A volume profile array (`vol_profile`) is initialized to store volume data across different price bins. - The price range between the high and low is divided into 100 bins (`_bin_size`). - The function iterates over each bin, accumulating the volumes for prices within each bin. - The bin with the maximum volume is identified as the POC (`poc_price`).
3. **Variables to Store Weekly Data:** ```pinescript var float poc = na var float prev_poc = na var line[] poc_lines = na if na(poc_lines) poc_lines := array.new_line(0) ``` - `poc` stores the current week's POC. - `prev_poc` stores the previous week's POC. - `poc_lines` is an array to store lines representing nPOCs. The array is initialized if it is `na` (not initialized).
4. **Calculate Weekly POC:** ```pinescript is_new_week = ta.change(time('W')) != 0 if (is_new_week) prev_poc := poc poc := f_poc(hl2, volume) if not na(prev_poc) line new_poc_line = line.new(x1=bar_index, y1=prev_poc, x2=bar_index + 100, y2=prev_poc, color=color.red, width=2) label.new(x=bar_index, y=prev_poc, text="nPOC", style=label.style_label_down, color=color.red, textcolor=color.white) array.push(poc_lines, new_poc_line) ``` - `is_new_week` checks if the current bar is the start of a new week using the `ta.change(time('W'))` function. - If it's a new week, the previous week's POC is stored in `prev_poc`, and the current week's POC is calculated using `f_poc`. - If `prev_poc` is not `na`, a new line (`new_poc_line`) representing the nPOC is created, extending it to the right (for 100 bars). - A label is created at the `prev_poc` level, marking it as "nPOC". - The new line is added to the `poc_lines` array.
5. **Remove Old Lines:** ```pinescript if array.size(poc_lines) > 52 line.delete(array.shift(poc_lines)) ``` - This section ensures that only the last 52 weeks of nPOCs are kept to avoid cluttering the chart. - If the `poc_lines` array contains more than 52 lines, the oldest line is deleted using `array.shift`.
6. **Plot the Current Week's POC as a Reference:** ```pinescript plot(poc, title="Current Weekly POC", color=color.blue, linewidth=2, style=plot.style_line) ``` - The current week's POC is plotted as a blue line on the chart for reference.
#### Summary
This script calculates and identifies weekly Points of Control (POCs) and marks them as nPOCs if they remain untouched by subsequent price action. These nPOCs are displayed as horizontal lines extending to the right, providing traders with potential support or resistance levels. The script also manages the number of lines plotted to maintain a clear and uncluttered chart.
오픈 소스 스크립트
진정한 트레이딩뷰 정신에 따라 이 스크립트 작성자는 트레이더가 기능을 검토하고 검증할 수 있도록 오픈소스로 공개했습니다. 작성자에게 찬사를 보냅니다! 무료로 사용할 수 있지만 코드를 다시 게시할 경우 하우스 룰이 적용된다는 점을 기억하세요.
차트에서 빠르게 액세스하려면 이 스크립트를 즐겨찾기에 추가하세요 — 여기에서 자세히 알아보기.