LibTmFrLibrary "LibTmFr"
This is a utility library for handling timeframes and
multi-timeframe (MTF) analysis in Pine Script. It provides a
collection of functions designed to handle common tasks related
to period detection, session alignment, timeframe construction,
and time calculations, forming a foundation for
MTF indicators.
Key Capabilities:
1. **MTF Period Engine:** The library includes functions for
managing higher-timeframe (HTF) periods.
- **Period Detection (`isNewPeriod`):** Detects the first bar
of a given timeframe. It includes custom logic to handle
multi-month and multi-year intervals where
`timeframe.change()` may not be sufficient.
- **Bar Counting (`sinceNewPeriod`):** Counts the number of
bars that have passed in the current HTF period or
returns the final count for a completed historical period.
2. **Automatic Timeframe Selection:** Offers functions for building
a top-down analysis framework:
- **Automatic HTF (`autoHTF`):** Suggests a higher timeframe
(HTF) for broader context based on the current timeframe.
- **Automatic LTF (`autoLTF`):** Suggests an appropriate lower
timeframe (LTF) for granular intra-bar analysis.
3. **Timeframe Manipulation and Comparison:** Includes tools for
working with timeframe strings:
- **Build & Split (`buildTF`, `splitTF`):** Functions to
programmatically construct valid Pine Script timeframe
strings (e.g., "4H") and parse them back into their
numeric and unit components.
- **Comparison (`isHigherTF`, `isActiveTF`, `isLowerTF`):**
A set of functions to check if a given timeframe is
higher, lower, or the same as the script's active timeframe.
- **Multiple Validation (`isMultipleTF`):** Checks if a
higher timeframe is a practical multiple of the current
timeframe. This is based on the assumption that checking
if recent, completed HTF periods contained more than one
bar is a valid proxy for preventing data gaps.
4. **Timestamp Interpolation:** Contains an `interpTimestamp()`
function that calculates an absolute timestamp by
interpolating at a given percentage across a specified
range of bars (e.g., 50% of the way through the last
20 bars), enabling time calculations at a resolution
finer than the chart's native bars.
---
**DISCLAIMER**
This library is provided "AS IS" and for informational and
educational purposes only. It does not constitute financial,
investment, or trading advice.
The author assumes no liability for any errors, inaccuracies,
or omissions in the code. Using this library to build
trading indicators or strategies is entirely at your own risk.
As a developer using this library, you are solely responsible
for the rigorous testing, validation, and performance of any
scripts you create based on these functions. The author shall
not be held liable for any financial losses incurred directly
or indirectly from the use of this library or any scripts
derived from it.
buildTF(quantity, unit)
Builds a Pine Script timeframe string from a numeric quantity and a unit enum.
The resulting string can be used with `request.security()` or `input.timeframe`.
Parameters:
quantity (int) : series int Number to specifie how many `unit` the timeframe spans.
unit (series TFUnit) : series TFUnit The size category for the bars.
Returns: series string A Pine-style timeframe identifier, e.g.
"5S" → 5-seconds bars
"30" → 30-minute bars
"120" → 2-hour bars
"1D" → daily bars
"3M" → 3-month bars
"24M" → 2-year bars
splitTF(tf)
Splits a Pine‑timeframe identifier into numeric quantity and unit (TFUnit).
Parameters:
tf (string) : series string Timeframe string, e.g.
"5S", "30", "120", "1D", "3M", "24M".
Returns:
quantity series int The numeric value of the timeframe (e.g., 15 for "15", 3 for "3M").
unit series TFUnit The unit of the timeframe (e.g., TFUnit.minutes, TFUnit.months).
Notes on strings without a suffix:
• Pure digits are minutes; if divisible by 60, they are treated as hours.
• An "M" suffix is months; if divisible by 12, it is converted to years.
autoHTF(tf)
Picks an appropriate **higher timeframe (HTF)** relative to the selected timeframe.
It steps up along a coarse ladder to produce sensible jumps for top‑down analysis.
Mapping → chosen HTF:
≤ 1 min → 60 (1h) ≈ ×60
≤ 3 min → 180 (3h) ≈ ×60
≤ 5 min → 240 (4h) ≈ ×48
≤ 15 min → D (1 day) ≈ ×26–×32 (regular session 6.5–8 h)
> 15 min → W (1 week) ≈ ×64–×80 for 30m; varies with input
≤ 1 h → W (1 week) ≈ ×32–×40
≤ 4 h → M (1 month) ≈ ×36–×44 (~22 trading days / month)
> 4 h → 3M (3 months) ≈ ×36–×66 (e.g., 12h→×36–×44; 8h→×53–×66)
≤ 1 day → 3M (3 months) ≈ ×60–×66 (~20–22 trading days / month)
> 1 day → 12M (1 year) ≈ ×(252–264)/quantity
≤ 1 week → 12M (1 year) ≈ ×52
> 1 week → 48M (4 years) ≈ ×(208)/quantity
= 1 M → 48M (4 years) ≈ ×48
> 1 M → error ("HTF too big")
any → error ("HTF too big")
Notes:
• Inputs in months or years are restricted: only 1M is allowed; larger months/any years throw.
• Returns a Pine timeframe string usable in `request.security()` and `input.timeframe`.
Parameters:
tf (string) : series string Selected timeframe (e.g., "D", "240", or `timeframe.period`).
Returns: series string Suggested higher timeframe.
autoLTF(tf)
Selects an appropriate **lower timeframe LTF)** for intra‑bar evaluation
based on the selected timeframe. The goal is to keep intra‑bar
loops performant while providing enough granularity.
Mapping → chosen LTF:
≤ 1 min → 1S ≈ ×60
≤ 5 min → 5S ≈ ×60
≤ 15 min → 15S ≈ ×60
≤ 30 min → 30S ≈ ×60
> 30 min → 60S (1m) ≈ ×31–×59 (for 31–59 minute charts)
≤ 1 h → 1 (1m) ≈ ×60
≤ 2 h → 2 (2m) ≈ ×60
≤ 4 h → 5 (5m) ≈ ×48
> 4 h → 15 (15m) ≈ ×24–×48 (e.g., 6h→×24, 8h→×32, 12h→×48)
≤ 1 day → 15 (15m) ≈ ×26–×32 (regular sessions ~6.5–8h)
> 1 day → 60 (60m) ≈ ×(26–32) per day × quantity
≤ 1 week → 60 (60m) ≈ ×32–×40 (≈5 sessions of ~6.5–8h)
> 1 week → 240 (4h) ≈ ×(8–10) per week × quantity
≤ 1 M → 240 (4h) ≈ ×33–×44 (~20–22 sessions × 6.5–8h / 4h)
≤ 3 M → D (1d) ≈ ×(20–22) per month × quantity
> 3 M → W (1w) ≈ ×(4–5) per month × quantity
≤ 1 Y → W (1w) ≈ ×52
> 1 Y → M (1M) ≈ ×12 per year × quantity
Notes:
• Ratios for D/W/M are given as ranges because they depend on
**regular session length** (typically ~6.5–8h, not 24h).
• Returned strings can be used with `request.security()` and `input.timeframe`.
Parameters:
tf (string) : series string Selected timeframe (e.g., "D", "240", or timeframe.period).
Returns: series string Suggested lower TF to use for intra‑bar work.
isNewPeriod(tf, offset)
Returns `true` when a new session-aligned period begins, or on the Nth bar of that period.
Parameters:
tf (string) : series string Target higher timeframe (e.g., "D", "W", "M").
offset (simple int) : simple int 0 → checks for the first bar of the new period.
1+ → checks for the N-th bar of the period.
Returns: series bool `true` if the condition is met.
sinceNewPeriod(tf, offset)
Counts how many bars have passed within a higher timeframe (HTF) period.
For daily, weekly, and monthly resolutions, the period is aligned with the trading session.
Parameters:
tf (string) : series string Target parent timeframe (e.g., "60", "D").
offset (simple int) : simple int 0 → Running count for the current period.
1+ → Finalized count for the Nth most recent *completed* period.
Returns: series int Number of bars.
isHigherTF(tf, main)
Returns `true` when the selected timeframe represents a
higher resolution than the active timeframe.
Parameters:
tf (string) : series string Selected timeframe.
main (bool) : series bool When `true`, the comparison is made against the chart's main timeframe
instead of the script's active timeframe. Optional. Defaults to `false`.
Returns: series bool `true` if `tf` > active TF; otherwise `false`.
isActiveTF(tf, main)
Returns `true` when the selected timeframe represents the
exact resolution of the active timeframe.
Parameters:
tf (string) : series string Selected timeframe.
main (bool) : series bool When `true`, the comparison is made against the chart's main timeframe
instead of the script's active timeframe. Optional. Defaults to `false`.
Returns: series bool `true` if `tf` == active TF; otherwise `false`.
isLowerTF(tf, main)
Returns `true` when the selected timeframe represents a
lower resolution than the active timeframe.
Parameters:
tf (string) : series string Selected timeframe.
main (bool) : series bool When `true`, the comparison is made against the chart's main timeframe
instead of the script's active timeframe. Optional. Defaults to `false`.
Returns: series bool `true` if `tf` < active TF; otherwise `false`.
isMultipleTF(tf)
Returns `true` if the selected timeframe (`tf`) is a practical multiple
of the active skript's timeframe. It verifies this by checking if `tf` is a higher timeframe
that has consistently contained more than one bar of the skript's timeframe in recent periods.
The period detection is session-aware.
Parameters:
tf (string) : series string The higher timeframe to check.
Returns: series bool `true` if `tf` is a practical multiple; otherwise `false`.
interpTimestamp(offStart, offEnd, pct)
Calculates a precise absolute timestamp by interpolating within a bar range based on a percentage.
This version works with RELATIVE bar offsets from the current bar.
Parameters:
offStart (int) : series int The relative offset of the starting bar (e.g., 10 for 10 bars ago).
offEnd (int) : series int The relative offset of the ending bar (e.g., 1 for 1 bar ago). Must be <= offStart.
pct (float) : series float The percentage of the bar range to measure (e.g., 50.5 for 50.5%).
Values are clamped to the range.
Returns: series int The calculated, interpolated absolute Unix timestamp in milliseconds.
Htf-ltf
Candle Range Trading (CRT) with Alerts
📌 Description:
The Candle Range Trading (CRT) indicator identifies potential reversal or continuation setups based on specific two-candle price action patterns.
It analyzes pairs of candles to detect Bullish or Bearish CRT patterns and provides visual signals (triangles) and alert notifications to support scalp or swing trading strategies.
🔍 How It Works:
🔻 Bearish CRT Pattern:
Candle 1 is bullish
Candle 2 is bearish
Candle 2's high > Candle 1's high
Candle 2 closes within Candle 1’s range
🔺 Red triangle above candle
🔺 Bullish CRT Pattern:
Candle 1 is bearish
Candle 2 is bullish
Candle 2's low < Candle 1's low
Candle 2 closes within Candle 1’s range
🔻 Green triangle below candle
📈 Visual Features:
🔺 Red triangle = Bearish CRT
🔻 Green triangle = Bullish CRT
📏 Optional box showing CRT High and CRT Low
🔔 Built-in Alerts:
Bullish CRT Alert: "Bullish CRT Pattern Detected"
Bearish CRT Alert: "Bearish CRT Pattern Detected"
Set alerts to get notified instantly when a pattern is detected.
⚠️ Note:
Use in conjunction with trend filters, support/resistance, or volume for best results.
Ideal for scalping or short-term trades.
Avoid trading in choppy or low-volume markets.
⚠️ Disclaimer:
This script was generated with the assistance of ChatGPT by OpenAI and is intended for educational and informational purposes only.
All strategies, alerts, and signals derived from this indicator should be thoroughly backtested and validated before using in live trading.
Trading involves substantial risk, and past performance is not indicative of future results. The author and ChatGPT bear no responsibility for any trading losses or financial decisions made using this script.
Users are solely responsible for the risks associated with their trading actions. Always apply proper risk management and perform your own due diligence before making any financial decisions.
FVG Reversal Sentinel🔵 FVG Reversal Sentinel – Multi-Timeframe Fair Value Gap Indicator
The FVG Reversal Sentinel is a powerful TradingView indicator designed to help traders identify and track Fair Value Gaps (FVGs) across multiple timeframes, all within a single chart.
This tool allows you to select up to five separate timeframes, ensuring you never miss key market shifts, whether you are scalping, day trading, or swing trading. You can use this indicator in any asset (Cryptos, Futures, Indices, Forex Pairs, etc.).
🔵 - Key Features -
Multi-Timeframe FVG Tracking – Select and display up to five different timeframes on one chart, providing a comprehensive view of market structure.
Customizable Colors – Adjust bullish and bearish FVG colors to match your chart theme for a seamless trading experience.
Enhanced Market Context – Quickly identify key liquidity zones and refine your entries and exits with precision.
Hide the lower timeframes FVGs to get a clear view in a custom timeframe.
Show or hide mitigated FVGs to declutter the chart.
FVGs boxes are going to be displayed only when the candle bar closes
FVGs are going to be mitigated only when the body of the candle closes above or below the FVG area.
No repainting
Whether you're looking to fine-tune your entries or gain a broader market perspective, the FVG Reversal Sentinel indicator ensures you have the tools to stay ahead of price action and capitalize on market inefficiencies.
🔵 - Customization-
You can change the indicator settings as you see fit to achieve the best results for your use case.
TIMEFRAMES
This indicator provides the ability to select up to 5 timeframes. These timeframes are based on the trader's timeframes including any custom timeframes.
Select the desired timeframe from the options list.
Add the label text you would like to show for the selected timeframe.
Check or uncheck the box to display or hide the timeframe from your chart.
FVG SETTINGS
Length of boxes: allows you to select the length of the box that is going to be displayed for the FVGs.
Delete boxes after fill?: allows you to show or hide mitigated FVGs on your chart.
Hide FVGs lower than enabled timeframes?: allows you to show or hide lower timeframe FVGs on your chart. Example - You are in a 15 minutes timeframe chart, if you choose to hide lower timeframe FVGs you will not be able to see 5 minutes FVG defined in your Timeframes Settings, only 15 minutes or higher timeframe FVGs will be displayed on your chart.
BOX VISUALS
Bullish FVG box color: the color and opacity of the box for the bullish FVGs.
Bearish FVG box color: the color and opacity of the box for the bearish FVGs.
LABELS VISUALS
Bullish FVG labels color: the color for bullish labels.
Bearish FVG labels color: the color for bearish labels.
Labels size: the size of the text displayed in the labels.
Labels position: the position of the label inside the FVGs boxes (right, left or center).
BORDER VISUALS
Border width: the width of the border (the thickness).
Bullish FVG border color: the color and the opacity of the bullish box border.
Bearish FVG border color: the color and the opacity of the bearish box border.
🔵 - How to use the indicator -
Just add the indicator in your chart and click in the settings option to customize it.
Make sure you select the desired timeframes and set the colors and opacity for the FVGs boxes.
This indicator can be used in many trading strategies, such as:
SILVER BULLET
iFVG
iFVG RETEST
These strategies are based on the use of FVGs, this tool can help you analyze the market and make the right decision.
🔵 - How was the indicator designed? -
I have spent a lot of time testing other open source indicators from the community. All of these indicators do a great job, but they have a problem, they not only mitigate FVGs when a candle closes above or below the FVG, they also mitigate FVGs when the candle closes exactly to the tick (not above or below the FVG). This is a problem for many strategies that rely on FVGs mitigation.
What makes this indicator different is that it focuses on just mitigating imbalances at the right time for these strategies.
I have taken ideas and some pieces of code from many community indicator developers, such as:
@twingall
@tflab
@marktools
@nacho-fx
@pmk07
... and many other people, to whom I thank for their valuable work and have allowed me to create this tool by making modifications to their source code.
🔵 - Disclaimer -
This tool is intended solely for informational and educational purposes and should not be regarded as financial, investment, or trading advice. It's not designed to predict market movements or offer specific recommendations. Users should be aware that past performance is not indicative of future results and should not rely on any indicator for financial decisions.
libTFLibrary "libTF"
libTF: Find higher/lower TF automatically
This library to find higher/lower TF from current timeframe(timeframe.period) for Pine Script version6(or higher).
Basic Algorithm
Using a timeframe scale Array and timeframe.in_seconds() function to find higher/lower timeframe.
Return value is na if could not find TF in the timeframe scale.
The timeframe scale could be changed by the parameter 'scale'(CSV).
How to use
1. Set higher/lower TF
higher()/lower() function returns higher/lower TF.
Default timeframe scale is "1, 5, 15, 60, 240, 1D, 1M, 3M, 12M".
example:
htf1 = higher()
htf2 = higher(htf1)
ltf1 = lower()
ltf2 = lower(ltf1)
2. Set higher/lower TF using your timeframe scale
The timeframe scale could be changed by the parameter.
example:
myscale="1,60,1D,1M,12M"
htf1 = higher(timeframe.period,myscale)
htf2 = higher(htf1,myscale)
ltf1 = lower(timeframe.period,myscale)
ltf2 = lower(ltf1,myscale)
3. How to use with request.*() function
na value is set if no higher/lower TF in timeframe scale.
It returns current timeframe's value, when na value as timeframe parameter in request.*().
As bellow, if it should be na when timeframe is na.
example:
return_value_request_htf1 = na(htf1)?na:request.security(syminfo.tickerid,htf1,timeframe.period)
return_value_request_ltf1 = na(ltf1)?na:request.security(syminfo.tickerid,ltf1,timeframe.period)
higher(tf, scale)
higher: find higher TF from TF string.
Parameters:
tf (string) : default value is timeframe.period.
scale (string) : TF scale in CSV. default is "1,5,15,60,240,1D,1W,1M,3M,12M".
Returns: higher TF string.
lower(tf, scale)
lower: find lower TF from TF string.
Parameters:
tf (string) : default value is timeframe.period.
scale (string) : TF scale in CSV. defalut is "1,5,15,60,240,1D,1W,1M,3M,12M".
Returns: lower TF string.
HTF Candle CloseThis draws a label to alert user when a higher timeframe candle closes on a intraday chart.
Purpose of it is so that people who mainly use lower timeframe charts do not forget to look at higher timeframe candle closes.




