Position Tool█ OVERVIEW
This script is an interactive measurement tool that can be used to evaluate or keep track of trades. Like the long and short position drawing tools, it calculates a risk reward ratio and a risk-adjusted position size from the entry, stop and take profit levels, but it also does much more:
• It can be used to configure long or short trades.
• All monetary values can be expressed in any number of currencies.
• The value of tick/pip movement (which varies with the position's size) is displayed in the currency you have selected.
• The CAGR ( Compound Annual Growth Rate ) for the trade can be displayed.
• It does live tracking of the position.
• You can configure alerts on entries and exits.
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
When you first load this script on a chart, you will enter an interactive selection mode where the script asks you to pick three points in price and time on your chart by clicking on the chart. Directions will appear in a blue box at the bottom of the screen with each click of the mouse. The first selection is the entry point for the trade you are considering, which takes into account both the time and level you choose, the next are the take profit and stop levels. Once you have selected all three points, the script will draw trade zones and labels containing the trade metrics. The script determines if the trade is a long or short from the position of the take profit and stop loss levels in relation to the entry price. If the take profit level is above the entry price, the stop must be below and vice versa, otherwise an error occurs.
You can change levels by dragging the handles that appear when you select the indicator, or by entering new values in the script's settings. The only way to re-enter interactive mode is to re-add the indicator to your chart.
Once you place the position tool on a chart, it will appear at the same levels on all symbols you use. If your scale is not set to "Scale price chart only", the position tool's levels will be taken into account when scaling the chart, which can cause the symbol's bars to be compressed. If your scale is set to "Scale price chart only", the position tool will still be there, but it will not impact the scale of the chart's bars, so you won't see it if it sits outside the symbol's price scale.
If you select the position tool on your chart and delete it, this will also delete the indicator from the chart. You will need to re-add it if you want to draw another position tool. You can add multiple instances of the indicator if you need a position tool on more than one of your charts.
█ FEATURES
Display
The position tool displays the following information for entries:
• The entry's price level with an '@' sign before it.
• Open or Closed P&L : For an open trade, the "Open P&L" displays the difference in money value between the entry level and the chart's current price.
For a closed trade, the "Closed P&L" displays the realized P&L on the trade.
• Quantity : The trade size, which takes into account the risk tolerance you set in the script's settings.
• RR : The reward to risk ratio expresses the relationship of the distance between the entry and the take profit level vs the entry and the stop level.
Example: A $100 stop with a $100 target will have a ratio of 1:1, whereas a $200 target with the same stop will have a 2:1 ratio.
• Per tick/pip : Represents the money value of a tick or pip movement.
• CAGR : The Compound Annual Growth Rate will be displayed on the main order label on trades that exceed one day in duration.
This value is calculated the same way as in our CAGR Custom Range indicator.
If the trade duration is less than one day, the metric will not be present in the display.
The stop and take profit levels display:
• Their price level with an '@' sign before it.
• Their distance from the entry in money value, percentage and ticks/pips.
• The projected end money value of the position if the level is reached. These values are calculated based on the trade size and the currency.
Currency adjustments
This indicator modifies the trade label's colors and values based on the final Profit and Loss (P&L), which considers the dynamic exchange rate between base and conversion currencies in its calculations when the conversion currency is a specified value other than the default. Depending on the cross rate between the base and account currencies, this process can yield a negative P&L on an otherwise successful simulated trade.
For instance, if your account is in currency XYZ, you might buy 10 Apple shares at $150 each, with the XYZ to USD exchange rate being 2:1. This purchase would cost you 3000 units of XYZ. Suppose that later on, the shares appreciate to $170 each, and you decide to sell. One might expect this trade to result in profit. However, if the exchange rate has now equalized to 1:1, the return on selling the shares, calculated in XYZ, would only be 1700 units, resulting in a loss of 1300 units XYZ.
The indicator will mark the P&L and the target labels in red in such cases, regardless of whether the market price reached the profit target, as the trade produced a net loss due to reduced funds after currency conversion. Conversely, an otherwise unsuccessful position can result in a net profit in the account currency due to conversion rate fluctuations. The final losses or gains appear in the label metrics, and the corresponding color coding reflects the trade's success or failure.
Settings
The settings in the "Trade sizing" section are used to calculate the position size and the monetary value of trades. Two types of risk can be chosen from the menu; a percentage based risk calculation, or a fixed money value. The risk is used to calculate the quantity of units to purchase to achieve that level of risk exposure. Example: An account size of $1000 and 10% risk will have a projected end amount of $900 if the stop loss is hit. The quantity is a product of this relationship; a projected number of units to allow for the equivalent of $100 of risk exposure over the change in price from the entry to the stop value.
The "Trade levels" allow you to manually set the entry, take profit and stop levels of an existing position tool on your chart.
You can control the appearance of the tool and the values it displays in the settings following these first two sections.
Alerts
Three alerts that will trigger when you configure an alert on this indicator. The first will send an alert when the entry price is breached by price action if that price has not already been breached in the previous price history. This is dependant on the entry location you select when placing the indicator on the chart. The other two alerts will trigger when either the stop loss or the take profit level is breached to signal that a trade exit has occurred.
█ NOTES FOR Pine Script™ CODERS
• Interactive inputs are implemented for input.time() and input.price() . These specialized input functions allow users to interact with a script.
You can create one interactive input for both time and price values by using the same `inline` argument in a pair of input.time() and input.price() function calls.
• We use the `cagr()` function from our ta library.
• The script uses the runtime.error() function to throw an error if the stop and limit prices are not placed on opposing sides of the entry price.
• We use the `currency` parameter in a request.security() call to convert currencies.
Look first. Then leap.
Buscar en scripts para "文华财经tick价格"
Generalized Step Moving Average w/ Pips Filter [Loxx]Generalized Step Moving Average w/ Pips Filter is a stepping function on source input to derive a moving average. This general form the stepping can also be applied to any other input such as EMA, SMA, HMA, WMA, etc.. This moving average employ a filtering system based on the following:
Core filter, both min and max value: pips * (multiplier) or the (average of momentum) * (multiplier).
Post processing filter: pips * (multiplier)
These filtering options require trend to shift by the above values before changing direction thereby reducing noise and yielding a better defined trend.
Things to note
This indicator requires fine tuning to make it work on all tickers. If you place this on a chart and it shows all green or red candles, then you must adjust the indicator to coincide with the pip movement of that ticker.
This indicator can be used on any timeframe.
Included
Bar coloring
Signals
Alerts
Loxx's Expanded Source Types
[MAD] CMF 5x MTF BTCthis is a revised classic CMF indicator, with some additional features
Features:
4 different Exchanges:Tickers (clouds).
your current exchanges:ticker (white)
an averaged cmf over all 5 tickers (black)
a selectable time frame for all tickers
3 buy and 3 sell lines (visual H-lines only)
autocentering over ghosts
color scheme is for a dark theme, change in settings if needed.
how to use:
act the crossins
when one or two cmfs move steeply into an h-line, when moving back to the middle they have their signal and do their own risk management.
sometimes really crazy things happen in small time frames (whalegames) that you can use as a tradestop and sit it out.
generally try to go with a bigger trend that give less but better results
MACD Indicator for 5 Min ScalpThis Indicator merges the 1 min MACD with BollingerBands to dedect a bigger than avarage tick on the Macd for the 5 min Scalping Strategy
You can change the length of the bollinger bands for the upper and lower channel individually so that you can get better signals
if a tick is bigger than avarage it will be colored, else it would be gray
this is the same indicator i used to get entrys in my 5 min scalping statagy, but i wouldnt just go in a trade when there is a bigger than usual tick. You have to look at other things to
Risk Management & Position Size DashboardRisk Management and Position Size Calculator
This indicator is designed to assist traders by instantly providing the necessary information to execute orders based on defined risk parameters. This is not an indicator that tells you WHEN to buy or sell, but HOW MUCH to buy or sell based on your risk appetite. The indicator is compatible with any strategy and any instrument
The indicator uses some great pinescript features, allowing you to drag and drop your levels directly on the chart for instant feedback from the risk management dashboard. Huge timesaver.
Instructions:
1. The first time you add the indicator to your chart, you will be asked to identify your Entry, Stop and Target levels by clicking on them directly on the chart. You can at any point adjust these levels directly on the chart, or you can manually enter them in settings
2. Setup your risk profile in the indicator settings:
(a) Current Capital: Enter the current value of your trading account
(b) Max Risk Per Trade: Enter the maximum % of your Capital you want to risk per trade
(c) Max Leverage: Enter the maximum leverage you want applied to your account. This comes in handy when you trade on very low timeframes where position sizes can become very large. No matter what you enter here, position size will never exceed Max Risk Per Trade
(d) Stop Ticks: Number of ticks to use above/below the identified high/low for stops
(e) Use Current Price as Entry (Market Orders): By default, the system will use the entry level you have selected for limit orders. If you want to use the system to display data based on current price for market orders, select “Use Current Price as Entry (Market Orders)”
3. Based on your stop and target levels, the system will automatically display the dashboard for Longs (bottom of screen) or Shorts (top of screen). The levels will also be displayed to the right of the current price bar
4. Display Free Trade Level: toggle this on to display the level you should exit 50% of your position to make the trade risk free
5. Dashboard / Text size and level colours and positions are customisable
The Dashboard displays the following information at all times:
1. Entry
2. Stop
3. Trade Risk (%): Percentage price difference between Entry and Stop
4. Max Risk ($): Currency value of loss if the trade is stopped out
5. Size: Position Size to execute your trade based on your risk profile/appetite
6. Size($): Position Size in currency value
7. P&L($): Potential profit to your Capital in currency value
8. P&L(%): Potential profit to your Capital in %
9. R:R: Risk to Reward Ratio
10. % to Target: Percent price needs to move to achieve your target
Hope this helps you with your trading. I built this as I was tired of wasting time opening up spreadsheets or calculators to execute trades - especially on lower timeframes. Making the code open source so if you do make improvements to this I'd love to hear from you. Also open to suggestions.
Happy Trading!
Countdown Interval TimerCountdown Interval Timer calculates the time remaining (in seconds) until bar close and 5 custom intervals (minutes).
Given the execution model of Pine Script is ticked-based, alerts based on this indicator will only trigger if there is a tick at the right time.
Specifically, a tick would be required between the event target (close of bar time, end of minute/s interval), less the Trigger Threshold (default = 5 seconds before).
Alert instructions:
1. Create new alert
2. Select Condition options as:
a) This indicator & desired plot (Ti_Cl, Ti_01, Ti_02, Ti_03, Ti_04 or Ti_05)
b) 'Crossing Down'
c) This indicator & 'Trigger'
3. Set Options to 'Once Per Minute'
Note that if you change the input values of this indicator you will need to recreate the alert as it will not pick up the changes.
For example if you change 'Time interval 01' from 1 to 3, the alert will remain at 1
logLibrary "log"
Logging library for easily displaying debug, info, warn, error and critical messages.
No real need to explain why you might want to use this library! I'm sure you've all experienced the frustration of trying to understand the data state of your scripts... so, enjoy! More on it's way...
(Don't forget to check the helpers in the script and the useful tips below)
Some Useful Tips
By default the log console persists between bars (for history) and bars and ticks (for realtime).
Sometimes it is useful to clear the log after each candle or tick (assuming we are using the above helpers):
```
log_print(clear = true) // starts afresh on every bar and tick (excludes historical bars but good realtime tick analysis)
log_print(clear = barstate.isnew) // clears the log at the start of each bar (again, excludes historical but good realtime candle analysis)
```
It is also useful to be able to selectively understand the state of data at specific points or times within a script:
```
if log.once()
debug('useful variable', my_var) // this log only gets written once, upon first execution of this statement
if log.only(5)
debug3(a, b, c) // these variables are only logged the first five times this statement is executed
log_print(clear = false) // clear must be false and you should not write other logs on every bar, or the above will be lost
```
Final tip. If you want to view ONLY log entries of a particular level, then negate the constant:
```
log_print(level = -LOG_DEBUG)
```
Detailed Interface
once() Restrict execution to only happen once. Usage: if assert.once()\n happens_once()
Returns: bool, true on first execution within scope, false subsequently
only(repeat) Restrict execution to happen a set number of times. Usage: if assert.only(5)\n happens_five_times()
Parameters:
repeat : int, the number of times to return true
Returns: bool, true for the set number of times within scope, false subsequently
init() Initialises the log array
Returns: string , tuple based array to contain all pending log entries (__LOG)
clear(msgs) Clears the log array
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
trace(msgs, msg) Writes a trace message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the trace message to write to the log
debug(msgs, msg) Writes a debug message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the debug message to write to the log
info(msgs, msg) Writes an info message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the info message to write to the log
warn(msgs, msg) Writes a warning message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the warn message to write to the log
error(msgs, msg) Writes an error message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the error message to write to the log
fatal(msgs, msg) Writes a critical message to the log console
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
msg : string, the fatal message to write to the log
log(msgs, level, msg) Write a log message to the log console with a custom level
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
level : ing, the logging level to assign to the message
msg : string, the log message to write to the log
severity(msgs) Checks the unprocessed log messages and returns the highest present level
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
Returns: int, the highest level found within the unfiltered logs
print(msgs, level, clear, rows, text_size, position) Prints all log messages to the screen
Parameters:
msgs : string , the current collection of unfiltered and unprocessed logs (__LOG)
level : int, the minimum required log level of each message to be displayed
clear : bool, clear the printed log console after each render (useful with realtime when set to barstate.isconfirmed)
rows : int, the number of rows to display in the log console
text_size : string, the text size of the log console (global size vars)
position : string, the position of the log console (global position vars)
unittest_log(case) Log module unit tests, for inclusion in parent script test suite. Usage: log.unittest_log(__ASSERTS)
Parameters:
case : string , the current test case and array of previous unit tests (__ASSERTS)
unittest(verbose) Run the log module unit tests as a stand alone. Usage: log.unittest()
Parameters:
verbose : bool, optionally disable the full report to only display failures
Tape [LucF]█ OVERVIEW
This script prints an ersatz of a trading console's "tape" section to the right of your chart. It displays the time, price and volume of each update of the chart's feed. It also calculates volume delta for the bar. As it calculates from realtime information, it will not display information on historical bars.
█ FEATURES
Calculations
Each new line in the tape displays the last price/volume update from the TradingView feed that's building your chart. These updates do not necessarily correspond to ticks from the originating broker/exchange's matching engine. Multiple broker/exchange ticks are often aggregated in one chart update.
The script first determines if price has moved up or down since the last update. The polarity of the price change, in turn, determines the polarity of the volume for that specific update. If price does not move between consecutive updates, then the last known polarity is used. Using this method, we can calculate a running volume delta accumulation for the bar, which becomes the bar's final volume delta value when the bar closes (you can inspect values of elapsed realtime bars in the Data Window or the indicator's values). Note that these values will all reset if the script re-executes because of a change in inputs or a chart refresh.
While this method of calculating volume delta is not perfect, it is currently the most precise way of calculating volume delta available on TradingView at the moment. Calculating more precise results would require scripts to have access to bid/ask levels from any chart timeframe. Charts at seconds timeframes do use exchange/broker ticks when the feeds you are using allow for it, and this indicator will run on them, but tick data is not yet available from higher timeframes, for now. Also note that the method used in this script is far superior to the intrabar inspection technique used on historical bars in my other "Delta Volume" indicators. This is because volume delta here is calculated from many more realtime updates than the available intrabars in history.
Inputs
You can use the script's inputs to configure:
• The number of lines displayed in the tape.
• If new lines appear at the top or bottom.
• If you want to hide lines with low volume.
• The precision of volume values.
• The size of the text and the colors used to highlight either the tape's text or background.
• The position where you want the tape on your chart.
• Conditions triggering three different markers.
Display
Deltas are shown at the bottom of the tape. They are reset on each bar. Time delta displays the time elapsed since the beginning of the bar, on intraday timeframes only. Contrary to the price change display by TradingView at the top left of charts, which is calculated from the close of the previous bar, the price delta in the tape is calculated from the bar's open, because that's the information used in the calculation of volume delta. The time will become orange when volume delta's polarity diverges from that of the bar. The volume delta value represents the current, cumulative value for the bar. Its color reflects its polarity.
When new realtime bars appear on the chart, a ↻ symbol will appear before the volume value in tape lines.
Markers
There are three types of markers you can choose to display:
• Marker 1 on volume bumps. A bump is defined as two consecutive and increasing/decreasing plus/minus delta volume values,
when no divergence between the polarity of delta volume and the bar occurs on the second bar.
• Marker 2 on volume delta for the bar exceeding a limit of your choice when there is no divergence between the polarity of delta volume and the bar. These trigger at the bar's close.
• Marker 3 on tape lines with volume exceeding a threshold. These trigger in realtime. Be sure to set a threshold high enough so that it doesn't generate too many alerts.
These markers will only display briefly under the bar, but another marker appears next to the relevant line in the tape.
The marker conditions are used to trigger alerts configured on the script. Alert messages will mention the marker(s) that triggered the specific alert event, along with the relevant volume value that triggered the marker. If more than one marker triggers a single alert, they will overprint under the bar, which can make it difficult to distinguish them.
For more detailed on-chart analysis of realtime volume delta, see my Delta Volume Realtime Action .
█ NOTES FOR CODERS
This script showcases two new Pine features:
• Tables, which allow Pine programmers to display tabular information in fixed locations of the chart. The tape uses this feature.
See the Pine User Manual's page on Tables for more information.
• varip -type variables which we can use to save values between realtime updates.
See the " Using `varip` variables " publication by PineCoders for more information.
Bitfinex Spot PremiumOverview
A tool to display the spot price premium of Bitfinex coins vs the other big 3 exchanges.
Premium is calculated against:
- Coinbase
- Binance
- FTX
The average is calculated through volume weighting. The absolute difference between the Bitfinex spot price and the calculated average is then displayed on the histogram.
Interacting with the tool
Colours: Green bars indicate a positive premium (Bitfinex spot price is greater than the average), Red bars indicate a negative premium. The ability to grey out smaller premiums is also enabled with the "Grey Small Vals" checkbox, this can be used to further emphasise larger premiums.
Ticker: The ticker input allows you to detect the Bitfinex premium for any coin traded within all 4 exchanges (Bitfinex, Coinbase, Binance, FTX). Just input the coins ticker symbol, for example, "BTC", "ETH", "UNI".
Indicator Ideology
Bitfinex is known for being the home of crypto "smart money". Therefore, positive premiums indicate stronger buying from "smart money". Although this premium is a good sign of bullish/ bearish market conditions, for example, consecutive days of a negative Bitfinex premium have been pretty good at indicating short term tops in BTC, this indicator should only be used as a confirmation signal.
Combing in MACD and MTFHi all, I'm trying to wedge in the MACD into a multiple timeframe. Scope is to create:
1) an alert when the MACD across all timeframes is positive,
2) an alert when the MACD across all timeframes is negative, and
3) one when neither of them is applicable.
Would anyone be so kind to give it some thoughts, please?
//@version=2
strategy(" Easy MTF Strategy", overlay=false)
TF_1_time = input("3", "Timeframe 1")
TF_2_time = input("5", "Timeframe 2")
TF_3_time = input("15", "Timeframe 3")
TF_4_time = input("30", "Timeframe 4")
fastLen = input(title="Fast Length", type=integer, defval=12)
slowLen = input(title="Slow Length", type=integer, defval=26)
sigLen = input(title="Signal Length", type=integer, defval=9)
= macd(close, fastLen, slowLen, sigLen)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line
TF_1 = security(tickerid, TF_1_time, open) < security(tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor
TF_2 = security(tickerid, TF_2_time, open) < security(tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor
TF_3 = security(tickerid, TF_3_time, open) < security(tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor
TF_4 = security(tickerid, TF_4_time, open) < security(tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor
TF_global = TF_1 and TF_2 and TF_3 and TF_4
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width
plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)
exitCondition_Long = TF_global_bear
exitCondition_Short = TF_global
longCondition = TF_global
if (longCondition)
strategy.entry("MTF_Long", strategy.long)
shortCondition = TF_global_bear
if (shortCondition)
strategy.entry("MTF_Short", strategy.short)
strategy.close("MTF_Long", when=exitCondition_Long)
strategy.close("MTF_Short", when=exitCondition_Short)
PongExperience PONG! The classic arcade game, now on your charts!
With this indicator, you can finally achieve your lifelong dream of beating the Markets. . . at PONG!
Pong is jam-packed with features! Such as:
2 Paddles
A moving dot
Floating numbers
The idea of a net
This indicator is solely a visualization, it serves simply as an exercise to depict what is capable through PineScript. It can be used to re-skin other indicators or data, but on its own, is not intended as a market indicator.
With that out of the way...
> PONG
The Pong indicator is a recreation of the classic arcade game Pong developed to pit the markets against the cold hard logic of a CPU player.
Given the lack of interaction that is capable, the game is not played in the typical sense, by a player and computer or 2 players.
This version of Pong uses the chart price movements to control the "Market" Paddle, and it is contrasted by a (not AI) "CPU" Paddle, which is controlled by its own set of logic.
> Market Paddle
The Market Paddle is controlled by a data source which can be input by the user.
By default (Auto Mode), the Market Paddle is controlled through a fixed length Donchian channel range, pinning the range high to 100 and range low to 0. As seen below.
This can be altered to use data from different symbols or indicators, and can optionally be smoothed using multiple types of Moving Averages.
In the chart below, you can see how the RSI indicator is imported and smoothed to control the Market Paddle.
Note: The Market Paddle follows the moving average. If not desired, simply set the "Smoothing" input to "NONE".
> CPU Paddle
In simple terms, the CPU Paddle is a handicapped Aimbot.
Its logic is, more or less, "move directly towards the ball's vertical location".
If it were allowed to have full range of the screen, it would be impossible for it to lose a point. Due to this, we must slow it down to "play fair"... as fair as that may be.
The CPU Paddle is allowed to move at a rate specified by a certain Percent of its vertical width. By default, this is set to 2%.
Each update, the CPU Paddle can advance up or down 2% of its vertical width. The directional movement is determined based on the angle of the ball, and it's current position relative to the CPU Paddle's position. Given that it is not a direct follow, it may at times seem more... "human".
When a point is scored, the CPU paddle maintains its position, similar to the original Pong game, the paddles were controlled solely by the raw output of the controllers and did not reset.
> Ball
At the start of each point, the ball begins at the center of the screen and moves in a randomly determined angle at its base speed.
The direction is determined by the player who scored the last point. The loser of the last point "serves" the ball.
Given the circumstances, serving is a gigantic advantage. So the loser serving is just another place where the Market is given an advantage.
The ball's base speed is 1, it will move 1 (horizontal) bar on each update of the script. This speed can "technically" increase to infinity over time, if given the perfect rally. This is due to the hit logic as described below.
Note: The minimum ball speed is also 1.
> Bonk Math
When the ball hits a paddle, essentially 3 outcomes can occur, each resulting in the ball's direction being changed from positive to negative.
Action A: Its angle is doubled, and its speed is doubled.
Action B: Its angle is reversed, and its speed is decreased if it is going faster than base speed.
Action C: Its angle is preserved, and its speed is preserved. "Basic Bounce"
Each paddle is segmented into 3 zones, with the higher and lower tips (20%) of the paddles producing special actions.
The central 60% of each paddle produces a basic bounce. The special actions are determined by the trajectory of the ball and location on the paddle.
> Custom Mode
As stated above, the script loads in "Auto Mode" by default. While this works fine to simply watch the gameplay, the Custom Mode unlocks the ability to visualize countless possibilities of indicators and analyses playing Pong!
In the chart below, we have set up the game to use the NYSE TICK Index as our Market Player. The NYSE TICK Index shows the number of NYSE stocks trading on an uptick minus those on a downtick. Its values fluctuate throughout the day, typically ranging between +1000 and -1000.
Therefore, we have set up Pong to use Ticker USI:TICK and set the Upper Boundary to 1000 and Lower Boundary to -1000. With this method, the paddle is directly controlled by the overall (NYSE) market behaviors.
As seen in a chart earlier, you can also take advantage of the Custom Mode to overlay Pong onto traditional oscillators for use anywhere!
> Styles
This version of Pong comes stocked with 5 colorways to suit your chart vibes!
> Pro Tips & Additional Information
- This game has sound! For the full experience, set alerts for this indicator and a notification sound will play on each hit!*
*Due to server processing, the notification sounds are not precisely played at each hit. :(
- In auto mode, decreasing the length used will give an advantage to the market, as its actions become more sporadic over this window.
- The CPU logic system actually allows the market to have a "technical" edge, since the Market Paddle is not bound to any speed, and is solely controlled by the raw market movements/data input.
- This type of visualization only works on live charts, charts without updates will not see any movement.
- Indicator sources can only be imported from other indicators on the same chart.
- The base screen resolution is 159 bars wide, with the height determined by the boundaries.
- When using a symbol and an outside source, be mindful that the script is attempting to pull the source from the input symbol. Data can appear wonky when not considering the interactions of these inputs.
There are many small interesting details that can't be seen through the description. For example, the mid-line is made from a box. This is because a line object would not appear on top of the box used for the screen. For those keen eye'd coders, feel free to poke around in the source code to make the game truly custom.
Just remember:
The market may never be fair, but now at least it can play Pong!
Enjoy!
Omega ATR Indicator📖 Introduction
The Ω ATR Indicator was created to provide a more complete and professional framework for volatility analysis than the classic Average True Range (ATR).
While the traditional ATR is a useful tool, it has limitations: it delivers a simple rolling average of volatility, but it does not adapt to market regimes, it does not highlight extreme events, and it often leaves the trader with incomplete information about risk.
The Ω ATR takes the same foundation and elevates it into a multi-dimensional volatility dashboard, adding statistical layers, adaptive calculations, and clear visual references that allow traders to interpret volatility in a way that is immediately actionable.
🔎 What makes it different from a standard ATR?
This indicator introduces several features beyond the classic formula:
True Range Core – plots the raw True Range (TR) for each bar, providing a direct, bar-by-bar view of volatility impulses.
Standard & Adjusted ATR – includes both the conventional ATR (smoothed average) and an Adjusted ATR that automatically corrects for extreme conditions by incorporating percentile rescaling.
Percentile Volatility Levels – dynamically calculated extreme thresholds (99.8%, 75%, 50%, 25%), plotted as dotted levels across the chart. These act as reference lines for “normal” vs. “abnormal” volatility, useful for spotting unusual price expansions or contractions.
Linear Regression Volatility Trend – overlays a regression line of volatility, showing whether the market is moving toward expansion (rising vol), contraction (falling vol), or stability.
Monetary Value Translation – the indicator converts volatility into points, ticks, and dollar values (based on the instrument’s point value). This allows futures traders and high-value instruments users to immediately see how much volatility is “worth” in cash terms.
Interactive Table Display – a real-time statistics table is displayed directly on the chart, showing:
SMA of ATR in $ and points
Percentile-based volatility range (VAR) in $ and points
Tick equivalences, for quick position sizing
⚡ How traders can use it
The Ω ATR Indicator is designed to be versatile, fitting both discretionary traders and systematic strategy developers.
Risk Management: ATR-based stop losses and position sizing are significantly improved by using the adjusted ATR and percentile thresholds. Traders can size their positions according to volatility regimes, not just raw averages.
Breakout & Exhaustion Detection: When TR or ATR values spike above the 99.8% or 95% percentile levels, this often corresponds to breakout conditions or volatility exhaustion — useful for breakout strategies, mean-reversion setups, and volatility fades.
Market Regime Identification: The regression line helps distinguish if volatility is rising (trending environment, larger swings expected) or compressing (range-bound environment, lower risk opportunities).
Multi-Asset Flexibility: Works equally well on equities, futures, crypto, and FX. Its point/tick/dollar conversion makes it especially powerful for futures traders who need to quantify risk precisely.
Scalping to Swing Trading: On lower timeframes, it acts as a micro-volatility detector; on higher timeframes, it functions as a strategic risk gauge for position management.
⚙️ Settings and Customization
Length: The ATR lookback period (default = 34).
Shorter lengths (14–21) for intraday traders who want fast response.
Longer lengths (34–55) for swing/position traders who want smoother readings.
AVG / ADJ AVG: Toggle to display the standard ATR or the adjusted ATR.
Volatility Levels: Enable/disable up to 4 percentile-based levels (1st = 25%, 2nd = 50%, 3rd = 75%, 4th = 99.8%). Recommended: keep 3 levels active for clarity.
Color Controls: All plots and levels are fully customizable to match your chart style.
Table Display: Positioned on the chart (default: middle-right) with key values updated in real time.
🧭 Best Practices for Use
Combine with Trend Tools: Volatility readings are most powerful when combined with trend filters or volume analysis. For example, a breakout with both high volatility and trend confirmation is stronger than either alone.
ATR Stops: Use the Adjusted ATR rather than the standard one when trailing stops in highly volatile instruments like crypto or Nasdaq futures, as it adapts to outlier spikes.
Dollar Risk Translation: Use the dollar-value outputs to predefine maximum acceptable risk per trade (e.g., “I only risk $250 per position”). This bridges volatility to portfolio risk management.
Event Monitoring: Around economic events or earnings, expect volatility spikes above higher percentile levels. The indicator makes these moves instantly visible.
📌 Summary
The Ω ATR Indicator is not just “another ATR.” It is a comprehensive volatility framework that transforms volatility from a simple statistic into an actionable trading signal.
By combining:
the classic ATR,
an adjusted ATR,
percentile extremes,
regression-based volatility trends,
and real-time dollar conversions,
…this tool allows traders to precisely understand, visualize, and act on volatility in ways that a standard ATR simply cannot provide.
Whether you are scalping intraday moves, swing trading equities, or managing futures positions, the Ω ATR equips you with a professional-grade volatility dashboard that clarifies risk, highlights opportunity, and adapts across all markets and timeframes.
👉 Designed and developed by OmegaTools for traders who demand precision, clarity, and adaptability in their volatility analysis.
Market Cap Landscape 3DHello, traders and creators! 👋
Market Cap Landscape 3D. This project is more than just a typical technical analysis tool; it's an exploration into what's possible when code meets artistry on the financial charts. It's a demonstration of how we can transcend flat, two-dimensional lines and step into a vibrant, three-dimensional world of data.
This project continues a journey that began with a previous 3D experiment, the T-Virus Sentiment, which you can explore here:
The Market Cap Landscape 3D builds on that foundation, visualizing market data—particularly crypto market caps—as a dynamic 3D mountain range. The entire landscape is procedurally generated and rendered in real-time using the powerful drawing capabilities of polyline.new() and line.new() , pushed to their creative limits.
This work is intended as a guide and a design example for all developers, born from the spirit of learning and a deep love for understanding the Pine Script™ language.
---
🧐 Core Concept: How It Works
The indicator synthesizes multiple layers of information into a single, cohesive 3D scene:
The Surface: The mountain range itself is a procedurally generated 3D mesh. Its peaks and valleys create a rich, textured landscape that serves as the canvas for our data.
Crypto Data Integration: The core feature is its ability to fetch market cap data for a list of cryptocurrencies you provide. It then sorts them in descending order and strategically places them onto the 3D surface.
The Summit: The highest point on the mountain is reserved for the asset with the #1 market cap in your list, visually represented by a flag and a custom emblem.
The Mountain Labels: The other assets are distributed across the mountainside, with their rank determining their general elevation. This creates an intuitive visual hierarchy.
The Leaderboard Pole: For clarity, a dedicated pole in the back-right corner provides a clean, ranked list of the symbols and their market caps, ensuring the data is always easy to read.
---
🧐 Example of adjusting the view
To evoke the feeling of flying over mountains
To evoke the feeling of looking at a mountain peak on a low plain
🧐 Example of predefined colors
---
🚀 How to Use
Getting started with the Market Cap Landscape 3D:
Add to Chart: Apply the "Market Cap Landscape 3D" indicator to your active chart.
Open Settings: Double-click anywhere on the 3D landscape or click the "Settings" icon next to the indicator's name.
Customize Your Crypto List: The most important setting is in the Crypto Data tab. In the "Symbols" text area, enter a comma-separated list of the crypto tickers you want to visualize (e.g., BTC,ETH,SOL,XRP ). The indicator supports up to 40 unique symbols.
> Important Note: This indicator exclusively uses TradingView's `CRYPTOCAP` data source. To find valid symbols, use the main symbol search bar on your chart. Type `CRYPTOCAP:` (including the colon) and you will see a list of available options. For example, typing `CRYPTOCAP:BTC` will confirm that `BTC` is a valid ticker for the indicator's settings. Using symbols that do not exist in the `CRYPTOCAP` index will result in a script error. or, to display other symbols, simply type CRYPTOCAP: (including the colon) and you will see a list of available options.
Adjust Your View: Use the settings in the Camera & Projection tab to rotate ( Yaw ), tilt ( Pitch ), and scale the landscape until you find a view you love.
Explore & Customize: Play with the color palettes, flag design, and other settings to make the landscape truly your own!
---
⚙️ Settings & Customization
This indicator is highly customizable. Here’s a breakdown of what each setting does:
#### 🪙 Crypto Data
Symbols: Enter the crypto tickers you want to track, separated by commas. The script automatically handles duplicates and case-insensitivity.
Show Market Cap on Mountain: When checked, it displays the full market cap value next to the symbol on the mountain. When unchecked, it shows a cleaner look with just the symbol and a colored circle background.
#### 📷 Camera & Projection
Yaw (°): Rotates the camera view horizontally (side to side).
Pitch (°): Tilts the camera view vertically (up and down).
Scale X, Y, Z: Stretches or compresses the landscape in width, depth, and height, respectively. Fine-tune these to get the perfect perspective.
#### 🏞️ Grid / Surface
Grid X/Y resolution: Controls the detail level of the 3D mesh. Higher values create a smoother surface but may use more resources.
Fill surface strips: Toggles the beautiful color gradient on the surface.
Show wireframe lines: Toggles the visibility of the grid lines.
Show nodes (markers): Toggles the small dots at each grid intersection point.
#### 🏔️ Peaks / Mountains
Fill peaks volume: Draws vertical lines on high peaks, giving them a sense of volume.
Fill peaks surface: Draws a cross-hatch pattern on the surface of high peaks.
Peak height threshold: Defines the minimum height for a peak to receive the fill effect.
Peak fill color/density: Customizes the appearance of the fill lines.
#### 🚩 Flags (3D)
Show Flag on Summit: A master switch to show or hide the flag and emblem entirely.
Flag height, width, etc.: Provides full control over the dimensions and orientation of the flag on the highest peak.
#### 🎨 Color Palette
Base Gradient Palette: Choose from 13 stunning, pre-designed color themes for the landscape, from the classic SUNSET_WAVE to vibrant themes like NEON_DREAM and OCEANIC .
#### 🛡️ Emblem / Badge Controls
This section gives you granular control over every element of the custom emblem on the flag. Tweak rotation, offsets, and scale to design your unique logo.
---
👨💻 Developer's Corner: Modifying the Core Logic
If you're a developer and wish to customize the indicator's core data source, this section is for you. The script is designed to be modular, making it easy to change what data is being ranked and visualized.
The heart of the data retrieval and ranking logic is within the f_getSortedCryptoData() function. Here’s how you can modify it:
1. Changing the Data Source (from Market Cap to something else):
The current logic uses request.security("CRYPTOCAP:" + syms.get(i), ...) to fetch market capitalization data. To change this, you need to modify this line.
Example: Ranking by RSI (14) on the Daily timeframe.
First, you'll need a function to calculate RSI. Add this function to the script:
f_getRSI(symbol, timeframe, length) =>
request.security(symbol, timeframe, ta.rsi(close, length))
Then, inside f_getSortedCryptoData() , find the `for` loop that populates the `caps` array and replace the `request.security` call:
// OLD LINE:
// caps.set(i, request.security("CRYPTOCAP:" + syms.get(i), timeframe.period, close))
// NEW LINE for RSI:
// Note: You'll need to decide how to format the symbol name (e.g., "BINANCE:" + syms.get(i) + "USDT")
caps.set(i, f_getRSI("BINANCE:" + syms.get(i) + "USDT", "D", 14))
2. Changing the Data Formatting:
The ranking values are formatted for display using the f_fmtCap() function, which currently formats large numbers into "M" (millions), "B" (billions), etc.
If you change the data source to something like RSI, you'll want to change the formatting. You can modify f_fmtCap() or create a new formatting function.
Example: Formatting for RSI.
// Modify f_fmtCap or create f_fmtRSI
f_fmtRSI(float v) =>
str.tostring(v, "#.##") // Simply format to two decimal places
Remember to update the calls to this function in the main drawing loop where the labels are created (e.g., str.format("{0}: {1}", crypto.symbol, f_fmtCap(crypto.cap)) ).
By modifying these key functions ( f_getSortedCryptoData and f_fmtCap ), you can adapt the Market Cap Landscape 3D to visualize and rank almost any dataset you can imagine, from technical indicators to fundamental data.
---
We hope you enjoy using the Market Cap Landscape 3D as much as we enjoyed creating it. Happy charting! ✨
Screener based on Profitunity strategy for multiple timeframes
Screener based on Profitunity strategy by Bill Williams for multiple timeframes (max 5, including chart timeframe) and customizable symbol list. The screener analyzes the Alligator and Awesome Oscillator indicators, Divergent bars and high volume bars.
The maximum allowed number of requests (symbols and timeframes) is limited to 40 requests, for example, for 10 symbols by 4 requests of different timeframes. Therefore, the indicator automatically limits the number of displayed symbols depending on the number of timeframes for each symbol, if there are more symbols than are displayed in the screener table, then the ordinal numbers are displayed to the left of the symbols, in this case you can display the next group of symbols by increasing the value by 1 in the "Show tickers from" field, if the "Group" field is enabled, or specify the symbol number by 1 more than the last symbol in the screener table. 👀 When timeframe filtering is applied, the screener table displays only the columns of those timeframes for which the filtering value is selected, which allows displaying more symbols.
For each timeframe, in the "TIMEFRAMES > Prev" field, you can enable the display of data for the previous bar relative to the last (current) one, if the market is open for the requested symbol. In the "TIMEFRAMES > Y" field, you can enable filtering depending on the location of the last five bars relative to the Alligator indicator lines, which are designated by special symbols in the screener table:
⬆️ — if the Alligator is open upwards (Lips > Teeth > Jaw) and none of the bars is closed below the Lips line;
↗️ — if one of the bars, except for the penultimate one, is closed below Lips, or two bars, except for the last one, are closed below Lips, or the Alligator is open upwards only below four bars, but none of the bars is closed below Lips;
⬇️ — if the Alligator is open downwards (Lips < Teeth < Jaw), but none of the bars is closed above Lips;
↘️ — if one of the bars, except the penultimate one, is closed above the Lips, or two bars, except the last one, are closed above the Lips, or the Alligator is open down only above four bars, but none of the bars are closed above the Lips;
➡️ — in other cases, including when the Alligator lines intersect and one of the bars is closed behind the Lips line or two bars intersect one of the Alligator lines.
In the "TIMEFRAMES > Show bar change value for TF" field, you can add a column to the right of the selected timeframe column with the percentage change between the closing price of the last bar (current) and the closing price of the previous bar ((close – previous close) / previous close * 100). Depending on the percentage value, the background color of the screener table cell will change: dark red if <= -3%; red if <= -2%, light red if <= -0.5%; dark green if >= 3%; green if >= 2%; light green if >= 0.5%.
For each timeframe, the screener table displays the symbol of the latest (current) bar, depending on the closing price relative to the bar's midpoint ((high + low) / 2) and its location relative to the Alligator indicator lines: ⎾ — the bar's closing price is above its midpoint; ⎿ — the bar's closing price is below its midpoint; ├ — the bar's closing price is equal to its midpoint; 🟢 — Bullish Divergent bar, i.e. the bar's closing price is above its midpoint, the bar's high is below all Alligator lines, the bar's low is below the previous bar's low; 🔴 — Bearish Divergent bar, i.e. the bar's closing price is below its midpoint, the bar's low is above all Alligator lines, the bar's high is above the previous bar's high. When filtering is enabled in the "TIMEFRAMES > Filtering by Divergent bar" field, the data in the screener table cells will be displayed only for those timeframes that have a Divergent bar. A high bar volume signal is also displayed — 📶/📶² if the bar volume is greater than 40%/70% of the average volume value calculated using a simple moving average (SMA) in the 140 bar interval from the last bar.
In the indicator settings in the "SYMBOL LIST" field, each ticker (for example: OANDA:SPX500USD) must be on a separate line. If the market is closed, then the data for requested symbols will be limited to the time of the last (current) bar on the chart, for example, if the current symbol was traded yesterday, and the requested symbol is traded today, when requesting data for an hourly timeframe, the last bar will be for yesterday, if the timeframe of the current chart is not higher than 1 day. Therefore, by default, a warning will be displayed on the chart instead of the screener table that if the market is open, you must wait for the screener to load (after the first price change on the current chart), or if the highest timeframe in the screener is 1 day, you will be prompted to change the timeframe on the current chart to 1 week, if the screener requests data for the timeframe of 1 week, you will be prompted to change the timeframe on the current chart to 1 month, or switch to another symbol on the current chart for which the market is open (for example: BINANCE:BTCUSDT), or disable the warning in the field "SYMBOL LIST > Do not display screener if market is close".
The number of the last columns with the color of the AO indicator that will be displayed in the screener table for each timeframe is specified in the indicator settings in the "AWESOME OSCILLATOR > Number of columns" field.
For each timeframe, the direction of the trend between the price of the highest and lowest bars in the specified range of bars from the last bar is displayed — ↑ if the trend is up (the highest bar is to the right of the lowest), or ↓ if the trend is down (the lowest bar is to the right of the highest). If there is a divergence on the AO indicator in the specified interval, the symbol ∇ is also displayed. The average volume value is also calculated in the specified interval using a simple moving average (SMA). The number of bars is set in the indicator settings in the "INTERVAL FOR HIGHEST AND LOWEST BARS > Bars count" field.
In the indicator settings in the "STYLE" field you can change the position of the screener table relative to the chart window, the background color, the color and size of the text.
***
Скринер на основе стратегии Profitunity Билла Вильямса для нескольких таймфреймов (максимум 5, включая таймфрейм графика) и настраиваемого списка символов. Скринер анализирует индикаторы Alligator и Awesome Oscillator, Дивергентные бары и бары с высоким объемом.
Максимально допустимое количество запросов (символы и таймфреймы) ограничено 40 запросами, например, для 10 символов по 4 запроса разных таймфреймов. Поэтому в индикаторе автоматически ограничивается количество отображаемых символов в зависимости от количества таймфреймов для каждого символа, если символов больше чем отображено в таблице скринера, то слева от символов отображаются порядковые номера, в таком случае можно отобразить следующую группу символов, увеличив значение на 1 в настройках индикатора поле "Show tickers from", если включено поле "Group", или указать номер символа на 1 больше, чем последний символ в таблице скринера. 👀 Когда применяется фильтрация по таймфрейму, в таблице скринера отображаются только столбцы тех таймфреймов, для которых выбрано значение фильтрации, что позволяет отображать большее количество символов.
Для каждого таймфрейма в настройках индикатора в поле "TIMEFRAMES > Prev" можно включить отображение данных для предыдущего бара относительно последнего (текущего), если для запрашиваемого символа рынок открыт. В поле "TIMEFRAMES > Y" можно включить фильтрацию, в зависимости от расположения последних пяти баров относительно линий индикатора Alligator, которые обозначаются специальными символами в таблице скринера:
⬆️ — если Alligator открыт вверх (Lips > Teeth > Jaw) и ни один из баров не закрыт ниже линии Lips;
↗️ — если один из баров, кроме предпоследнего, закрыт ниже Lips, или два бара, кроме последнего, закрыты ниже Lips, или Alligator открыт вверх только ниже четырех баров, но ни один из баров не закрыт ниже Lips;
⬇️ — если Alligator открыт вниз (Lips < Teeth < Jaw), но ни один из баров не закрыт выше Lips;
↘️ — если один из баров, кроме предпоследнего, закрыт выше Lips, или два бара, кроме последнего, закрыты выше Lips, или Alligator открыт вниз только выше четырех баров, но ни один из баров не закрыт выше Lips;
➡️ — в остальных случаях, в то числе когда линии Alligator пересекаются и один из баров закрыт за линией Lips или два бара пересекают одну из линий Alligator.
В поле "TIMEFRAMES > Show bar change value for TF" можно добавить справа от выбранного столбца таймфрейма столбец с процентным изменением между ценой закрытия последнего бара (текущего) и ценой закрытия предыдущего бара ((close – previous close) / previous close * 100). В зависимости от величины процента будет меняться цвет фона ячейки таблицы скринера: темно-красный, если <= -3%; красный, если <= -2%, светло-красный, если <= -0.5%; темно-зеленый, если >= 3%; зеленый, если >= 2%; светло-зеленый, если >= 0.5%.
Для каждого таймфрейма в таблице скринера отображается символ последнего (текущего) бара, в зависимости от цены закрытия относительно середины бара ((high + low) / 2) и расположения относительно линий индикатора Alligator: ⎾ — цена закрытия бара выше его середины; ⎿ — цена закрытия бара ниже его середины; ├ — цена закрытия бара равна его середине; 🟢 — Бычий Дивергентный бар, т.е. цена закрытия бара выше его середины, максимум бара ниже всех линий Alligator, минимум бара ниже минимума предыдущего бара; 🔴 — Медвежий Дивергентный бар, т.е. цена закрытия бара ниже его середины, минимум бара выше всех линий Alligator, максимум бара выше максимума предыдущего бара. При включении фильтрации в поле "TIMEFRAMES > Filtering by Divergent bar" данные в ячейках таблицы скринера будут отображаться только для тех таймфреймов, где есть Дивергентный бар. Также отображается сигнал высокого объема бара — 📶/📶², если объем бара больше чем на 40%/70% среднего значения объема, рассчитанного с помощью простой скользящей средней (SMA) в интервале 140 баров от последнего бара.
В настройках индикатора в поле "SYMBOL LIST" каждый тикер (например: OANDA:SPX500USD) должен быть на отдельной строке. Если рынок закрыт, то данные для запрашиваемых символов будут ограничены временем последнего (текущего) бара на графике, например, если текущий символ торговался последний день вчера, а запрашиваемый символ торгуется сегодня, при запросе данных для часового таймфрейма, последний бар будет за вчерашний день, если таймфрейм текущего графика не выше 1 дня. Поэтому по умолчанию на графике будет отображаться предупреждение вместо таблицы скринера о том, что если рынок открыт, то необходимо дождаться загрузки скринера (после первого изменения цены на текущем графике), или если в скринере самый высокий таймфрейм 1 день, то будет предложено изменить на текущем графике таймфрейм на 1 неделю, если в скринере запрашиваются данные для таймфрейма 1 неделя, то будет предложено изменить на текущем графике таймфрейм на 1 месяц, или же переключиться на другой символ на текущем графике, для которого рынок открыт (например: BINANCE:BTCUSDT), или отключить предупреждение в поле "SYMBOL LIST > Do not display screener if market is close".
Количество последних столбцов с цветом индикатора AO, которые будут отображены в таблице скринера для каждого таймфрейма, указывается в настройках индикатора в поле "AWESOME OSCILLATOR > Number of columns".
Для каждого таймфрейма отображается направление тренда между ценой самого высокого и самого низкого баров в указанном интервале баров от последнего бара — ↑, если тренд направлен вверх (самый высокий бар справа от самого низкого), или ↓, если тренд направлен вниз (самый низкий бар справа от самого высокого). Если есть дивергенция на индикаторе AO в указанном интервале, то также отображается символ — ∇. В указанном интервале также рассчитывается среднее значение объема с помощью простой скользящей средней (SMA). Количество баров устанавливается в настройках индикатора в поле "INTERVAL FOR HIGHEST AND LOWEST BARS > Bars count".
В настройках индикатора в поле "STYLE" можно изменить положение таблицы скринера относительно окна графика, цвет фона, цвет и размер текста.
Queso Heat IndexQueso Heat Index (QHI) — ATR-Adaptive Edge-Pressure Gauge
QHI measures how strongly price is pressing the edges of a rolling consolidation window. It heats up when price repeatedly pushes the window up , cools down when it pushes down , and drifts back toward neutral when price wanders in the middle. Everything is ATR-normalized so it adapts across symbols and timeframes.
Output: a signed score from −100 … +100
> 0 = bullish pressure (hot)
< 0 = bearish pressure (cold)
≈ 0 = neutral (no side dominating)
What you’ll see on the chart
Rolling “box” (Donchian window): top, bottom, and midline.
Optional compact-box shading when the window height is small relative to ATR.
Background “thermals”: tinted red when Heat > Hot threshold, blue when Heat < Cold threshold (intensity scales with the score).
Optional Heat line (−100..+100), optional 0/±80 thresholds, and optional push markers (PU/PD).
Optional table showing the current Heat score, placeable in any corner.
How it works (under the hood)
Consolidation window — Over lookback bars we track highest high (top), lowest low (bottom), and midpoint. The window is called “compact” when box height ≤ ATR × maxRangeATR .
ATR-based push detection — A bar is a push-up if high > prior window high + (epsATR × ATR + tick buffer) . A push-down if low < prior window low − (epsATR × ATR + tick buffer) . We also measure how many ATRs beyond the edge the bar traveled.
Heat gains (symmetric) — Each push adds/subtracts Heat:
base gain + streak bonus × consecutive pushes + magnitude bonus × ATRs beyond edge .
Decay toward neutral — Each bar, Heat decays by a percentage. Decay is:
– higher in the middle band of the box, and
– adaptive : the farther (in ATRs) from the relevant band (top when hot, bottom when cold), the faster it decays; hugging the band slows decay.
Midpoint bias (optional) — Gentle drift toward hot when trading above mid, toward cold when below mid, with a dead-zone near mid so tiny wobbles don’t matter.
Reset on regime flip (optional) — First valid push from the opposite side can snap Heat back to 0 before applying new gains.
How to read it
Rising hot with slow decay → strong upside pressure; pullbacks that hold near the top band often continue.
Flip to cold after being hot → regime change risk; tighten risk or consider the other side.
Compact window + rising hot (or cold) → squeeze-and-go conditions.
Neutral (≈ 0) → edges aren’t being pressured; expect mean-reversion inside the box.
Key inputs (what they do)
Window & ATR
lookback : size of the Donchian window (longer = smoother, slower).
atrLen : ATR period for all volatility-scaled thresholds.
maxRangeATR : defines “compact” windows for optional shading.
topBottomFrac : how thick the top/bottom bands are (used for decay/pressure logic).
Push detection (ATR-based)
epsATR : how many ATRs beyond the prior edge to count as a real push.
tickBuff : fixed extra ticks beyond the ATR epsilon (filters micro-breaches).
Heat gains
gainBase : main fuel per push.
gainPerStreak : rewards consecutive pushes.
gainPer1ATRBrk : adds more for stronger breakouts past the edge.
resetOppSide : snap back to 0 on the first opposite-side push.
Decay
decayPct : baseline % removed each bar.
decayAccelMid : multiplies decay when price is in the middle band.
adaptiveDecay , decayMinMult , decayPerATR , decayMaxMult : scale decay with ATR distance from the nearest “target” band (top if hot, bottom if cold).
Midpoint bias
useMidBias : enable/disable drift above/below midpoint.
midDeadFrac : width of neutral (no-drift) zone around mid.
midBiasPerBar : max drift per bar at the box edge.
Visuals (all default to OFF for a clean chart)
Plot Heat line + Show 0/±80 lines (only shows thresholds if Heat line is on).
Hot/Cold thresholds & transparency floors for background shading.
Push markers (PU/PD).
Heat score table : toggle on; choose any corner.
Tuning quick-starts
Daily trending equities : lookback 40–60; epsATR 0.10–0.25; gainBase 12–18; gainPerStreak 0.5–1.5; gainPer1ATRBrk 1–2; decayPct 3–6; adaptiveDecay ON (decayPerATR 0.5–0.8).
Intraday / noisy : raise epsATR and tickBuff to filter noise; keep decayPct modest so Heat can build.
Weekly swing : longer lookback/atrLen; slightly lower decayPct so regimes persist.
Alerts (included)
New window HIGH (push-up)
New window LOW (push-down)
Heat turned HOT (crosses above your Hot threshold)
Heat turned COLD (crosses below your Cold threshold)
Best practices & notes
Use QHI as a pressure gauge , not a standalone system—combine with your entry/exit plan and risk rules.
On thin symbols, increase epsATR and/or tickBuff to avoid spurious pushes.
Gap days can register large pushes; ATR scaling helps but consider context.
Want the Heat in a separate pane? Use the companion panel version; keep this overlay for background/box visuals.
Pine v6. Warm-up: values appear as soon as one bar of window history exists.
TL;DR
QHI quantifies how hard price is leaning on a consolidation edge.
It’s ATR-adaptive, streak- and magnitude-aware, and cools off intelligently when momentum fades.
Watch for thermals (background), the score (−100..+100), and fresh push alerts to time entries in the direction of pressure.
VN30 Effort-vs-Result Multi-Scanner — LinhVN30 Effort-vs-Result Multi-Scanner (Pine v5)
Cross-section scanner for Vietnam’s VN30 stocks that surfaces Effort vs Result footprints and related accumulation/distribution and volatility tells. It renders a ranked table (Top-N) with per-ticker signals and key metrics.
What it does
Scans up to 30 tickers (editable input.symbol slots) using one security() call per symbol → stays under Pine’s 40-call limit and runs reliably on any chart.
Scores each ticker by counting active signals, then ranks and lists the top names.
Optional metrics columns: zVol(60), zTR(60), ATR(20), HL/ATR(20).
Signals (toggleable)
Price/Volume – Effort vs Result
EVR Squeeze (stealth): z(Vol,60) > 4 & z(TR,60) < −0.5
5σ Vol, ≤1σ Ret: z(Vol,60) > 5 & |z(Return,60)| < 1
Wide Effort, Opposite Result: z(Vol,60) > 3 & close < open & z(CLV×Vol,60) > 1
Spread Compression, Heavy Tape: (H−L)/ATR(20) < 0.6 & z(Vol,60) > 3
No-Supply / No-Demand: close < close & range < 0.6×ATR(20) & vol < 0.5×SMA(20)
Momentum & Volatility
Vol-of-Vol Kink: z(ATR20,200) rising & z(ATR5,60) falling
BB Squeeze → Expansion: BBWidth(20) in low regime (z<−1.3) then close > upper band & z(Vol,60) > 2
RSI Non-Confirmation: Price LL/HH with RSI HL/LH & z(Vol,60) > 1
Accumulation/Distribution
OBV Divergence w/ Flat Price: OBV slope > 0 & |z(ret20,260)| < 0.3
Accumulation Days Cluster: ≥3/5 bars: up close, higher vol, close near high
Effort-Result Inversion (Down): big vol on down day then next day close > prior high
How to use
Set the timeframe (works best on 1D for EOD scans).
Edit the 30 symbol slots to your VN30 constituents.
Choose Top N, toggle Show metrics/Only matches and enable/disable scenarios.
Read the table: Rank, Ticker, (metrics), Score, and comma-separated Signals fired.
Method notes
Z-scores use a population-std estimate; CLV×Vol is used for effort/location.
Rolling counts avoid ta.sum; OBV is computed manually; all logic is Pine v5-safe.
Intraday-only ideas (true VWAP magnets, auction volume, flows, futures/options) are not included—Pine can’t cross-scan those datasets.
Disclaimer: Educational tool, not financial advice. Always confirm signals on the chart and with your process.
MSFA_LibraryLibrary "MSFA_library"
TODO: add library description here
getDecimals()
Calculates how many decimals are on the quote price of the current market
Returns: The current decimal places on the market quote price
getPipSize(multiplier)
Calculates the pip size of the current market
Parameters:
multiplier (int) : The mintick point multiplier (1 by default, 10 for FX/Crypto/CFD but can be used to override when certain markets require)
Returns: The pip size for the current market
truncate(number, decimalPlaces)
Truncates (cuts) excess decimal places
Parameters:
number (float) : The number to truncate
decimalPlaces (simple float) : (default=2) The number of decimal places to truncate to
Returns: The given number truncated to the given decimalPlaces
toWhole(number)
Converts pips into whole numbers
Parameters:
number (float) : The pip number to convert into a whole number
Returns: The converted number
toPips(number)
Converts whole numbers back into pips
Parameters:
number (float) : The whole number to convert into pips
Returns: The converted number
getPctChange(value1, value2, lookback)
Gets the percentage change between 2 float values over a given lookback period
Parameters:
value1 (float) : The first value to reference
value2 (float) : The second value to reference
lookback (int) : The lookback period to analyze
Returns: The percent change over the two values and lookback period
random(minRange, maxRange)
Wichmann–Hill Pseudo-Random Number Generator
Parameters:
minRange (float) : The smallest possible number (default: 0)
maxRange (float) : The largest possible number (default: 1)
Returns: A random number between minRange and maxRange
bullFib(priceLow, priceHigh, fibRatio)
Calculates a bullish fibonacci value
Parameters:
priceLow (float) : The lowest price point
priceHigh (float) : The highest price point
fibRatio (float) : The fibonacci % ratio to calculate
Returns: The fibonacci value of the given ratio between the two price points
bearFib(priceLow, priceHigh, fibRatio)
Calculates a bearish fibonacci value
Parameters:
priceLow (float) : The lowest price point
priceHigh (float) : The highest price point
fibRatio (float) : The fibonacci % ratio to calculate
Returns: The fibonacci value of the given ratio between the two price points
getMA(length, maType)
Gets a Moving Average based on type (! MUST BE CALLED ON EVERY TICK TO BE ACCURATE, don't place in scopes)
Parameters:
length (simple int) : The MA period
maType (string) : The type of MA
Returns: A moving average with the given parameters
barsAboveMA(lookback, ma)
Counts how many candles are above the MA
Parameters:
lookback (int) : The lookback period to look back over
ma (float) : The moving average to check
Returns: The bar count of how many recent bars are above the MA
barsBelowMA(lookback, ma)
Counts how many candles are below the MA
Parameters:
lookback (int) : The lookback period to look back over
ma (float) : The moving average to reference
Returns: The bar count of how many recent bars are below the EMA
barsCrossedMA(lookback, ma)
Counts how many times the EMA was crossed recently (based on closing prices)
Parameters:
lookback (int) : The lookback period to look back over
ma (float) : The moving average to reference
Returns: The bar count of how many times price recently crossed the EMA (based on closing prices)
getPullbackBarCount(lookback, direction)
Counts how many green & red bars have printed recently (ie. pullback count)
Parameters:
lookback (int) : The lookback period to look back over
direction (int) : The color of the bar to count (1 = Green, -1 = Red)
Returns: The bar count of how many candles have retraced over the given lookback & direction
getBodySize()
Gets the current candle's body size (in POINTS, divide by 10 to get pips)
Returns: The current candle's body size in POINTS
getTopWickSize()
Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's top wick size in POINTS
getBottomWickSize()
Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's bottom wick size in POINTS
getBodyPercent()
Gets the current candle's body size as a percentage of its entire size including its wicks
Returns: The current candle's body size percentage
isHammer(fib, colorMatch)
Checks if the current bar is a hammer candle based on the given parameters
Parameters:
fib (float) : (default=0.382) The fib to base candle body on
colorMatch (bool) : (default=false) Does the candle need to be green? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a hammer candle
isStar(fib, colorMatch)
Checks if the current bar is a shooting star candle based on the given parameters
Parameters:
fib (float) : (default=0.382) The fib to base candle body on
colorMatch (bool) : (default=false) Does the candle need to be red? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a shooting star candle
isDoji(wickSize, bodySize)
Checks if the current bar is a doji candle based on the given parameters
Parameters:
wickSize (float) : (default=2) The maximum top wick size compared to the bottom (and vice versa)
bodySize (float) : (default=0.05) The maximum body size as a percentage compared to the entire candle size
Returns: A boolean - true if the current bar matches the requirements of a doji candle
isBullishEC(allowance, rejectionWickSize, engulfWick)
Checks if the current bar is a bullish engulfing candle
Parameters:
allowance (float) : (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
rejectionWickSize (float) : (default=disabled) The maximum rejection wick size compared to the body as a percentage
engulfWick (bool) : (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bullish engulfing candle
isBearishEC(allowance, rejectionWickSize, engulfWick)
Checks if the current bar is a bearish engulfing candle
Parameters:
allowance (float) : (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
rejectionWickSize (float) : (default=disabled) The maximum rejection wick size compared to the body as a percentage
engulfWick (bool) : (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bearish engulfing candle
isInsideBar()
Detects inside bars
Returns: Returns true if the current bar is an inside bar
isOutsideBar()
Detects outside bars
Returns: Returns true if the current bar is an outside bar
barInSession(sess, useFilter)
Determines if the current price bar falls inside the specified session
Parameters:
sess (simple string) : The session to check
useFilter (bool) : (default=true) Whether or not to actually use this filter
Returns: A boolean - true if the current bar falls within the given time session
barOutSession(sess, useFilter)
Determines if the current price bar falls outside the specified session
Parameters:
sess (simple string) : The session to check
useFilter (bool) : (default=true) Whether or not to actually use this filter
Returns: A boolean - true if the current bar falls outside the given time session
dateFilter(startTime, endTime)
Determines if this bar's time falls within date filter range
Parameters:
startTime (int) : The UNIX date timestamp to begin searching from
endTime (int) : the UNIX date timestamp to stop searching from
Returns: A boolean - true if the current bar falls within the given dates
dayFilter(monday, tuesday, wednesday, thursday, friday, saturday, sunday)
Checks if the current bar's day is in the list of given days to analyze
Parameters:
monday (bool) : Should the script analyze this day? (true/false)
tuesday (bool) : Should the script analyze this day? (true/false)
wednesday (bool) : Should the script analyze this day? (true/false)
thursday (bool) : Should the script analyze this day? (true/false)
friday (bool) : Should the script analyze this day? (true/false)
saturday (bool) : Should the script analyze this day? (true/false)
sunday (bool) : Should the script analyze this day? (true/false)
Returns: A boolean - true if the current bar's day is one of the given days
atrFilter(atrValue, maxSize)
Parameters:
atrValue (float)
maxSize (float)
tradeCount()
Calculate total trade count
Returns: Total closed trade count
isLong()
Check if we're currently in a long trade
Returns: True if our position size is positive
isShort()
Check if we're currently in a short trade
Returns: True if our position size is negative
isFlat()
Check if we're currentlyflat
Returns: True if our position size is zero
wonTrade()
Check if this bar falls after a winning trade
Returns: True if we just won a trade
lostTrade()
Check if this bar falls after a losing trade
Returns: True if we just lost a trade
maxDrawdownRealized()
Gets the max drawdown based on closed trades (ie. realized P&L). The strategy tester displays max drawdown as open P&L (unrealized).
Returns: The max drawdown based on closed trades (ie. realized P&L). The strategy tester displays max drawdown as open P&L (unrealized).
totalPipReturn()
Gets the total amount of pips won/lost (as a whole number)
Returns: Total amount of pips won/lost (as a whole number)
longWinCount()
Count how many winning long trades we've had
Returns: Long win count
shortWinCount()
Count how many winning short trades we've had
Returns: Short win count
longLossCount()
Count how many losing long trades we've had
Returns: Long loss count
shortLossCount()
Count how many losing short trades we've had
Returns: Short loss count
breakEvenCount(allowanceTicks)
Count how many break-even trades we've had
Parameters:
allowanceTicks (float) : Optional - how many ticks to allow between entry & exit price (default 0)
Returns: Break-even count
longCount()
Count how many long trades we've taken
Returns: Long trade count
shortCount()
Count how many short trades we've taken
Returns: Short trade count
longWinPercent()
Calculate win rate of long trades
Returns: Long win rate (0-100)
shortWinPercent()
Calculate win rate of short trades
Returns: Short win rate (0-100)
breakEvenPercent(allowanceTicks)
Calculate break even rate of all trades
Parameters:
allowanceTicks (float) : Optional - how many ticks to allow between entry & exit price (default 0)
Returns: Break-even win rate (0-100)
averageRR()
Calculate average risk:reward
Returns: Average winning trade divided by average losing trade
unitsToLots(units)
(Forex) Convert the given unit count to lots (multiples of 100,000)
Parameters:
units (float) : The units to convert into lots
Returns: Units converted to nearest lot size (as float)
skipTradeMonteCarlo(chance, debug)
Checks to see if trade should be skipped to emulate rudimentary Monte Carlo simulation
Parameters:
chance (float) : The chance to skip a trade (0-1 or 0-100, function will normalize to 0-1)
debug (bool) : Whether or not to display a label informing of the trade skip
Returns: True if the trade is skipped, false if it's not skipped (idea being to include this function in entry condition validation checks)
fillCell(tableID, column, row, title, value, bgcolor, txtcolor, tooltip)
This updates the given table's cell with the given values
Parameters:
tableID (table) : The table ID to update
column (int) : The column to update
row (int) : The row to update
title (string) : The title of this cell
value (string) : The value of this cell
bgcolor (color) : The background color of this cell
txtcolor (color) : The text color of this cell
tooltip (string)
Returns: Nothing.
Dark Pool Block Trades - Institutional Volume📊 Dark Pool Block Trades - Institutional Volume
Visualize where institutional money positions before major price moves occur. This indicator reveals hidden dark pool block trades that often precede significant price movements - because when smart money deploys millions and billions in strategic accumulation or distribution, retail traders need to see where it's happening.
🎯 WHY DARK POOL DATA MATTERS:
Institutions don't move large capital randomly. Dark pool block trades represent strategic positioning by sophisticated money managers with superior research and conviction. These trades create hidden support/resistance levels that often predict future price action.
The key principle: Follow institutional flow, don't fight it. When institutions get involved, they create high-probability trading opportunities.
💰 HOW INSTITUTIONS INFLUENCE PRICE:
- Large block trades establish hidden accumulation/distribution zones
- Smart money builds positions BEFORE retail awareness increases
- Institutional activity creates "footprints" at key technical levels
- These trades often signal conviction plays ahead of major moves
- Institutions typically add to winning positions throughout trends
🔍 WHAT THIS INDICATOR SHOWS:
- Visual overlay of dark pool block trades directly on price charts
- Track institutional positioning across major stocks and ETFs
- Identify accumulation/distribution zones before they become obvious to retail
- Spot high-conviction institutional trades in real-time visualization
- Customizable block trade size filters and timeframe selection
- Historical institutional activity up to 5 years or custom ranges
💡 THE TRADING ADVANTAGE:
Instead of guessing price direction, see where institutions are already positioning. When large block trades appear in dark pools, you're witnessing strategic institutional commitment that frequently leads to significant price movements.
⚡ HOW IT WORKS:
This Pine Script displays institutional dark pool transactions as visual markers on your charts. The script comes with sample data for immediate use. For expanded ticker coverage and real-time updates, external data services are available.
🎯 IDEAL FOR:
- Swing traders following institutional footprints
- Traders seeking setups backed by smart money conviction
- Position traders looking for accumulation zones
- Anyone wanting to align with institutional flow rather than fight it
🔄 SAMPLE DATA INCLUDED:
Pre-loaded with institutional activity data across popular tickers, updated daily to demonstrate how dark pool activity correlates with future price movements.
The script initially covers these tickers going back 6 months showing the top 10 trades by volume over 400,000 shares: AAPL, AMD, AMZN, ARKK, ARKW, BAC, BITO, COIN, COST, DIA, ETHA, GLD, GOOGL, HD, HYG, IBB, IWM, JNJ, JPM, LQD, MA, META, MSFT, NVDA, PG, QQQ, RIOT, SLV, SMCI, SMH, SOXX, SPY, TLT, TSLA, UNH, USO, V, VEA, VNQ, VOO, VTI, VWO, WMT, XLE, XLF, XLK, XLU, XLV, XLY
Portfolio Tracker ARJO (V-01)Portfolio Tracker ARJO (V-01)
This indicator is a user-friendly portfolio tracking tool designed for TradingView charts. It overlays a customizable table on your chart to monitor up to 15 stocks or symbols in your portfolio. It calculates real-time metrics like current market price (CMP), gains/losses, and stoploss breaches, helping you stay on top of your investments without switching between multiple charts. The table uses color-coding for quick visual insights: green for profits, red for losses, and highlights breached stoplosses in red for alerts. It also shows portfolio-wide totals for overall performance.
Key Features
Supports up to 15 Symbols: Enter stock tickers (e.g., NSE:RELIANCE or BSE:TCS) with details like buy price, date, units, and stoploss.
Symbol: The stock ticker and description.
Buy Date: When you purchased it.
Units: Number of shares/units held.
Buy Price: Your entry price.
Stop Loss: Your set stoploss level (highlighted in red if breached by CMP).
CMP: Current market price (fetched from the chart's timeframe).
% Gain/Loss: Percentage change from buy price (color-coded: green for positive, red for negative).
Gain/Loss: Total monetary gain/loss based on units.
Optional Timeframe Columns: Toggle to show % change over 1 Week (1W), 1 Month (1M), 3 Months (3M), and 6 Months (6M) for historical performance.
Portfolio Summary: At the top of the table, see total % gain/loss and absolute gain/loss for your entire portfolio.
Visual Customizations: Adjust table position (e.g., Top Right), size, colors for positive/negative values, and intensity cutoff for gradients.
Benchmark Index-Based Header: The title row's background color reflects NIFTY's weekly trend (green if above 10-week SMA, red if below) for market context.
Benchmark Index-Based Header: The title row's background color reflects NIFTY's weekly trend (green if above 10-week SMA, red if below) for market context.
How to Use It: Step-by-Step Guide
Add the Indicator to Your Chart: Search for "Portfolio Tracker ARJO (V-01)" in TradingView's indicator library and add it to any chart (preferably Daily timeframe for accuracy).
Input Your Portfolio Symbols:
Open the indicator settings (gear icon).
In the "Symbol 1" to "Symbol 15" groups, fill in:
Symbol: Enter the ticker (e.g., NSE:INFY).
Year/Month/Day: Select your buy date (e.g., 2024-07-01).
Buy Price: Your purchase price per unit.
Stoploss: Your exit price if things go south.
Units: How many shares you own.
Only fill what you need—leave extras blank. The table auto-adjusts to show only entered symbols.
Customize the Table (Optional):
In "Table settings":
Choose position (e.g., Top Right) and size (% of chart).
Toggle "Show Timeframe Columns" to add 1W/1M/3M/6M performance.
In "Color settings":
Pick colors for positive (green) and negative (red) cells.
Set "Color intensity cutoff (%)" to control how strong the colors get (e.g., 10% means changes above 10% max out the color).
Interpret the Table on Your Chart:
The table appears overlaid—scan rows for each symbol's stats.
Look at colors: Greener = better gains; redder = bigger losses.
Check CMP cell: Red means stoploss breached—consider selling!
Portfolio Gain/Loss at the top gives a quick overall health check.
For Best Results:
Use on a Daily chart to avoid CMP errors (the script will warn if on Weekly/Monthly).
Refresh the chart or wait for a new bar if data doesn't update immediately.
For Indian stocks, prefix with NSE: or BSE: (e.g., BSE:RELIANCE).
This is for tracking only—not trading signals. Combine with your strategy.
If no symbols show, ensure inputs are valid (e.g., buy price > 0, valid date).
Finally, this tool makes it quite easy for beginners to track their portfolios, while also giving advanced traders powerful and customizable insights. I'd love to hear your feedback—happy trading!
Universal Valuation | Lyro RSUniversal Valuation
⚠️Disclaimer: This indicator is a tool for technical analysis and does not provide guaranteed results. It should be used in conjunction with other analysis methods and proper risk management practices. The creators of this indicator are not responsible for any financial decisions made based on its signals.
Overview
The Universal Valuation indicator helps identify whether the market is undervalued/cheap or overvalued/expensive. And another mode this indicator offers is This cutting-edge tool works flawlessly ACROSS ALL TIMEFRAMES & TICKERS/CHARTS.
By combining regular TradingView indicators & some of our valuation indicators basic/simple with advanced statistical functions, this indicator offers a powerful, universal valuation tool.
Key Features
INPUTS: The Universal Valuation indicator offers flexibility through its customizable input sections. The "Indicator Settings" let you adjust lengths for the raw indicators and statistical functions. The "Signals" section defines thresholds for background color changes, helping you visually spot key market moments. The "Colors" section allows you to pick from pre-defined schemes or personalize colors for better clarity. Lastly, the "Tables" section gives you full control over the UV table’s size and positioning, including options to overlay it on the chart or place it in the allocated space.
A DEEPER INSIGHT: This indicator is built around three distinct categories: "UVM Andromeda," "UVM Sentinel," and "UVM Nexus." Each category has three different drivers. The statistical function powering this indicator is the Z-score. The Z-score is an incredibly powerful tool that helps determine if the market is overvalued/expensive or undervalued/cheap, offering critical insights for traders."
Plotting: The plotted value represents the average of all the drivers. In other words, it is the combined average of all 9 Z-scored indicators, providing a balanced and comprehensive market valuation.
What is Z-score? & Why does this system use it?
Z-score is an advanced statistical function used to measure how far a value deviates from the average in a data set. The formula for Z-score is: (x - h) / o, where x is the observed value, h is the average (mean) of the data set, and o is the standard deviation.
This system uses the Z-score because it helps determine whether the market is overvalued or undervalued based on historical data and how we apply the calculation. By measuring how far a value deviates from the average, the Z-score provides a clearer and more objective valuation of market conditions. In our case, a Z-score of -3 indicates an undervalued market, while a Z-score of 3 signals an overvalued market.
UVM Andromeda:
UVM stands for Universal Valuation Model, which is the core of this indicator. Andromeda, one of the most stunning galaxies in the universe, inspired by its name. We chose this name because a powerful indicator should not only be effective but also visually appealing.
You might be wondering what drives UVM Andromeda. The three key drivers are Price, RSI, and ROC. These indicators are pre-defined, while the "Indicator Settings" allow you to adjust the length of the Z-score calculation, refining how the model analyzes market conditions.
UVM Sentinel:
Sentinel, refers to a guard or watchman, someone or something that keeps watch and provides protection. In our case this name refers to a model that actively observes market conditions, acting as a vigilant tool that signals important shifts in valuation.
Wondering what drives UVM Sentinel? The three key drivers are BB%, CCI, and Crosby. While these indicators are simple on their own, applying our Z-score function elevates them to a whole new level, enhancing their ability to detect market conditions with greater accuracy.
UVM Nexus:
We chose the name Nexus simply because it sounds cool—there’s no deeper meaning behind it for us. However, the word itself does have a meaning; it refers to a connection or link between multiple things.
The three key drivers for UVM Nexus are the Sharpe, Sortino, and Omega ratios. These are all asset performance metrics, but by applying the Z-score, we transform them into powerful valuation indicators/drivers, giving you a deeper insight into market conditions.
Why do we use 9 different indicators instead of 1?
That's a great question, and the answer is quite simple. Think of it like this: if you have one super soldier, and they miss a shot, it’s game over. But if you have many soldiers, even if one misses, the others can step in and take the shot. The strength of using multiple indicators lies in their collective power – if one misses, the others still provide valuable insights, making the overall system more reliable.
Final Thoughts:
In our Universal Valuation indicator, you have the flexibility to customize it however you like using our inputs. The system is divided into three distinct categories, with each category containing three indicators. The value plotted on the chart is the average of all nine indicators. We apply the Z-score, an advanced statistical function, to each of these nine indicators. The final plotted average is the average of all the Z-scores, giving you a comprehensive and refined market valuation. This indicator can work on any timeframe & chart ticker.
Sector SPDR ETFsThis script automatically identifies the SPDR sector ETF that corresponds to the currently viewed US stock ticker. It maps over 500 US-listed stocks to their respective SPDR sector ETFs — such as XLK (Technology), XLF (Financials), XLY (Consumer Discretionary), and others — based on pre-defined symbol lists.
When applied to a chart, the script displays a label below the last candle showing the SPDR sector symbol (e.g., "XLE" for Energy stocks like XOM). This allows traders and investors to quickly understand the sector classification of any stock they analyze.
Key Features:
Maps tickers to SPDR sector ETFs: XLC, XLY, XLP, XLE, XLF, XLV, XLI, XLB, XLRE, XLK, and XLU.
Displays the corresponding sector label on the chart.
Helpful for sector rotation strategies, macro analysis, or thematic investing.
Options Strategy V1.3📈 Options Strategy V1.3 — EMA Crossover + RSI + ATR + Opening Range
Overview:
This strategy is designed for short-term directional trades on large-cap stocks or ETFs, especially when trading options. It combines classic trend-following signals with momentum confirmation, volatility-based risk management, and session timing filters to help identify high-probability entries with predefined stop-loss and profit targets.
🔍 Strategy Components:
EMA Crossover (Fast/Slow)
Entry signals are triggered by the crossover of a short EMA above or below a long EMA — a traditional trend-following method to detect shifts in momentum.
RSI Filter
RSI confirms the signal by avoiding entries in overbought/oversold zones unless certain momentum conditions are met.
Long entry requires RSI ≥ Long Threshold
Short entry requires RSI ≤ Short Threshold
ATR-Based SL & TP
Stop-loss is set dynamically as a multiple of ATR below (long) or above (short) the entry price.
Take-profit is placed as a ratio (TP/SL) of the stop distance, ensuring consistent reward/risk structure.
Opening Range Filter (Optional)
If enabled, the strategy only triggers trades after price breaks out of the 09:30–09:45 EST range, ensuring participation in directional moves.
Session Filters
No trades from 04:00 to 09:30 and from 16:00 to 20:00 EST, avoiding low-liquidity periods.
All open trades are closed at 15:55 EST, to avoid overnight risk or expiration issues for options.
⚙️ Built-in Presets:
You can choose one of the built-in ticker-specific presets for optimal conditions:
Ticker EMAs RSI (Long/Short) ATR SL×ATR TP/SL
SPY 8/28 56 / 26 14 1.4× 4.0×
TSLA 23/27 56 / 33 13 1.4× 3.6×
AAPL 6/13 61 / 26 23 1.4× 2.1×
MSFT 25/32 54 / 26 14 1.2× 2.2×
META 25/32 53 / 26 17 1.8× 2.3×
AMZN 28/32 55 / 25 16 1.8× 2.3×
You can also choose "Custom" to fully configure all parameters to your own market and strategy preferences.
📌 Best Use Case:
This strategy is especially suited for intraday options trading, where timing and risk control are critical. It works best on liquid tickers with strong trends or clear breakout behavior.
Oculus Ultra Parallel S/R Channel**Oculus Ultra Parallel S/R Channel**
*Version 1.0 | Pine Script v6*
**Overview**
This indicator overlays a statistically-driven support/resistance channel on your chart by fitting a linear regression (median) line and plotting parallel bands at a configurable multiple of standard deviation. It adapts dynamically to both trend and volatility, highlights potential reaction zones, and offers optional alerts when price touches key levels.
**Key Features**
* **Median Regression Line**
Fits a best-fit line through the chosen lookback of price data, showing the underlying trend.
* **Volatility-Based Bands**
Upper and lower bands offset by *N*× standard deviation of regression residuals, capturing dynamic S/R zones.
* **Dynamic Coloring**
* Median line turns **teal** when sloping up, **orange** when sloping down.
* Bands tinted green or red depending on their position relative to the median.
* **Channel Fill**
Optional shaded area between the bands for immediate visual context.
* **Touch Alerts**
Precision alerts and on-chart markers when price touches the support or resistance band, with configurable tick tolerance.
* **Clean Layout**
Minimal lines and plots to avoid chart clutter, adjustable via toggle inputs.
**How to Use**
1. **Apply the Script** – Add to any timeframe in overlay mode.
2. **Configure Inputs** –
* **Channel Length**: Number of bars for regression and volatility calculation.
* **Deviation Factor**: Multiplier for band width (in standard deviations).
* **Show/Hide Elements**: Toggle median line, bands, fill, and touch alerts.
* **Color by Slope**: Enable slope-based median coloring.
* **Touch Tolerance**: Number of ticks within which a band touch is registered.
3. **Interpret the Channel** –
* **Trend**: Follow the slope and color of the median line.
* **Support/Resistance**: Bands represent dynamic zones where price often reacts.
* **Alerts**: Use touch markers or alert pop-ups to time entries or exits at band levels.
**Inputs**
* **Channel Length** (default: 100)
* **Deviation Factor** (default: 1.0)
* **Show Median Regression Line** (true/false)
* **Show Channel Bands** (true/false)
* **Fill Between Bands** (true/false)
* **Color Median by Slope** (true/false)
* **Alert on Band Touch** (true/false)
* **Touch Tolerance (ticks)** (default: 2)
**Version History**
* **1.0** – Initial release with dynamic regression channel, slope coloring, band fill, and touch alerts.
**Disclaimer**
This indicator is intended for educational purposes. Always backtest with your own settings and apply sound risk management before trading live.