OPEN-SOURCE SCRIPT
Round Number Zones (100, 50, 25)

Of course. Here is the indicator fully converted to English, along with a detailed guide on what it does and how to use it.
-----
### 📜 Round Number Zones Indicator Code (English Version)
This is the complete code for the indicator. Copy and paste it into your Pine Editor.
```pinescript
//version=5
indicator("Round Number Zones (100, 50, 25)", "Zones", overlay=true, max_boxes_count = 100, max_labels_count = 100)
// ==========================
// --- 100-Level Zones (Primary) ---
// ==========================
GROUP_100 = "100-Level Zones (Primary)"
show100 = input.bool(true, "Show 100-Levels", group=GROUP_100)
count100 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_100)
offset100 = input.float(15.0, "Zone Size (+/-)", step=0.1, group=GROUP_100)
color100 = input.color(color.new(color.blue, 85), "Zone Color", group=GROUP_100)
// ==========================
// --- 50-Level Zones (Secondary) ---
// ==========================
GROUP_50 = "50-Level Zones (Secondary)"
show50 = input.bool(true, "Show 50-Levels", group=GROUP_50)
count50 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_50)
offset50 = input.float(7.0, "Zone Size (+/-)", step=0.1, group=GROUP_50)
color50 = input.color(color.new(color.gray, 85), "Zone Color", group=GROUP_50)
// ==========================
// --- 25-Level Zones (Tertiary) ---
// ==========================
GROUP_25 = "25-Level Zones (Tertiary)"
show25 = input.bool(true, "Show 25-Levels", group=GROUP_25)
count25 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_25)
offset25 = input.float(3.0, "Zone Size (+/-)", step=0.1, group=GROUP_25)
color25 = input.color(color.new(color.yellow, 90), "Zone Color", group=GROUP_25)
// Arrays to store drawings for updating
var box[] boxes100 = array.new_box()
var label[] labels100 = array.new_label()
var box[] boxes50 = array.new_box()
var label[] labels50 = array.new_label()
var box[] boxes25 = array.new_box()
var label[] labels25 = array.new_label()
// Function to delete old drawings
f_deleteDrawings(boxes, labels) =>
for b in boxes
box.delete(b)
for l in labels
label.delete(l)
array.clear(boxes)
array.clear(labels)
// Execute on the last bar only for performance
if barstate.islast
// Delete old drawings first
f_deleteDrawings(boxes100, labels100)
f_deleteDrawings(boxes50, labels50)
f_deleteDrawings(boxes25, labels25)
// Calculate the reference point based on the current close price
base_level100 = math.round(close / 100) * 100
base_level50 = math.round((close - 50) / 100) * 100 + 50
base_level25 = math.round(close / 25) * 25
// --- Draw Tertiary Levels (25, 75, 125...) ---
if show25
for i = -count25 to count25
level25 = base_level25 + (i * 25)
// Don't draw a 25-level if it's also a 50 or 100 level
if level25 % 50 != 0
lower25 = level25 - offset25
upper25 = level25 + offset25
b_25 = box.new(bar_index, upper25, bar_index + 1, lower25, extend=extend.right, border_color=na, bgcolor=color25)
l_25 = label.new(bar_index, level25, "Level 25: " + str.tostring(level25), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color25, 100), textcolor=color25, size=size.tiny)
array.push(boxes25, b_25)
array.push(labels25, l_25)
// --- Draw Secondary Levels (50, 150, 250...) ---
if show50
for i = -count50 to count50
level50 = base_level50 + (i * 100)
if level50 % 100 != 0
lower50 = level50 - offset50
upper50 = level50 + offset50
b_50 = box.new(bar_index, upper50, bar_index + 1, lower50, extend=extend.right, border_color=na, bgcolor=color50)
l_50 = label.new(bar_index, level50, "Level 50: " + str.tostring(level50), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color50, 100), textcolor=color50, size=size.small)
array.push(boxes50, b_50)
array.push(labels50, l_50)
// --- Draw Primary Levels (100, 200, 300...) ---
if show100
for i = -count100 to count100
level100 = base_level100 + (i * 100)
lower100 = level100 - offset100
upper100 = level100 + offset100
b_100 = box.new(bar_index, upper100, bar_index + 1, lower100, extend=extend.right, border_color=na, bgcolor=color100)
l_100 = label.new(bar_index, level100, "Level 100: " + str.tostring(level100), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color100, 100), textcolor=color100, size=size.small)
array.push(boxes100, b_100)
array.push(labels100, l_100)
```
-----
## 📈 Detailed Guide to the Round Number Zones Indicator
### Core Concept
This indicator automatically identifies and highlights key psychological price levels on your chart. Traders and institutions often place orders around "round numbers" (like $100, $50, or $25), which causes these levels to act as natural areas of support and resistance. This script saves you the manual work of finding and drawing these important zones.
### How It Works
The indicator operates by finding the current price and then calculating the nearest multiples of 100, 50, and 25 around it. It then draws colored zones to visually represent these levels.
* **Primary Zones (Multiples of 100):** These are the strongest psychological levels (e.g., 6500, 6600, 6700). They are shown in blue by default and have the largest zone size.
* **Secondary Zones (Multiples of 50):** These are intermediate levels (e.g., 6550, 6650). They are shown in gray by default.
* **Tertiary Zones (Multiples of 25):** These are minor, short-term levels (e.g., 6525, 6575). They are shown in yellow by default.
The indicator is "smart"—it will not draw a 50-level zone if it's already a 100-level, and it won't draw a 25-level if it's already a 50 or 100. This keeps your chart clean and easy to read.
### How to Use It in Your Trading
* **Support & Resistance:** The primary use is to identify potential S/R. When the price approaches one of these zones, expect a reaction. A wider, primary (100) zone is a stronger level than a smaller, tertiary (25) zone.
* **Entry and Exit Targets:** Use these zones as logical places to take profit or to look for entry signals. For example, a bullish rejection candle forming in a 100-level support zone can be a powerful long signal.
* **Confluence:** The zones are most effective when they align with other technical analysis tools, such as moving averages, trendlines, or Fibonacci levels. A confluence of signals at a round number zone significantly increases its importance.
### ⚙️ Indicator Settings
You have full control over the indicator's appearance through its settings menu (click the ⚙️ icon):
* **Show Levels:** Each level type (100, 50, 25) can be turned on or off individually.
* **Number of Levels Above/Below:** Controls how many zones are drawn around the current price. You can reduce this number to declutter your chart or increase it to see a wider range.
* **Zone Size (+/-):** This determines the thickness of the colored zone around the round number, allowing you to define a wider or tighter area of interest.
* **Zone Color:** Fully customize the colors of each zone type to match your chart's theme.
-----
### 📜 Round Number Zones Indicator Code (English Version)
This is the complete code for the indicator. Copy and paste it into your Pine Editor.
```pinescript
//version=5
indicator("Round Number Zones (100, 50, 25)", "Zones", overlay=true, max_boxes_count = 100, max_labels_count = 100)
// ==========================
// --- 100-Level Zones (Primary) ---
// ==========================
GROUP_100 = "100-Level Zones (Primary)"
show100 = input.bool(true, "Show 100-Levels", group=GROUP_100)
count100 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_100)
offset100 = input.float(15.0, "Zone Size (+/-)", step=0.1, group=GROUP_100)
color100 = input.color(color.new(color.blue, 85), "Zone Color", group=GROUP_100)
// ==========================
// --- 50-Level Zones (Secondary) ---
// ==========================
GROUP_50 = "50-Level Zones (Secondary)"
show50 = input.bool(true, "Show 50-Levels", group=GROUP_50)
count50 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_50)
offset50 = input.float(7.0, "Zone Size (+/-)", step=0.1, group=GROUP_50)
color50 = input.color(color.new(color.gray, 85), "Zone Color", group=GROUP_50)
// ==========================
// --- 25-Level Zones (Tertiary) ---
// ==========================
GROUP_25 = "25-Level Zones (Tertiary)"
show25 = input.bool(true, "Show 25-Levels", group=GROUP_25)
count25 = input.int(5, "Number of Levels Above/Below", minval=1, group=GROUP_25)
offset25 = input.float(3.0, "Zone Size (+/-)", step=0.1, group=GROUP_25)
color25 = input.color(color.new(color.yellow, 90), "Zone Color", group=GROUP_25)
// Arrays to store drawings for updating
var box[] boxes100 = array.new_box()
var label[] labels100 = array.new_label()
var box[] boxes50 = array.new_box()
var label[] labels50 = array.new_label()
var box[] boxes25 = array.new_box()
var label[] labels25 = array.new_label()
// Function to delete old drawings
f_deleteDrawings(boxes, labels) =>
for b in boxes
box.delete(b)
for l in labels
label.delete(l)
array.clear(boxes)
array.clear(labels)
// Execute on the last bar only for performance
if barstate.islast
// Delete old drawings first
f_deleteDrawings(boxes100, labels100)
f_deleteDrawings(boxes50, labels50)
f_deleteDrawings(boxes25, labels25)
// Calculate the reference point based on the current close price
base_level100 = math.round(close / 100) * 100
base_level50 = math.round((close - 50) / 100) * 100 + 50
base_level25 = math.round(close / 25) * 25
// --- Draw Tertiary Levels (25, 75, 125...) ---
if show25
for i = -count25 to count25
level25 = base_level25 + (i * 25)
// Don't draw a 25-level if it's also a 50 or 100 level
if level25 % 50 != 0
lower25 = level25 - offset25
upper25 = level25 + offset25
b_25 = box.new(bar_index, upper25, bar_index + 1, lower25, extend=extend.right, border_color=na, bgcolor=color25)
l_25 = label.new(bar_index, level25, "Level 25: " + str.tostring(level25), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color25, 100), textcolor=color25, size=size.tiny)
array.push(boxes25, b_25)
array.push(labels25, l_25)
// --- Draw Secondary Levels (50, 150, 250...) ---
if show50
for i = -count50 to count50
level50 = base_level50 + (i * 100)
if level50 % 100 != 0
lower50 = level50 - offset50
upper50 = level50 + offset50
b_50 = box.new(bar_index, upper50, bar_index + 1, lower50, extend=extend.right, border_color=na, bgcolor=color50)
l_50 = label.new(bar_index, level50, "Level 50: " + str.tostring(level50), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color50, 100), textcolor=color50, size=size.small)
array.push(boxes50, b_50)
array.push(labels50, l_50)
// --- Draw Primary Levels (100, 200, 300...) ---
if show100
for i = -count100 to count100
level100 = base_level100 + (i * 100)
lower100 = level100 - offset100
upper100 = level100 + offset100
b_100 = box.new(bar_index, upper100, bar_index + 1, lower100, extend=extend.right, border_color=na, bgcolor=color100)
l_100 = label.new(bar_index, level100, "Level 100: " + str.tostring(level100), xloc=xloc.bar_time, yloc=yloc.price, style=label.style_label_left, color=color.new(color100, 100), textcolor=color100, size=size.small)
array.push(boxes100, b_100)
array.push(labels100, l_100)
```
-----
## 📈 Detailed Guide to the Round Number Zones Indicator
### Core Concept
This indicator automatically identifies and highlights key psychological price levels on your chart. Traders and institutions often place orders around "round numbers" (like $100, $50, or $25), which causes these levels to act as natural areas of support and resistance. This script saves you the manual work of finding and drawing these important zones.
### How It Works
The indicator operates by finding the current price and then calculating the nearest multiples of 100, 50, and 25 around it. It then draws colored zones to visually represent these levels.
* **Primary Zones (Multiples of 100):** These are the strongest psychological levels (e.g., 6500, 6600, 6700). They are shown in blue by default and have the largest zone size.
* **Secondary Zones (Multiples of 50):** These are intermediate levels (e.g., 6550, 6650). They are shown in gray by default.
* **Tertiary Zones (Multiples of 25):** These are minor, short-term levels (e.g., 6525, 6575). They are shown in yellow by default.
The indicator is "smart"—it will not draw a 50-level zone if it's already a 100-level, and it won't draw a 25-level if it's already a 50 or 100. This keeps your chart clean and easy to read.
### How to Use It in Your Trading
* **Support & Resistance:** The primary use is to identify potential S/R. When the price approaches one of these zones, expect a reaction. A wider, primary (100) zone is a stronger level than a smaller, tertiary (25) zone.
* **Entry and Exit Targets:** Use these zones as logical places to take profit or to look for entry signals. For example, a bullish rejection candle forming in a 100-level support zone can be a powerful long signal.
* **Confluence:** The zones are most effective when they align with other technical analysis tools, such as moving averages, trendlines, or Fibonacci levels. A confluence of signals at a round number zone significantly increases its importance.
### ⚙️ Indicator Settings
You have full control over the indicator's appearance through its settings menu (click the ⚙️ icon):
* **Show Levels:** Each level type (100, 50, 25) can be turned on or off individually.
* **Number of Levels Above/Below:** Controls how many zones are drawn around the current price. You can reduce this number to declutter your chart or increase it to see a wider range.
* **Zone Size (+/-):** This determines the thickness of the colored zone around the round number, allowing you to define a wider or tighter area of interest.
* **Zone Color:** Fully customize the colors of each zone type to match your chart's theme.
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.