OTT Volatility [RunRox]📊 OTT Volatility is an indicator developed by the RunRox team to pinpoint the most optimal time to trade across different markets.
OTT stands for Optimal Trade Time Volatility and is designed primarily for markets without a fixed trading session, such as cryptocurrencies that trade 24/7. At the same time, it works equally well on any other market.
🔶 The concept is straightforward. The indicator takes a specified number of historical periods (Samples) and statistically evaluates which hours of the day or which days show the highest volatility for the selected asset.
As a result, it highlights time windows with elevated volatility where traders can focus on searching for trade setups and building positions.
🔶 As the core volatility metric, the indicator uses ATR (Average True Range) to measure intraday volatility. Then it calculates the average ATR value over the last N Samples, creating a statistically stable estimate of typical volatility for the selected asset.
🔶 Statistically, during these highlighted periods the market shows higher-than-average volatility.
This means that in these time windows price is more likely to be subject to stronger moves and potential manipulation, making them attractive for active trade execution and position management.
⚠️ However, historical behavior does not guarantee future results.
These periods should be treated only as zones where volatility has a higher probability of being above normal, not as a promise of movement.
As shown in the screenshot above, the indicator also projects potential future volatility based on historical data. This helps you better plan your trading hours and align your activity with periods where volatility is statistically expected to be higher or lower.
🔶 Current Volatility – as shown in the screenshot above, you can also monitor the real-time volatility of the market without any statistical averaging.
On top of that, you can overlay the current volatility on top of the statistical volatility levels, which makes it easy to see whether the market is now trading in a high- or low-volatility regime relative to its usual behavior.
4 display modes – you can choose any visualization style that fits your trading workflow:
Absolute – displays the raw volatility values.
Relative – shows volatility relative to its typical levels.
Average Centered – centers volatility around its average value.
Trim Low Value – filters out low-volatility noise and highlights only more significant moves.
This indicator helps you define the most effective trading hours on any market by relying on historical volatility statistics.
Use it to quickly see when your market tends to be more active and to structure your trading sessions around those periods.
✅ We hope this tool becomes a useful part of your trading toolkit and helps you improve the quality of your decisions and timing. Indicator

Bollinger OTT SpreadBollinger OTT Spread (BOOTS) is a development combining Bollinger Bands with Optimized Trend Tracker (OTT) Indicator by Anıl Özekşi.
Bollinger Bands have originally 3 lines: Simple Moving Average (Middle Line), Upper Band and Lower Band.
BOOTS concentrates on the upper and lower Bollinger band lines.
First, it calculates the OTT using the UPPER and LOWER Bollinger Bands in a period of time (default lengths are 2) instead of closing prices.
After that, Upper and lower bands have more constant values.
There are 2 lines in BOOTS:
-The top (cyan) line is originally an OTT of the Upper Bollinger Band. (BOOTShigh)
-The bottom line (purple) is also an OTT line but conversely uses Lower Bollinger Band in the same period. (BOOTSlow)
Default values:
Bollinger Bands Moving AveragePeriod: 2 Bars
OTT Length: 2 Bars
OTT Optimizing coefficient (percent): %10
Bollinger Bands Standart Deviation Multiplier: 2 (not adjustable)
These values are designed for daily time frame, so they have to be optimized in other timeframes by the user. (Ex: Higher values can be considered in lower time frames)
Originally, Bollinger Bands used a Simple Moving Average in their calculation, but this time, Anıl Özekşi prefers VIDYA (Variable Dynamic Moving Average = VAR) instead of a Simple Moving Average.
Bollinger Bands cannot create significant BUY & SELL signals considering their original logic, but the primary purpose of BOOTS is to have substantial trading signals:
BUY when the price crosses above the BOOTSLower line (purple line)
STOP when the price crosses back below the BOOTSLower line (purple line)
SELL when the price crosses below the BOOTSUpper line (cyan line)
STOP when the price crosses back above the BOOTSUpper line (cyan line)
The price zone between the two lines is the flat zone; traders don't consider taking new positions in that area between the two lines.
Developer Anıl Özekşi advises that traders may have more accurate signals when using a short-period moving average instead of closing prices. So, I added a moving average with the same default length of 2 , which was used in Bollinger Bands calculation. You can check the "SHOW MOVING AVERAGE?" box on the settings tab of the indicator. Indicator

Indicator

Indicator

ottlibLibrary "ottlib"
█ OVERVIEW
This library contains functions for the calculation of the OTT (Optimized Trend Tracker) and its variants, originally created by Anıl Özekşi (Anil_Ozeksi). Special thanks to him for the concept and to Kıvanç Özbilgiç (KivancOzbilgic) and dg_factor (dg_factor) for adapting them to Pine Script.
█ WHAT IS "OTT"
The OTT (Optimized Trend Tracker) is a highly customizable and very effective trend-following indicator that relies on moving averages and a trailing stop at its core. Moving averages help reduce noise by smoothing out sudden price movements in the markets, while trailing stops assist in detecting trend reversals with precision. Initially developed as a noise-free trailing stop, the current variants of OTT range from rapid trend reversal detection to long-term trend confirmation, thanks to its extensive customizability.
It's well-known variants are:
OTT (Optimized Trend Tracker).
TOTT (Twin OTT).
OTT Channels.
RISOTTO (RSI OTT).
SOTT (Stochastic OTT).
HOTT & LOTT (Highest & Lowest OTT)
ROTT (Relative OTT)
FT (Original name is Fırsatçı Trend in Turkish which translates to Opportunist Trend)
█ LIBRARY FEATURES
This library has been prepared in accordance with the style, coding, and annotation standards of Pine Script version 5. As a result, explanations and examples will appear when users hover over functions or enter function parameters in the editor.
█ USAGE
Usage of this library is very simple. Just import it to your script with the code below and use its functions.
import ismailcarlik/ottlib/1 as ottlib
█ FUNCTIONS
• f_vidya(source, length, cmoLength)
Short Definition: Chande's Variable Index Dynamic Average (VIDYA).
Details: This function computes Chande's Variable Index Dynamic Average (VIDYA), which serves as the original moving average for OTT. The 'length' parameter determines the number of bars used to calculate the average of the given source. Lower values result in less smoothing of prices, while higher values lead to greater smoothing. While primarily used internally in this library, it has been made available for users who wish to utilize it as a moving average or use in custom OTT implementations.
Parameters:
source (float) : (series float) Series of values to process.
length (simple int) : (simple int) Number of bars to lookback.
cmoLength (simple int) : (simple int) Number of bars to lookback for calculating CMO. Default value is `9`.
Returns: (float) Calculated average of `source` for `length` bars back.
Example:
vidyaValue = ottlib.f_vidya(source = close, length = 20)
plot(vidyaValue, color = color.blue)
• f_mostTrail(source, multiplier)
Short Definition: Calculates trailing stop value.
Details: This function calculates the trailing stop value for a given source and the percentage. The 'multiplier' parameter defines the percentage of the trailing stop. Lower values are beneficial for catching short-term reversals, while higher values aid in identifying long-term trends. Although only used once internally in this library, it has been made available for users who wish to utilize it as a traditional trailing stop or use in custom OTT implementations.
Parameters:
source (float) : (series int/float) Series of values to process.
multiplier (simple float) : (simple float) Percent of trailing stop.
Returns: (float) Calculated value of trailing stop.
Example:
emaValue = ta.ema(source = close, length = 14)
mostValue = ottlib.f_mostTrail(source = emaValue, multiplier = 2.0)
plot(mostValue, color = emaValue >= mostValue ? color.green : color.red)
• f_ottTrail(source, multiplier)
Short Definition: Calculates OTT-specific trailing stop value.
Details: This function calculates the trailing stop value for a given source in the manner used in OTT. Unlike a traditional trailing stop, this function modifies the traditional trailing stop value from two bars prior by adjusting it further with half the specified percentage. The 'multiplier' parameter defines the percentage of the trailing stop. Lower values are beneficial for catching short-term reversals, while higher values aid in identifying long-term trends. Although primarily used internally in this library, it has been made available for users who wish to utilize it as a trailing stop or use in custom OTT implementations.
Parameters:
source (float) : (series int/float) Series of values to process.
multiplier (simple float) : (simple float) Percent of trailing stop.
Returns: (float) Calculated value of OTT-specific trailing stop.
Example:
vidyaValue = ottlib.f_vidya(source = close, length = 20)
ottValue = ottlib.f_ottTrail(source = vidyaValue, multiplier = 1.5)
plot(ottValue, color = vidyaValue >= ottValue ? color.green : color.red)
• ott(source, length, multiplier)
Short Definition: Calculates OTT (Optimized Trend Tracker).
Details: The OTT consists of two lines. The first, known as the "Support Line", is the VIDYA of the given source. The second, called the "OTT Line", is the trailing stop based on the Support Line. The market is considered to be in an uptrend when the Support Line is above the OTT Line, and in a downtrend when it is below.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
length (simple int) : (simple int) Number of bars to lookback. Default value is `2`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `1.4`.
Returns: ( [ float, float ]) Tuple of `supportLine` and `ottLine`.
Example:
= ottlib.ott(source = close, length = 2, multiplier = 1.4)
longCondition = ta.crossover(supportLine, ottLine)
shortCondition = ta.crossunder(supportLine, ottLine)
• tott(source, length, multiplier, bandsMultiplier)
Short Definition: Calculates TOTT (Twin OTT).
Details: TOTT consists of three lines: the "Support Line," which is the VIDYA of the given source; the "Upper Line," a trailing stop of the Support Line adjusted with an added multiplier; and the "Lower Line," another trailing stop of the Support Line, adjusted with a reduced multiplier. The market is considered in an uptrend if the Support Line is above the Upper Line and in a downtrend if it is below the Lower Line.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
length (simple int) : (simple int) Number of bars to lookback. Default value is `40`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `0.6`.
bandsMultiplier (simple float) : Multiplier for bands. Default value is `0.0006`.
Returns: ( [ float, float, float ]) Tuple of `supportLine`, `upperLine` and `lowerLine`.
Example:
= ottlib.tott(source = close, length = 40, multiplier = 0.6, bandsMultiplier = 0.0006)
longCondition = ta.crossover(supportLine, upperLine)
shortCondition = ta.crossunder(supportLine, lowerLine)
• ott_channel(source, length, multiplier, ulMultiplier, llMultiplier)
Short Definition: Calculates OTT Channels.
Details: OTT Channels comprise nine lines. The central line, known as the "Mid Line," is the OTT of the given source's VIDYA. The remaining lines are positioned above and below the Mid Line, shifted by specified multipliers.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`
length (simple int) : (simple int) Number of bars to lookback. Default value is `2`
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `1.4`
ulMultiplier (simple float) : (simple float) Multiplier for upper line. Default value is `0.01`
llMultiplier (simple float) : (simple float) Multiplier for lower line. Default value is `0.01`
Returns: ( [ float, float, float, float, float, float, float, float, float ]) Tuple of `ul4`, `ul3`, `ul2`, `ul1`, `midLine`, `ll1`, `ll2`, `ll3`, `ll4`.
Example:
= ottlib.ott_channel(source = close, length = 2, multiplier = 1.4, ulMultiplier = 0.01, llMultiplier = 0.01)
• risotto(source, length, rsiLength, multiplier)
Short Definition: Calculates RISOTTO (RSI OTT).
Details: RISOTTO comprised of two lines: the "Support Line," which is the VIDYA of the given source's RSI value, calculated based on the length parameter, and the "RISOTTO Line," a trailing stop of the Support Line. The market is considered in an uptrend when the Support Line is above the RISOTTO Line, and in a downtrend if it is below.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
length (simple int) : (simple int) Number of bars to lookback. Default value is `50`.
rsiLength (simple int) : (simple int) Number of bars used for RSI calculation. Default value is `100`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `0.2`.
Returns: ( [ float, float ]) Tuple of `supportLine` and `risottoLine`.
Example:
= ottlib.risotto(source = close, length = 50, rsiLength = 100, multiplier = 0.2)
longCondition = ta.crossover(supportLine, risottoLine)
shortCondition = ta.crossunder(supportLine, risottoLine)
• sott(source, kLength, dLength, multiplier)
Short Definition: Calculates SOTT (Stochastic OTT).
Details: SOTT is comprised of two lines: the "Support Line," which is the VIDYA of the given source's Stochastic value, based on the %K and %D lengths, and the "SOTT Line," serving as the trailing stop of the Support Line. The market is considered in an uptrend when the Support Line is above the SOTT Line, and in a downtrend when it is below.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
kLength (simple int) : (simple int) Stochastic %K length. Default value is `500`.
dLength (simple int) : (simple int) Stochastic %D length. Default value is `200`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `0.5`.
Returns: ( [ float, float ]) Tuple of `supportLine` and `sottLine`.
Example:
= ottlib.sott(source = close, kLength = 500, dLength = 200, multiplier = 0.5)
longCondition = ta.crossover(supportLine, sottLine)
shortCondition = ta.crossunder(supportLine, sottLine)
• hottlott(length, multiplier)
Short Definition: Calculates HOTT & LOTT (Highest & Lowest OTT).
Details: HOTT & LOTT are composed of two lines: the "HOTT Line", which is the OTT of the highest price's VIDYA, and the "LOTT Line", the OTT of the lowest price's VIDYA. A high price surpassing the HOTT Line can be considered a long signal, while a low price dropping below the LOTT Line may indicate a short signal.
Parameters:
length (simple int) : (simple int) Number of bars to lookback. Default value is `20`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `0.6`.
Returns: ( [ float, float ]) Tuple of `hottLine` and `lottLine`.
Example:
= ottlib.hottlott(length = 20, multiplier = 0.6)
longCondition = ta.crossover(high, hottLine)
shortCondition = ta.crossunder(low, lottLine)
• rott(source, length, multiplier)
Short Definition: Calculates ROTT (Relative OTT).
Details: ROTT comprises two lines: the "Support Line", which is the VIDYA of the given source, and the "ROTT Line", the OTT of the Support Line's VIDYA. The market is considered in an uptrend if the Support Line is above the ROTT Line, and in a downtrend if it is below. ROTT is similar to OTT, but the key difference is that the ROTT Line is derived from the VIDYA of two bars of Support Line, not directly from it.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
length (simple int) : (simple int) Number of bars to lookback. Default value is `200`.
multiplier (simple float) : (simple float) Percent of trailing stop. Default value is `0.1`.
Returns: ( [ float, float ]) Tuple of `supportLine` and `rottLine`.
Example:
= ottlib.rott(source = close, length = 200, multiplier = 0.1)
isUpTrend = supportLine > rottLine
isDownTrend = supportLine < rottLine
• ft(source, length, majorMultiplier, minorMultiplier)
Short Definition: Calculates Fırsatçı Trend (Opportunist Trend).
Details: FT is comprised of two lines: the "Support Line", which is the VIDYA of the given source, and the "FT Line", a trailing stop of the Support Line calculated using both minor and major trend values. The market is considered in an uptrend when the Support Line is above the FT Line, and in a downtrend when it is below.
Parameters:
source (float) : (series float) Series of values to process. Default value is `close`.
length (simple int) : (simple int) Number of bars to lookback. Default value is `30`.
majorMultiplier (simple float) : (simple float) Percent of major trend. Default value is `3.6`.
minorMultiplier (simple float) : (simple float) Percent of minor trend. Default value is `1.8`.
Returns: ( [ float, float ]) Tuple of `supportLine` and `ftLine`.
Example:
= ottlib.ft(source = close, length = 30, majorMultiplier = 3.6, minorMultiplier = 1.8)
longCondition = ta.crossover(supportLine, ftLine)
shortCondition = ta.crossunder(supportLine, ftLine)
█ CUSTOM OTT CREATION
Users can create custom OTT implementations using f_ottTrail function in this library. The example code which uses EMA of 7 period as moving average and calculates OTT based of it is below.
Source Code:
//@version=5
indicator("Custom OTT", shorttitle = "COTT", overlay = true)
import ismailcarlik/ottlib/1 as ottlib
src = input.source(close, title = "Source")
length = input.int(7, title = "Length", minval = 1)
multiplier = input.float(2.0, title = "Multiplier", minval = 0.1)
support = ta.ema(source = src, length = length)
ott = ottlib.f_ottTrail(source = support, multiplier = multiplier)
pSupport = plot(support, title = "Moving Average Line (Support)", color = color.blue)
pOtt = plot(ott, title = "Custom OTT Line", color = color.orange)
fillColor = support >= ott ? color.new(color.green, 60) : color.new(color.red, 60)
fill(pSupport, pOtt, color = fillColor, title = "Direction")
Result:
█ DISCLAIMER
Trading is risky and most of the day traders lose money eventually. This library and its functions are only for educational purposes and should not be construed as financial advice. Past performances does not guarantee future results. Library

Indicator

Strategy

Strategy

Indicator

HOTT and LOTTA brand new indicator adaptation via ott from OTT developer Anıl Özekşi.
Optimized Trend Tracker, OTT is an indicator that provides traders to find an existing trend or in another words to ser which side of the current trend we are on. Kıvanç Özbilgiç coded OTT from the matrix program and adapted it to pulsewire.
This indicator adaptation works with patch logic. Ott is created with the support of 10 bars Highest High and Lowest Low. The settings that the creator uses are the standard existing settings.
Here is the HighestOTT (HOTT) Line,
In general, what you need to see here is that prices tend to touch prices as they go up.
If the prices are rising, it tries to go below them, if it cannot, at least it tries to move within it.
When the price is flat or falling, it stays above the prices without touching them. This shows that our patch can do its job, which we wanted at the beginning, to protect us from horizontals and falls during purchase.
Here is the LowestOTT (LOTT) Line,
As you can notice, it uses similar construction as a structure. The only difference is that what we just did with Highest High, we are now trying to bring out the opposite effect by doing it with Lowest Low.
Now let's see hott and lott together. The places I want to draw your attention to are that prices are always above LOTT where they are on the up and sideways, and below HOTT when they are on the downtrend.
In this case, you must have understood the working principles of our patches.
If the prices are above the blue line, that is, HOTT, our buying door is opened, and as long as it is below, the buying door will remain closed.
Likewise, if the prices are below the purple line, that is, LOTT, our sales door is opened, and as long as it is above the sales door will remain closed.
Bar colors are also designed accordingly.
There is an Extra Plot Candle option in the settings tab of the indicator. This option is designed so that you can use bar colors efficiently while using normal candles. In order to use this option properly, you need to turn off the candle, border and wick colors in the symbol section of the graphic settings.
Built in Moving Average type defaultly set as VAR but users can choose from 8 different Moving Average types like:
SMA : Simple Moving Average
EMA : Exponential Moving Average
WMA : Weighted Moving Average
TMA : Triangular Moving Average
VAR : Variable Index Dynamic Moving Average a.k.a. VIDYA
WWMA : Welles Wilder's Moving Average
ZLEMA : Zero Lag Exponential Moving Average
TSF : True Strength Force
Best regards to Anıl Özekşi and Kıvanç Özbilgiç.
Indicator

Indicator

Strategy

Indicator

Indicator

Strategy

Strategy

Optimized Trend Tracker - Strategy VersionA brand new indicator from the developer of MOST (Moving Stop Loss) indicator Anıl Özekşi.
Optimized Trend Tracker OTT is an indicator that provides traders to find an existing trend or in another words to ser which side of the current trend we are on.
The original indicator was coded and published by Kıvanç Özbilgiç. You can access it from this link:
I transformed the indicator into a strategy and made some changes:
- You can run two different strategies. In the Settings section, you can test two different strategies, "Support Line Crossing Signals" and "Price / OTT Crossing Signals".
- Fixed the issue where BUY/SELL labels from the indicator script would hang in the air.
- I added a setting where you can hide BUY/SELL labels if you want.
- I painted the bars for BUY/SELL states, you can open and close in the settings section.
- As I do with every strategy script, I added a start and end date for the strategy test. You can specify the range you want to see working in the Settings section.
In addition, there were cases when the OTT line was reduced to zero in non-voluminous symbols; I changed this situation by making a small change in the code. I asked Kıvanç about the subject, I can update according to his answer.
Note : Strategy BUY / SELL tags and indicator BUY / SELL tags do not operate in the same bar because indicator tags are added when the next bar occurs. If you replay bars, you can observe label formations.
TÜRKÇE AÇIKLAMA
Orjinal indikatör Kıvanç Özbilgiç tarafından kodlanmış ve yayımlanmıştır. Bu linkten erişebilirsiniz:
İndikatörü strateji dönüştürdüm ve bazı değişiklikler yaptım:
- İki farklı strateji çalıştırabilirsiniz. Ayarlar kısmında Condition bölümünde "Support Line Crossing Signals" ve "Price/OTT Crossing Signals" olarak iki farklı stratejiyi test edebilirsiniz.
- İndikatör scriptinden gelen BUY/SELL etiketlerinin havada durması sorununu düzelttim.
- İsterseniz BUY/SELL etiketleri gizleyebileceğiniz bir ayar ekledim.
- BUY/SELL durumları için barları boyadım, ayarlar bölümünden açıp kapatabilirsiniz.
- Her strateji scriptinde yaptığım gibi, strateji testi için başlangıç ve bitiş tarihi ekledim. Ayarlar bölümünden çalışmasını görmek istediğiniz aralığı belirleyebilirsiniz.
- Ek olarak hacimsiz sembollerde OTT çizgisinin sıfıra indiği durumlar mevcuttu; kodda ufak bir değişiklik yaparak bu durumu değiştirdim. Kıvanç Bey'e konu ile ilgili soru sordum, cevabına göre güncelleme yapabilirim.
Not : Strateji BUY/SELL etiketleri ile indikatör BUY/SELL etiketleri aynı barda işlem yapmamaktadır çünkü indikatör etiketleri kendisinden sonraki bar oluşunca eklenmektedir. Barları replay yaptırırsanız oluşumlarını gözlemleyebilirsiniz. Strategy

Indicator
