FINRA Daily Short Sale Volume█ OVERVIEW
This indicator displays the Daily Short Sale Volume data reported by FINRA for US Stocks markets, namely NASDAQ, NYSE and NYSE ARCA.
█ CONCEPTS
Daily Short Sale Volume data is different from the bi-monthly Short Interest data also reported by FINRA. Whereas Short Interest represents open positions, Short Sale Volume represents transactions, some of which are executed to offset other trades that will not necessarily result in an open short position reported in Short Interest data. This explains why Short Sale Volume values are always greater than Short Interest ones.
Daily Short Sale Volume provides aggregated volume by security for all short trades executed and reported to FINRA during normal market hours, i.e., media-reported trades. It's important to note that Short Sale Volume is not consolidated with exchange data and excludes trading activity that is not publicly disseminated.
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
If the chart's symbol is traded on one of the exchanges for which FINRA provides Daily Short Sale Volume, it will be displayed in columns. The columns are a brighter red when their value is above average.
You can display Short Sale Volume for another symbol by checking the "Other symbol" checkbox of the script settings' "Inputs" tab and selecting the symbol.
The moving average's length is in days, as Short Volume is daily data. You can hide the average in the script's settings "Style" tab.
█ NOTES
You will find more information on the Short Sale Volume Data and Understanding Short Sale Volume Data pages of the FINRA website.
Short Interest data reported by FINRA is not yet available on our platform.
On TradingView, Short Sale Volume data is accessible through tickers using special names. For example, NASDAQ:AAPL's Short Sale Volume data can be loaded on your chart via the FINRA:AAPL_SHORT_VOLUME ticker. The indicator displays the name of the ticker used to fetch data in the bottom left. It can be hidden by unchecking the "Tables" item in the "Style" tab of the script's settings.
Look first. Then leap.
"文华财经tick价格" için komut dosyalarını ara
The Strat Screener - yungchoppsThis indicator scan up to 40 tickers of your choice for bullish and bearish Randy Jackson setups. Randy Jackson setups are 2u-2u-2d-2u for bullish cases and 2d-2d-2u-2d for bearish cases. If a ticker has a possible RJ setup, the ticker name will be display on the table depending if it is bullish or bearish. The only thing you need to do it change one of the default tickers to the ones you desire and the table will update if there are any RJ setups. The indicators search for RJ setups on the current timeframe that you are on.
Randy Jackson setups are part of the 'Strat' candlestick analysist. More information about the Strat can be found on the internet and YouTube. This indicator reads the previous candles of every selected ticker and searched for a RJ setup. If one exist, it will update the table with the tickers name. I will add more setups in the future.
This is a screener. This indicator really just makes it easier to scan many indicators at once. Its not hard to use... just place it on the chart and it will do the work for you. Hopefully mods find this enough of a description...
FOMO DRIVEN DEVELOPMENT OPTIONS RETICLE Options Reticle caters to degenerate traders and gamblers worldwide, reaching out for long distant contract expiration and just OTM strike placement.
Generate the overlay yourself using the tradingview-options-reticle CLI tool found on GitHub.
The Options Reticle provides a targeting system overlay that will show a horizontal OTM strike price and verticle expiration target. If you're thinking as soon as the expiration date has passed, this overlay will be useless; you're right but, you can use the options-reticle CLI tool to generate a new overlay from a watchlist exported from TradingView.
OVERLAY FEATURES:
Quick Action PUT (QAP) Mode - When you flip the chart by adding a 0- in front of the symbol, you will see the PUT contract target. Strike Price / Expiration Crosshairs.
Fill Mode - Shows a fill between the historical price and the target strike price. It will show green when ITM and red when OTM. Target information panel - Shows the company name, days till expiration, month and day of expiration, strike price, dollars OTM or ITM, and the contract type.
Emotion Indicator - Shows an exact representation of your feelings based on if you were in the trade. It has an accuracy of 99.9 percent.
QUICK ACTION PUT (QAP) MODE :
This style of reticle is not visible until you flip the chart. The advantage of the (QAP) is that it maintains the same appearance as the standard style of reticle, making PUT contract targeting feel the same. When targeting with (QAP) mode, be aware that the chart prices are reversed. Up is down, and down is up; this can be confusing but will feel normal overtime. Activate QAP mode by appending a 0- to the symbol of the chart. If nothing appears, no put option data was found for that symbol.
CALIBRATING YOUR RETICLE :
The overlay is generated using the options-reticle CLI tool found on GitHub. The adjustment script will parse a watchlist exported from TradingView then download options data for each ticker in the watchlist. The max amount of symbols you can add to a single overlay is about 200. Any more than 200 and the overlay will crash. Luckily, If you use a TradingView watchlist with more than 200 ticker symbols to generate overlays, the options-reticle command-line tool will automatically create multiple overlays with 200 tickers each. You can add multiple overlays to your chart to get all the tickers in the watchlist.
RETICLE GENERATION AND MOUNTING :
Add all the tickers you want to track into a watchlist on Tradingview.
Export the watchlist into a txt file using TradingView's watchlist export list button.
Open the terminal and change to the directory with the downloaded watchlist txt file.
Install options-reticle command tool with pipx. pipx install tradingview-options-reticle.
Run the command options-reticle download --watchlist {name of watchlist.txt file}. This will download the options data to an options_data.toml in the same directory as the watchlist txt file.
Run the command options-reticle build --options-data-input-path options_data.toml. This will generate the overlay scripts. If the watch list has more than 200 ticker symbols, it will generate a separate overlay script for every 200 ticker symbol chunk.
Copy and paste each of the generated overlay scripts one at a time into the Pine Editor on TradingView, then click the Add to Chart button. Make sure you copy the entire code.
FUTURE FEATURES :
Give the choice to generate PUT option contracts without using QAP mode. This option will allow you to use the input settings to change the contract type without flipping the chart.
Max OTM target argument - This will allow the option-reticle CLI to generate overlays with deeper OTM contracts. It currently only searches for the first OTM contract.
Add the ability to change the crosshair line type.
vstop5 (RA)Upgrade standart Volatility Stop with 5 fixed values for selected tickers.
When switching between tickers - VStop multiplier will be changed to desired fixed value for fixed tickers.
If nothing mached - will be used standart value
See the example of setting here
As You can see on screenshot 5 different VStops can be set up for different tickers.
and as a result:
Доработка стандартного индикатора VStop, но с возможностью зафиксировать для 5-ти разных инструментов свое значение мультипликатора.
Далее при переключении с одного инструмента на другой - значение Мультипликатора VStop будет меняться в соответствии с сохраненными привязанными настройками. для всех НЕ привязанных инструментов - будет использовано значение Мультипликатора по умолчанию, которое также задается в Настройках.
Пример настроек тут
Market Delta [Makit0]MARKET DELTA INDICATOR v0.5 beta
Market Delta is suitable for daytrading on intraday timeframes, is a volume based indicator which allows to see the UP VOLUME vs the DOWN VOLUME, the DELTA (difference) and the CUMULATIVE DELTA (cumulative sum of difference) between them
This indicator is based on contracts volume (data avaiable), not in ask/bid volume (data not avaiable)
The up/down volume is calculated at each candle as follows:
- calculate the ticks of the range, top wick and bottom wick
- calculate the ticks up and ticks down to get the total ticks of the candle
- calculate the volume per tick as total volume divided by total ticks
- calculate the up and down volume as volume per tick multiplied by up ticks and down ticks
The delta is calculated as volume up minus volume down
The cumulative delta is a cumulative sum of delta and is resetted to 0 twice a day at the globex open and at the us cash open
By default the indicator plots the 'CANDLE MODE' which is useful for charting the cumulative volume to find out support and resistance zones where the volume is rejected or pass thru, as the volume moves so does the price, price always follows the volume, price goes away from where volume dries and price auctions comfortable where is plenty of volume, in a way PRICE FEEDS ON VOLUME
An indication about the plotting style in the volume, delta and cumulative delta modes: I can't use histogram as intended due a bug at autoresizing the scale in the candle mode, so the styles used are areabr and circles.
FEATURES
- Plot volume in one of four modes: Volume Up/Down, Delta, Cumulative Delta, Cumulative Delta as Candles
- Cumulative delta resetted twice a day (globex and cash open)
- Show a base line at 0
SETTINGS
- Mode: select one of the four volume output modes: Volume, Delta, Cumulative Delta and Candles. Candles by default
- Show zero line: show/hide the zero base line. False by default.
HOW TO SETTING UP THE INDICATOR:
BE AWARE, by default the indicator settings are configured for using the Cumulative Delta Candle Mode
- Candles Mode Settings: configured by default, mode candles and zero line off
- Volume, Delta, Cumulative Delta Mode Settings: select the mode you want and switch on/off the zero line
GOOD LUCK AND HAPPY TRADING
Trading Range Indicator - TRISimple script made to identify trading ranges in any timeframe
The oscillator bounces between 1 and 0. 1 means that the current asset is in a trading range and 0 meaning it is not.
The determination of a trading range is determined by the following:
ATR(14)40 and RSI<60
ADX<25
Due to all 3 having to be fulfilled in order for the oscillator to show there is a trading range, this causes a problem where 2 of the conditions are fulfilled and therefore still shows 0 on the oscillator, however, the asset could very well be in a trading range.
So what in the world do you use this for if there is such a significant margin of error?
Since all 3 conditions need to be fulfilled in order for it to be considered a trading range, this gives a very strong indicator of said trading ranges. So if a person is looking at individual stock tickers or the SPY index ticker, then when the oscillator reads a 1, it could be ideal to open an Iron Condor on said ticker. This means that this indicator is not well suiting for traditional long and short stock positions, but rather it is made for options traders who by using an Iron Condor can make money of a range-bound market.
NightWatch 24/5 [theUltimator5]NightWatch 24/5 is a comprehensive indicator designed to seamlessly display both regular and overnight trading (BOATS exchange) into a single chart. Current TV limitations don't allow both overnight trading and regular exchanges to appear on the same chart due to timeframe visibility settings. We can either select between RTH (Regular Trading Hours) or ETH (Extended Trading Hours). There is no option to show 24 hour charts when looking at a stock. This indicator attempts to solve this issue.
Please read the entire description thoroughly because this indicator takes a little bit of setup to work properly!
---IMPORTANT-- -
This indicator MUST be used over a liquid cryptocurrency chart, like Bitcoin. It requires access to something that trades 24/7 and has volume data for all periods. Bitcoin on Coinbase is the best option. Please select Bitcoin as your main ticker before adding this indicator to the chart.
-------------------
This indicator combines the price of both the regular trading hours and the overnight trading to create a single price line and volume candles. You can select view settings to either overlay the price on the chart, or have it below the chart. Volume can be toggled on or off as well.
Default settings:
Ticker = GME
Overlay Candles on Main Chart = true
Display Data = Both Price and Volume
Show Status Table = true
Here is an explanation for each of these settings:
Ticker - Type in the ticker you want to track overnight and intraday data for
Overlay Candles on Main chart - This will push the price candles onto the main chart area instead of below it. Volume candles will remain in their own separate pane below. This is useful if you want to track both price and volume without adding the indicator twice.
Display Data - This determines what data to show. Volume, price, or both volume and price.
Show Status Table - This toggles on or off the table that shows the ticker name, current session, and the price (change) of the ticker since the most recent daily close.
If you overlay the price onto the chart, the price of the stock you are looking at will likely be a VERY different price than the crypto it is overlaying against. There are a couple workarounds. You can either zoom into the chart around the price of the stock you are looking at (time consuming), or you can go into your object tree and drag the indicator up into the main chart area. This will overlay the price onto the crypto while maintaining it's own unique y-axis.
After you move the indicator up, you can add the indicator back a second time, then change the settings to only show the volume candles. You can then toggle off the table on one of the two so you don't see duplicate tables. This is the setting I am showing in my chart above. The indicator is added twice with the price being pulled up into the same window as Bitcoin, then a second instance below showing just volume.
--LIMITATIONS--
Since the indicator requires the use of a 24 hour market ticker like Bitcoin, it DOES NOT display extended hours data. The price and volume data STOPS at 16:00 EST then resumes back up at 20:00 EST when BOATS opens. At 04:00, the price and volume then stops until 09:30, when the regular trading hours begin. This causes a flat line in the price during those periods. Unfortunately, there is no current workaround to this issue.
If Bitcoin becomes illiquid (or whatever crypto you choose), it will only populate data for the ticker you want if there is data available for that crypto at the same time period. A gap in Bitcoin volume will show a gap in trade activity for your ticker.
LTA - Futures Contract Size CalculatorLTA - Futures Contract Size Calculator
This indicator helps futures traders calculate the potential stop-loss (SL) value for their trades with ease. Simply input your entry price, stop-loss price, and number of contracts, and the indicator will compute the ticks moved, price movement, and total SL value in USD.
Key Features:
Supports a wide range of futures contracts, including:
Index Futures: E-mini S&P 500 (ES), Micro E-mini S&P 500 (MES), E-mini Nasdaq-100 (NQ), Micro E-mini Nasdaq-100 (MNQ)
Commodity Futures: Crude Oil (CL), Gold (GC), Micro Gold (MGC), Silver (SI), Micro Silver (SIL), Platinum (PL), Micro Platinum (MPL), Natural Gas (NG), Micro Natural Gas (MNG)
Bond Futures: 30-Year T-Bond (ZB)
Currency Futures: Euro FX (6E), Japanese Yen (6J), Australian Dollar (6A), British Pound (6B), Canadian Dollar (6C), Swiss Franc (6S), New Zealand Dollar (6N)
Displays key metrics in a clean table (bottom-right corner):
Instrument, Entry Price, Stop-Loss Price, Number of Contracts, Tick Size, Ticks Moved, Price Movement, and Total SL Value.
Automatically calculates based on the selected instrument’s tick size and tick value.
User-friendly interface with a dark theme for better visibility.
How to Use:
Add the indicator to your chart.
Select your instrument from the dropdown (ensure it matches your chart’s symbol, e.g., "NG1!" for NATURAL GAS (NG)).
Input your Entry Price, Stop-Loss Price, and Number of Contracts.
View the results in the table, including the Total SL Value in USD.
Ideal For:
Futures traders looking to quickly assess stop-loss risk.
Beginners and pros trading indices, commodities, bonds, or currencies.
Note: Ensure your chart symbol matches the selected instrument for accurate calculations. For best results, test with a few contracts and price levels to confirm the output.
This description is tailored for TradingView’s audience, providing a clear overview of the indicator’s functionality, supported instruments, and usage instructions. It also includes a note to help users avoid common pitfalls (e.g., mismatched symbols). If you’d like to adjust the tone, add more details, or include specific TradingView tags (e.g., , ), let me know!
E9 MM Nuke signalScript identifies wickless candles on a specified higher timeframe and plots them on a lower timeframe (If desired), such as 15 minutes. It includes options to adjust the margin for error (e.g. 5 tick wick), higher timeframe, and toggle the volume filter with period adjustment.
Wickless candles signal strong market sentiment shifts, indicating areas of significant buying or selling pressure. These areas can become key levels of support or resistance, making them crucial to monitor for potential price revisits.
Why Price Revisits Wickless Areas
Manipulators often create artificial wickless candles to deceive traders. However, genuine market movements can also produce wickless candles, indicating a strong consensus among market participants. In either case, the price is likely to revisit these areas as traders and investors react to the perceived market sentiment shift.
Key Features:
Margin Input:
Description: Allows users to specify the margin in 0.01 tick increments to account for small wicks due to spread issues.
Example: A margin of 0.05 ticks means the script will consider candles wickless if the high is within 0.05 ticks of the open and the low is within 0.05 ticks of the open.
Volume Filter:
Description: Users can enable or disable a volume filter to consider only candles with a volume greater than the average volume over a specified period.
Default: Enabled by default.
Volume Period Input: Users can specify the period for calculating the average volume (e.g., 9 periods).
Higher Timeframe Input:
Description: Allows users to select the higher timeframe on which to identify wickless candles.
Options: H4 ("240"), Daily ("D"), Weekly ("W"), Monthly ("M").
Plotting:
Bearish Wickless Candles: Plotted with a red circle and a "🐻" emoji above the bar.
Bullish Wickless Candles: Plotted with a green circle and a "🐂" emoji below the bar.
Swing Structure Scanner [LuxAlgo]The Swing Structure Scanner Indicator is a dashboard type indicator which displays a Consolidated "High/Low-Only" view of swing structure, with the capability to retrieve and display swing points from up to 6 different tickers and timeframes at once.
🔶 USAGE
This indicator displays swing structure data from up to 6 unique tickers or timeframes; Each graph represents the current swing structure retrieved from the requested chart/s.
Each swing graph displays the current live swing point positioning relative to the previous swing points. By analyzing the different formations, patterns can more easily be recognized and found across multiple tickers or timeframes at once.
This indicator serves as a nifty tool for confluence recognition, whether that's confluence throughout market tickers, or confluence through higher timeframes on the same ticker.
Alternatively, viewing the relative positioning of each swing point to each other, should give a clearer idea when higher lows or lower highs are formed. This can potentially indicate a newly forming trend, as well as serving as a warning to watch for breakouts.
The swing length can be changed to align with each individual's strategy, as well as a display look back can be adjusted to show more or less swing points at one time.
The display is fairly customizable, it is not fixed to 6 symbols at all times and can be minimized to only display the number of symbols needed; Additionally, the display can be set to vertical mode or horizontal(default) to utilize as needed.
Note: Hover over the swing point in the dashboard to get a readout of the exact price level of the swing point.
🔶 SETTINGS
Swing Length: Set the swing length for the structure calculations.
Swing Display Lookback: Sets the number of swing points (Pairs) to display in each Swing Graph display.
Symbols: Sets the Timeframe and Symbol for each Swing Graph.
Vertical Display: Display the Swing Graphs up and down, rather than side to side.
Scaling Factor: Scales the entire indicator up or down, to fit your needs.
Hinton Map█ HINTON MAP
This script displays a Hinton Map visualization of market data for user-defined tickers and timeframes. It uses color gradients to represent the magnitude and direction of price change, RSI, and a combination of both.
This is one example. You can modify and try other values as you wish, but do keep the incoming values between -1 and 1.
In the Example Usage:
Users can input up to 5 symbols and 5 timeframes. For each ticker/timeframe combination:
The box size represents the relative magnitude of the 2-bar percentage change.
The box fill color represents the direction and magnitude of the 2-bar percentage change.
The box border color and thickness represent the RSI deviation from 50.
The inner box color represents a combination of price change magnitude and RSI deviation from 50.
Hovering over each box displays a tooltip with the ticker, timeframe, percentage change, and RSI.
Inputs:
• Unit Size (bars):
The size of each Hinton unit in bars.
Type: int
Default Value: 10
• Border Width:
The base width of the inner box border.
Type: int
Default Value: 3
• Negative Hue (0-360):
The hue value for negative price changes (0-360).
Type: float
Default Value: 100
• Positive Hue (0-360):
The hue value for positive price changes (0-360).
Type: float
Default Value: 180
• Ticker 1-5:
The tickers to display on the Hinton map.
Type: string
Default Value: AAPL
• Timeframes (comma separated):
The timeframes to display on the Hinton map (comma-separated).
Type: string
Default Value: 1, 5, 60, 1D, 1W
(Fun Note: My Home town is named `Hinton`)
Universal Ratio Trend Matrix [InvestorUnknown]The Universal Ratio Trend Matrix is designed for trend analysis on asset/asset ratios, supporting up to 40 different assets. Its primary purpose is to help identify which assets are outperforming others within a selection, providing a broad overview of market trends through a matrix of ratios. The indicator automatically expands the matrix based on the number of assets chosen, simplifying the process of comparing multiple assets in terms of performance.
Key features include the ability to choose from a narrow selection of indicators to perform the ratio trend analysis, allowing users to apply well-defined metrics to their comparison.
Drawback: Due to the computational intensity involved in calculating ratios across many assets, the indicator has a limitation related to loading speed. TradingView has time limits for calculations, and for users on the basic (free) plan, this could result in frequent errors due to exceeded time limits. To use the indicator effectively, users with any paid plans should run it on timeframes higher than 8h (the lowest timeframe on which it managed to load with 40 assets), as lower timeframes may not reliably load.
Indicators:
RSI_raw: Simple function to calculate the Relative Strength Index (RSI) of a source (asset price).
RSI_sma: Calculates RSI followed by a Simple Moving Average (SMA).
RSI_ema: Calculates RSI followed by an Exponential Moving Average (EMA).
CCI: Calculates the Commodity Channel Index (CCI).
Fisher: Implements the Fisher Transform to normalize prices.
Utility Functions:
f_remove_exchange_name: Strips the exchange name from asset tickers (e.g., "INDEX:BTCUSD" to "BTCUSD").
f_remove_exchange_name(simple string name) =>
string parts = str.split(name, ":")
string result = array.size(parts) > 1 ? array.get(parts, 1) : name
result
f_get_price: Retrieves the closing price of a given asset ticker using request.security().
f_constant_src: Checks if the source data is constant by comparing multiple consecutive values.
Inputs:
General settings allow users to select the number of tickers for analysis (used_assets) and choose the trend indicator (RSI, CCI, Fisher, etc.).
Table settings customize how trend scores are displayed in terms of text size, header visibility, highlighting options, and top-performing asset identification.
The script includes inputs for up to 40 assets, allowing the user to select various cryptocurrencies (e.g., BTCUSD, ETHUSD, SOLUSD) or other assets for trend analysis.
Price Arrays:
Price values for each asset are stored in variables (price_a1 to price_a40) initialized as na. These prices are updated only for the number of assets specified by the user (used_assets).
Trend scores for each asset are stored in separate arrays
// declare price variables as "na"
var float price_a1 = na, var float price_a2 = na, var float price_a3 = na, var float price_a4 = na, var float price_a5 = na
var float price_a6 = na, var float price_a7 = na, var float price_a8 = na, var float price_a9 = na, var float price_a10 = na
var float price_a11 = na, var float price_a12 = na, var float price_a13 = na, var float price_a14 = na, var float price_a15 = na
var float price_a16 = na, var float price_a17 = na, var float price_a18 = na, var float price_a19 = na, var float price_a20 = na
var float price_a21 = na, var float price_a22 = na, var float price_a23 = na, var float price_a24 = na, var float price_a25 = na
var float price_a26 = na, var float price_a27 = na, var float price_a28 = na, var float price_a29 = na, var float price_a30 = na
var float price_a31 = na, var float price_a32 = na, var float price_a33 = na, var float price_a34 = na, var float price_a35 = na
var float price_a36 = na, var float price_a37 = na, var float price_a38 = na, var float price_a39 = na, var float price_a40 = na
// create "empty" arrays to store trend scores
var a1_array = array.new_int(40, 0), var a2_array = array.new_int(40, 0), var a3_array = array.new_int(40, 0), var a4_array = array.new_int(40, 0)
var a5_array = array.new_int(40, 0), var a6_array = array.new_int(40, 0), var a7_array = array.new_int(40, 0), var a8_array = array.new_int(40, 0)
var a9_array = array.new_int(40, 0), var a10_array = array.new_int(40, 0), var a11_array = array.new_int(40, 0), var a12_array = array.new_int(40, 0)
var a13_array = array.new_int(40, 0), var a14_array = array.new_int(40, 0), var a15_array = array.new_int(40, 0), var a16_array = array.new_int(40, 0)
var a17_array = array.new_int(40, 0), var a18_array = array.new_int(40, 0), var a19_array = array.new_int(40, 0), var a20_array = array.new_int(40, 0)
var a21_array = array.new_int(40, 0), var a22_array = array.new_int(40, 0), var a23_array = array.new_int(40, 0), var a24_array = array.new_int(40, 0)
var a25_array = array.new_int(40, 0), var a26_array = array.new_int(40, 0), var a27_array = array.new_int(40, 0), var a28_array = array.new_int(40, 0)
var a29_array = array.new_int(40, 0), var a30_array = array.new_int(40, 0), var a31_array = array.new_int(40, 0), var a32_array = array.new_int(40, 0)
var a33_array = array.new_int(40, 0), var a34_array = array.new_int(40, 0), var a35_array = array.new_int(40, 0), var a36_array = array.new_int(40, 0)
var a37_array = array.new_int(40, 0), var a38_array = array.new_int(40, 0), var a39_array = array.new_int(40, 0), var a40_array = array.new_int(40, 0)
f_get_price(simple string ticker) =>
request.security(ticker, "", close)
// Prices for each USED asset
f_get_asset_price(asset_number, ticker) =>
if (used_assets >= asset_number)
f_get_price(ticker)
else
na
// overwrite empty variables with the prices if "used_assets" is greater or equal to the asset number
if barstate.isconfirmed // use barstate.isconfirmed to avoid "na prices" and calculation errors that result in empty cells in the table
price_a1 := f_get_asset_price(1, asset1), price_a2 := f_get_asset_price(2, asset2), price_a3 := f_get_asset_price(3, asset3), price_a4 := f_get_asset_price(4, asset4)
price_a5 := f_get_asset_price(5, asset5), price_a6 := f_get_asset_price(6, asset6), price_a7 := f_get_asset_price(7, asset7), price_a8 := f_get_asset_price(8, asset8)
price_a9 := f_get_asset_price(9, asset9), price_a10 := f_get_asset_price(10, asset10), price_a11 := f_get_asset_price(11, asset11), price_a12 := f_get_asset_price(12, asset12)
price_a13 := f_get_asset_price(13, asset13), price_a14 := f_get_asset_price(14, asset14), price_a15 := f_get_asset_price(15, asset15), price_a16 := f_get_asset_price(16, asset16)
price_a17 := f_get_asset_price(17, asset17), price_a18 := f_get_asset_price(18, asset18), price_a19 := f_get_asset_price(19, asset19), price_a20 := f_get_asset_price(20, asset20)
price_a21 := f_get_asset_price(21, asset21), price_a22 := f_get_asset_price(22, asset22), price_a23 := f_get_asset_price(23, asset23), price_a24 := f_get_asset_price(24, asset24)
price_a25 := f_get_asset_price(25, asset25), price_a26 := f_get_asset_price(26, asset26), price_a27 := f_get_asset_price(27, asset27), price_a28 := f_get_asset_price(28, asset28)
price_a29 := f_get_asset_price(29, asset29), price_a30 := f_get_asset_price(30, asset30), price_a31 := f_get_asset_price(31, asset31), price_a32 := f_get_asset_price(32, asset32)
price_a33 := f_get_asset_price(33, asset33), price_a34 := f_get_asset_price(34, asset34), price_a35 := f_get_asset_price(35, asset35), price_a36 := f_get_asset_price(36, asset36)
price_a37 := f_get_asset_price(37, asset37), price_a38 := f_get_asset_price(38, asset38), price_a39 := f_get_asset_price(39, asset39), price_a40 := f_get_asset_price(40, asset40)
Universal Indicator Calculation (f_calc_score):
This function allows switching between different trend indicators (RSI, CCI, Fisher) for flexibility.
It uses a switch-case structure to calculate the indicator score, where a positive trend is denoted by 1 and a negative trend by 0. Each indicator has its own logic to determine whether the asset is trending up or down.
// use switch to allow "universality" in indicator selection
f_calc_score(source, trend_indicator, int_1, int_2) =>
int score = na
if (not f_constant_src(source)) and source > 0.0 // Skip if you are using the same assets for ratio (for example BTC/BTC)
x = switch trend_indicator
"RSI (Raw)" => RSI_raw(source, int_1)
"RSI (SMA)" => RSI_sma(source, int_1, int_2)
"RSI (EMA)" => RSI_ema(source, int_1, int_2)
"CCI" => CCI(source, int_1)
"Fisher" => Fisher(source, int_1)
y = switch trend_indicator
"RSI (Raw)" => x > 50 ? 1 : 0
"RSI (SMA)" => x > 50 ? 1 : 0
"RSI (EMA)" => x > 50 ? 1 : 0
"CCI" => x > 0 ? 1 : 0
"Fisher" => x > x ? 1 : 0
score := y
else
score := 0
score
Array Setting Function (f_array_set):
This function populates an array with scores calculated for each asset based on a base price (p_base) divided by the prices of the individual assets.
It processes multiple assets (up to 40), calling the f_calc_score function for each.
// function to set values into the arrays
f_array_set(a_array, p_base) =>
array.set(a_array, 0, f_calc_score(p_base / price_a1, trend_indicator, int_1, int_2))
array.set(a_array, 1, f_calc_score(p_base / price_a2, trend_indicator, int_1, int_2))
array.set(a_array, 2, f_calc_score(p_base / price_a3, trend_indicator, int_1, int_2))
array.set(a_array, 3, f_calc_score(p_base / price_a4, trend_indicator, int_1, int_2))
array.set(a_array, 4, f_calc_score(p_base / price_a5, trend_indicator, int_1, int_2))
array.set(a_array, 5, f_calc_score(p_base / price_a6, trend_indicator, int_1, int_2))
array.set(a_array, 6, f_calc_score(p_base / price_a7, trend_indicator, int_1, int_2))
array.set(a_array, 7, f_calc_score(p_base / price_a8, trend_indicator, int_1, int_2))
array.set(a_array, 8, f_calc_score(p_base / price_a9, trend_indicator, int_1, int_2))
array.set(a_array, 9, f_calc_score(p_base / price_a10, trend_indicator, int_1, int_2))
array.set(a_array, 10, f_calc_score(p_base / price_a11, trend_indicator, int_1, int_2))
array.set(a_array, 11, f_calc_score(p_base / price_a12, trend_indicator, int_1, int_2))
array.set(a_array, 12, f_calc_score(p_base / price_a13, trend_indicator, int_1, int_2))
array.set(a_array, 13, f_calc_score(p_base / price_a14, trend_indicator, int_1, int_2))
array.set(a_array, 14, f_calc_score(p_base / price_a15, trend_indicator, int_1, int_2))
array.set(a_array, 15, f_calc_score(p_base / price_a16, trend_indicator, int_1, int_2))
array.set(a_array, 16, f_calc_score(p_base / price_a17, trend_indicator, int_1, int_2))
array.set(a_array, 17, f_calc_score(p_base / price_a18, trend_indicator, int_1, int_2))
array.set(a_array, 18, f_calc_score(p_base / price_a19, trend_indicator, int_1, int_2))
array.set(a_array, 19, f_calc_score(p_base / price_a20, trend_indicator, int_1, int_2))
array.set(a_array, 20, f_calc_score(p_base / price_a21, trend_indicator, int_1, int_2))
array.set(a_array, 21, f_calc_score(p_base / price_a22, trend_indicator, int_1, int_2))
array.set(a_array, 22, f_calc_score(p_base / price_a23, trend_indicator, int_1, int_2))
array.set(a_array, 23, f_calc_score(p_base / price_a24, trend_indicator, int_1, int_2))
array.set(a_array, 24, f_calc_score(p_base / price_a25, trend_indicator, int_1, int_2))
array.set(a_array, 25, f_calc_score(p_base / price_a26, trend_indicator, int_1, int_2))
array.set(a_array, 26, f_calc_score(p_base / price_a27, trend_indicator, int_1, int_2))
array.set(a_array, 27, f_calc_score(p_base / price_a28, trend_indicator, int_1, int_2))
array.set(a_array, 28, f_calc_score(p_base / price_a29, trend_indicator, int_1, int_2))
array.set(a_array, 29, f_calc_score(p_base / price_a30, trend_indicator, int_1, int_2))
array.set(a_array, 30, f_calc_score(p_base / price_a31, trend_indicator, int_1, int_2))
array.set(a_array, 31, f_calc_score(p_base / price_a32, trend_indicator, int_1, int_2))
array.set(a_array, 32, f_calc_score(p_base / price_a33, trend_indicator, int_1, int_2))
array.set(a_array, 33, f_calc_score(p_base / price_a34, trend_indicator, int_1, int_2))
array.set(a_array, 34, f_calc_score(p_base / price_a35, trend_indicator, int_1, int_2))
array.set(a_array, 35, f_calc_score(p_base / price_a36, trend_indicator, int_1, int_2))
array.set(a_array, 36, f_calc_score(p_base / price_a37, trend_indicator, int_1, int_2))
array.set(a_array, 37, f_calc_score(p_base / price_a38, trend_indicator, int_1, int_2))
array.set(a_array, 38, f_calc_score(p_base / price_a39, trend_indicator, int_1, int_2))
array.set(a_array, 39, f_calc_score(p_base / price_a40, trend_indicator, int_1, int_2))
a_array
Conditional Array Setting (f_arrayset):
This function checks if the number of used assets is greater than or equal to a specified number before populating the arrays.
// only set values into arrays for USED assets
f_arrayset(asset_number, a_array, p_base) =>
if (used_assets >= asset_number)
f_array_set(a_array, p_base)
else
na
Main Logic
The main logic initializes arrays to store scores for each asset. Each array corresponds to one asset's performance score.
Setting Trend Values: The code calls f_arrayset for each asset, populating the respective arrays with calculated scores based on the asset prices.
Combining Arrays: A combined_array is created to hold all the scores from individual asset arrays. This array facilitates further analysis, allowing for an overview of the performance scores of all assets at once.
// create a combined array (work-around since pinescript doesn't support having array of arrays)
var combined_array = array.new_int(40 * 40, 0)
if barstate.islast
for i = 0 to 39
array.set(combined_array, i, array.get(a1_array, i))
array.set(combined_array, i + (40 * 1), array.get(a2_array, i))
array.set(combined_array, i + (40 * 2), array.get(a3_array, i))
array.set(combined_array, i + (40 * 3), array.get(a4_array, i))
array.set(combined_array, i + (40 * 4), array.get(a5_array, i))
array.set(combined_array, i + (40 * 5), array.get(a6_array, i))
array.set(combined_array, i + (40 * 6), array.get(a7_array, i))
array.set(combined_array, i + (40 * 7), array.get(a8_array, i))
array.set(combined_array, i + (40 * 8), array.get(a9_array, i))
array.set(combined_array, i + (40 * 9), array.get(a10_array, i))
array.set(combined_array, i + (40 * 10), array.get(a11_array, i))
array.set(combined_array, i + (40 * 11), array.get(a12_array, i))
array.set(combined_array, i + (40 * 12), array.get(a13_array, i))
array.set(combined_array, i + (40 * 13), array.get(a14_array, i))
array.set(combined_array, i + (40 * 14), array.get(a15_array, i))
array.set(combined_array, i + (40 * 15), array.get(a16_array, i))
array.set(combined_array, i + (40 * 16), array.get(a17_array, i))
array.set(combined_array, i + (40 * 17), array.get(a18_array, i))
array.set(combined_array, i + (40 * 18), array.get(a19_array, i))
array.set(combined_array, i + (40 * 19), array.get(a20_array, i))
array.set(combined_array, i + (40 * 20), array.get(a21_array, i))
array.set(combined_array, i + (40 * 21), array.get(a22_array, i))
array.set(combined_array, i + (40 * 22), array.get(a23_array, i))
array.set(combined_array, i + (40 * 23), array.get(a24_array, i))
array.set(combined_array, i + (40 * 24), array.get(a25_array, i))
array.set(combined_array, i + (40 * 25), array.get(a26_array, i))
array.set(combined_array, i + (40 * 26), array.get(a27_array, i))
array.set(combined_array, i + (40 * 27), array.get(a28_array, i))
array.set(combined_array, i + (40 * 28), array.get(a29_array, i))
array.set(combined_array, i + (40 * 29), array.get(a30_array, i))
array.set(combined_array, i + (40 * 30), array.get(a31_array, i))
array.set(combined_array, i + (40 * 31), array.get(a32_array, i))
array.set(combined_array, i + (40 * 32), array.get(a33_array, i))
array.set(combined_array, i + (40 * 33), array.get(a34_array, i))
array.set(combined_array, i + (40 * 34), array.get(a35_array, i))
array.set(combined_array, i + (40 * 35), array.get(a36_array, i))
array.set(combined_array, i + (40 * 36), array.get(a37_array, i))
array.set(combined_array, i + (40 * 37), array.get(a38_array, i))
array.set(combined_array, i + (40 * 38), array.get(a39_array, i))
array.set(combined_array, i + (40 * 39), array.get(a40_array, i))
Calculating Sums: A separate array_sums is created to store the total score for each asset by summing the values of their respective score arrays. This allows for easy comparison of overall performance.
Ranking Assets: The final part of the code ranks the assets based on their total scores stored in array_sums. It assigns a rank to each asset, where the asset with the highest score receives the highest rank.
// create array for asset RANK based on array.sum
var ranks = array.new_int(used_assets, 0)
// for loop that calculates the rank of each asset
if barstate.islast
for i = 0 to (used_assets - 1)
int rank = 1
for x = 0 to (used_assets - 1)
if i != x
if array.get(array_sums, i) < array.get(array_sums, x)
rank := rank + 1
array.set(ranks, i, rank)
Dynamic Table Creation
Initialization: The table is initialized with a base structure that includes headers for asset names, scores, and ranks. The headers are set to remain constant, ensuring clarity for users as they interpret the displayed data.
Data Population: As scores are calculated for each asset, the corresponding values are dynamically inserted into the table. This is achieved through a loop that iterates over the scores and ranks stored in the combined_array and array_sums, respectively.
Automatic Extending Mechanism
Variable Asset Count: The code checks the number of assets defined by the user. Instead of hardcoding the number of rows in the table, it uses a variable to determine the extent of the data that needs to be displayed. This allows the table to expand or contract based on the number of assets being analyzed.
Dynamic Row Generation: Within the loop that populates the table, the code appends new rows for each asset based on the current asset count. The structure of each row includes the asset name, its score, and its rank, ensuring that the table remains consistent regardless of how many assets are involved.
// Automatically extending table based on the number of used assets
var table table = table.new(position.bottom_center, 50, 50, color.new(color.black, 100), color.white, 3, color.white, 1)
if barstate.islast
if not hide_head
table.cell(table, 0, 0, "Universal Ratio Trend Matrix", text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.merge_cells(table, 0, 0, used_assets + 3, 0)
if not hide_inps
table.cell(table, 0, 1,
text = "Inputs: You are using " + str.tostring(trend_indicator) + ", which takes: " + str.tostring(f_get_input(trend_indicator)),
text_color = color.white, text_size = fontSize), table.merge_cells(table, 0, 1, used_assets + 3, 1)
table.cell(table, 0, 2, "Assets", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, 2, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.cell(table, 0, x + 3, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = f_asset_col(array.get(ranks, x)), text_size = fontSize)
for r = 0 to (used_assets - 1)
for c = 0 to (used_assets - 1)
table.cell(table, c + 1, r + 3, text = str.tostring(array.get(combined_array, c + (r * 40))),
text_color = hl_type == "Text" ? f_get_col(array.get(combined_array, c + (r * 40))) : color.white, text_size = fontSize,
bgcolor = hl_type == "Background" ? f_get_col(array.get(combined_array, c + (r * 40))) : na)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, x + 3, "", bgcolor = #010c3b)
table.cell(table, used_assets + 1, 2, "", bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 1, x + 3, "==>", text_color = color.white)
table.cell(table, used_assets + 2, 2, "SUM", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
table.cell(table, used_assets + 3, 2, "RANK", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 2, x + 3,
text = str.tostring(array.get(array_sums, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_sum(array.get(array_sums, x), array.get(ranks, x)))
table.cell(table, used_assets + 3, x + 3,
text = str.tostring(array.get(ranks, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_rank(array.get(ranks, x)))
Crypto Heatmap [Pinescriptlabs]🌟 Crypto Heatmap is a visual tool that enables quick and efficient visualization of price behavior and percentage changes of various cryptocurrencies.
📊 It generates a heatmap to show variations in daily closing prices, helping traders quickly identify assets with the most movement.
📈 Percentage Change Calculation: It calculates the difference between the current price and the previous day's price, updating with each ticker.
✨ It uses a dynamic approach that adjusts colors based on market movements, making it easier to detect trading opportunities.
👀 You will notice for a moment that some cells disappear; this is because the table updates with each ticker to show real-time changes.
Español:
🌟 Crypto Heatmap es una herramienta visual que permite una rápida y eficiente visualización del comportamiento de precios y cambios porcentuales de varias criptomonedas.
📊 Genera un mapa de calor para mostrar las variaciones en los precios de cierre diario, ayudando a los traders a identificar rápidamente los activos con mayor movimiento.
📈 Cálculo del cambio porcentual: Calcula la diferencia entre el precio actual y el del día anterior, actualizándose en cada ticker.
✨ Utiliza un enfoque dinámico que ajusta los colores según los movimientos del mercado, facilitando la detección de oportunidades de trading.
Aquí tienes la traducción al español:
👀 **Observarás por un momento que algunas celdas desaparecen; esto es porque la tabla se actualiza en cada ticker para mostrar el cambio en tiempo real.**
Risk Radar ProThe "Risk Radar Pro" indicator is a sophisticated tool designed to help investors and traders assess the risk and performance of their investments over a specified period. This presentation will explain each component of the indicator, how to interpret the results, and the advantages compared to traditional metrics.
The "Risk Radar Pro" indicator includes several key metrics:
● Beta
● Maximum Drawdown
● Compound Annual Growth Rate (CAGR)
● Annualized Volatility
● Dynamic Sharpe Ratio
● Dynamic Sortino Ratio
Each of these metrics is dynamically calculated using data from the entire selected period, providing a more adaptive and accurate measure of performance and risk.
1. Start Date
● Description: The date from which the calculations begin.
● Interpretation: This allows the user to set a specific period for analysis, ensuring that all metrics reflect the performance from this point onward.
2. Beta
● Description: Beta measures the volatility or systematic risk of the instrument relative to a reference index (e.g., SPY).
● Interpretation: A beta of 1 indicates that the instrument moves with the market. A beta greater than 1 indicates more volatility than the market, while a beta less than 1 indicates less volatility.
● Advantages: Unlike classic beta, which typically uses fixed historical intervals, this dynamic beta adjusts to market changes over the entire selected period, providing a more responsive measure.
3. Maximum Drawdown
● Description: The maximum observed loss from a peak to a trough before a new peak is achieved.
● Interpretation: This shows the largest single drop in value during the specified period. It is a critical measure of downside risk.
● Advantages: By tracking the maximum drawdown dynamically, the indicator can provide timely alerts when significant losses occur, allowing for better risk management.
4. Annualized Performance
● Description: The mean annual growth rate of the investment over the specified period.
● Interpretation: The Annualized Performance represents the smoothed annual rate at which the investment would have grown if it had grown at a steady rate.
● Advantages: This dynamic calculation reflects the actual long-term growth trend of the investment rather than relying on a fixed time frame.
5. Annualized Volatility
● Description: Measures the degree of variation in the instrument's returns over time, expressed as a percentage.
● Interpretation: Higher volatility indicates greater risk, as the investment's returns fluctuate more.
● Advantages: Annualized volatility calculated over the entire selected period provides a more accurate measure of risk, as it includes all market conditions encountered during that time.
6. Dynamic Sharpe Ratio
● Description: Measures the risk-adjusted return of an investment relative to its volatility.
● Choice of Risk-Free Rate Ticker: Users can select a ticker symbol to represent the risk-free rate in Sharpe ratio calculations. The default option is US03M, representing the 3-month US Treasury bill.
● Interpretation: A higher Sharpe ratio indicates better risk-adjusted returns. This ratio accounts for the risk-free rate to provide a comparison with risk-free investments.
● Advantages: By using returns and volatility over the entire period, the dynamic Sharpe ratio adjusts to changes in market conditions, offering a more accurate measure than traditional static calculations.
7. Dynamic Sortino Ratio
● Description: Similar to the Sharpe ratio, but focuses only on downside risk.
Interpretation: A higher Sortino ratio indicates better risk-adjusted returns, focusing solely on negative returns, which are more relevant to risk-averse investors.
● Choice of Risk-Free Rate Ticker: Similarly, users can choose a ticker symbol for the risk-free rate in Sortino ratio calculations. By default, this is also set to US03M.
● Advantages: This ratio's dynamic calculation considering the downside deviation over the entire period provides a more accurate measure of risk-adjusted returns in volatile markets.
Comparison with Basic Metrics
● Static vs. Dynamic Calculations: Traditional metrics often use fixed historical intervals, which may not reflect current market conditions. The dynamic calculations in "Risk Radar Pro" adjust to market changes, providing more relevant and timely information.
● Comprehensive Risk Assessment: By including metrics like maximum drawdown, Sharpe ratio, and Sortino ratio, the indicator provides a holistic view of both upside potential and downside risk.
● User Customization: Users can customize the start date, reference index, risk-free rate, and table position, tailoring the indicator to their specific needs and preferences.
Conclusion
The "Risk Radar Pro" indicator is a powerful tool for investors and traders looking to assess and manage risk more effectively. By providing dynamic, comprehensive metrics, it offers a significant advantage over traditional static calculations, ensuring that users have the most accurate and relevant information to make informed decisions.
The "Risk Radar Pro" indicator provides analytical tools and metrics for informational purposes only. It is not intended as financial advice. Users should conduct their own research and consider their individual risk tolerance and investment objectives before making any investment decisions based on the indicator's outputs. Trading and investing involve risks, including the risk of loss. Past performance is not indicative of future results.
Trailing Take Profit - Close Based📝 Description
This script demonstrates a new approach to the trailing take profit.
Trailing Take Profit is a price-following technique. When used, instead of setting a limit order for the take profit target exiting from your position at the specified price, a stop order is conditionally set when the take profit target is reached. Then, the stop price (a.k.a trailing price), is placed below the take profit target at a distance defined by the user percentagewise. On regular time intervals, the stop price gets updated by following the "Trail Barrier" price (high by default) upwards. When the current price hits the stop price you exit the trade. Check the chart for more details.
This script demonstrates how to implement the close-based Trailing Take Profit logic for long positions, but it can also be applied for short positions if the logic is "reversed".
📢 NOTE
To generate some entries and showcase the "Trailing Take Profit" technique, this script uses the crossing of two moving averages. Please keep in mind that you should not relate the Backtesting results you see in the "Strategy Tester" tab with the success of the technique itself.
This is not a complete strategy per se, and the backtest results are affected by many parameters that are outside of the scope of this publication. If you choose to use this new approach of the "Trailing Take Profit" in your logic you have to make sure that you are backtesting the whole strategy.
⚔️ Comparison
In contrast to my older "Trailing Take Profit" publication where the trailing take profit implementation was tick-based, this new approach is close-based, meaning that the update of the stop price occurs at the bar close instead of every tick.
While comparing the real-time results of the two implementations is like comparing apples to oranges, because they have different dynamic behavior, the new approach offers better consistency between the backtesting results and the real-time results.
By updating the stop price on every bar close, you do not rely on the backtester assumptions anymore (check the Reasoning section below for more info).
The new approach resembles the conditional "Trailing Exit" technique, where the condition is true when the current price crosses over the take profit target. Then, the stop order is placed at the trailing price and it gets updated on every bar close to "follow" the barrier price (high). On the other hand, the older tick-based approach had more "tight" dynamics since the trailing price gets updated on every tick leaving less room for price fluctuations by making it more probable to reach the trailing price.
🤔 Reasoning
This new close-based approach addresses several practical issues the older tick-based approach had. Those issues arise mainly from the technicalities of the TV Backtester. More specifically, due to the assumptions the Broker Emulator makes for the price action of the history bars, the backtesting results in the TV Backtester are exaggerated, and depending on the timeframe, the backtesting results look way better than they are in reality.
The effect above, and the inability to reason about the performance of a strategy separated people into two groups. Those who never use this feature, because they couldn't know for sure the actual effect it might have in their strategy, (even if it turned out to be more profitable) and those who abused this type of "repainting" behavior to show off, and hijack some boosts from the community by boasting about the "fake" results of their strategies.
Even if there are ways to evaluate the effectiveness of the tick-based approach that is applied in an existing strategy (this is out of the topic of this publication), it requires extra effort to do the analysis. Using this closed-based approach we can have more predictable results, without surprises.
⚠️ Caveats
Since this approach updates the trailing price on bar close, you must wait for at least one bar to close after the price crosses over the take profit target.
Correlated Movement Indicator V2Hello!
This script was briefly known as as Bing Chilling. I converted this to Pine Script V5 to ensure compliance with publishing requirements.
This script tracks RSI and inserts an indicator when correlated movement is detected. Proximity of current tick to indicator origin tick determines freshness of the indicator.
DO NOT sit on the indicator for a long time. This is not a magic solution. It is very accurate but, not always precise. Ensure that you use other factors to determine the relevance of the indicator on current tick. This script can technically be used on any security/commodity/currency. Your Mileage May Vary! Proceed with caution as always.
General Workflow:
Look at proximity to where the flag is placed, general volatility, and other indicators and you can potentially determine the direction/strength. Not always the duration. The indicator could be for 30s, 1hr, 1 day, or whatever the market feels like. It depends on precision/quantity of pricing data. ex. 30min tick rate pricing vs. 1 day tick rate pricing will change the scope.
So if the time scope shows all sell from 1 week -> 3 months except for a couple recent buy indicators on the day, then it may be a bad call long term but, might be good for a short term play. Very volatile. Careful.
If it was all green with long term indicators such as 1 month -> 1 year, then it looks more like a buy and forget type strategy.
If it's all green with a recent red then you can try and figure out what the relative the bottom is so you can buy for long term at a slightly more favorable price.
Flip all that for shorting. I highly recommend AGAINST shorting since the stakes are very different and usually involves taking out what is essentially a loan to bet against the market.
This script pairs nicely with the top pick indicator when you search "Heiken Ashi". I use that to determine peaks and pits to better guess a good time to open a position.
This should be used alongside other indicators. Good for short term day trading and long term hold and forget. (Don't actually forget. Set some alerts periodically.)
Please use caution. Please do not take what I've said here as fact and diamond pepe hands bet all on green to the moon. This, like all the other strategies and indicators on this site, are used as tools to inform you about potential and to categorize/depict data in a more human recognizable way. If you have access to a paper account try there first.
Happy trading!
- Zetsu
Short Interest Tracker [SS]This is a simple indicator that is designed to provide you with a synopsis of short interest on the daily, weekly and monthly timeframes.
How it works:
It pulls FINRA ticker data on short volume for whichever ticker you are on. It works with all tickers provided they are listed on FINRA (which is all tickers).
It will not work with futures, for futures, you would want to use a COT-based indicator, but for indices and equities, this indicator will provide you with the short volume information.
What it shows:
It breaks short volume down into current short volume, the 14-period SMA of short volume over the day, week and month, it also provides you with a short volume to SMA ratio. This is Short Volume divided by the SMA. Anything below 1 is good, it means short interest is low. Anything above 1 is not good, it means that short volume is above the SMA.
It also will show you the weekly, daily and monthly short volume change.
And last but not least, it will tell you whether short interest is falling, rising or steady. How it does this is by tracking whether the SMA is increasing, decreasing or stagnant.
Customization:
You can customize the SMA length and the assessment of whether short volume is increasing or decreasing. The default SMA length is 14 and the default assessment of rising/falling short volume is 4. This means, short volume has to rise or fall over a 4-period timeframe for it to register. So on the week, if it displays short volume increasing, it means that, over the past 4 weeks, the sma has steadily risen. Inverse if it decreases. If you want it to be more sensitive, you can reduce it to 2 or 3. If you want it to be more strict, you can increase it to 5 or 6.
NOTE:
If the volume information for a ticker is not available, it will return a runtime error indicating as such.
And that's the indicator!
I wanted something similar to COT data for equities and indices, so this was my attempt to bridge that gap.
Hope you enjoy and find it useful! Leave your suggestions below.
Take care everyone!
Multi-Asset Performance [Spaghetti] - By LeviathanThis indicator visualizes the cumulative percentage changes or returns of 30 symbols over a given period and offers a unique set of tools and data analytics for deeper insight into the performance of different assets.
Multi Asset Performance indicator (also called “Spaghetti”) makes it easy to monitor the changes in Price, Open Interest, and On Balance Volume across multiple assets simultaneously, distinguish assets that are overperforming or underperforming, observe the relative strength of different assets or currencies, use it as a tool for identifying mean reversion opportunities and even for constructing pairs trading strategies, detect "risk-on" or "risk-off" periods, evaluate statistical relationships between assets through metrics like correlation and beta, construct hedging strategies, trade rotations and much more.
Start by selecting a time period (e.g., 1 DAY) to set the interval for when data is reset. This will provide insight into how price, open interest, and on-balance volume change over your chosen period. In the settings, asset selection is fully customizable, allowing you to create three groups of up to 30 tickers each. These tickers can be displayed in a variety of styles and colors. Additional script settings offer a range of options, including smoothing values with a Simple Moving Average (SMA), highlighting the top or bottom performers, plotting the group mean, applying heatmap/gradient coloring, generating a table with calculations like beta, correlation, and RSI, creating a profile to show asset distribution around the mean, and much more.
One of the most important script tools is the screener table, which can display:
🔸 Percentage Change (Represents the return or the percentage increase or decrease in Price/OI/OBV over the current selected period)
🔸 Beta (Represents the sensitivity or responsiveness of asset's returns to the returns of a benchmark/mean. A beta of 1 means the asset moves in tandem with the market. A beta greater than 1 indicates the asset is more volatile than the market, while a beta less than 1 indicates the asset is less volatile. For example, a beta of 1.5 means the asset typically moves 150% as much as the benchmark. If the benchmark goes up 1%, the asset is expected to go up 1.5%, and vice versa.)
🔸 Correlation (Describes the strength and direction of a linear relationship between the asset and the mean. Correlation coefficients range from -1 to +1. A correlation of +1 means that two variables are perfectly positively correlated; as one goes up, the other will go up in exact proportion. A correlation of -1 means they are perfectly negatively correlated; as one goes up, the other will go down in exact proportion. A correlation of 0 means that there is no linear relationship between the variables. For example, a correlation of 0.5 between Asset A and Asset B would suggest that when Asset A moves, Asset B tends to move in the same direction, but not perfectly in tandem.)
🔸 RSI (Measures the speed and change of price movements and is used to identify overbought or oversold conditions of each asset. The RSI ranges from 0 to 100 and is typically used with a time period of 14. Generally, an RSI above 70 indicates that an asset may be overbought, while RSI below 30 signals that an asset may be oversold.)
⚙️ Settings Overview:
◽️ Period
Periodic inputs (e.g. daily, monthly, etc.) determine when the values are reset to zero and begin accumulating again until the period is over. This visualizes the net change in the data over each period. The input "Visible Range" is auto-adjustable as it starts the accumulation at the leftmost bar on your chart, displaying the net change in your chart's visible range. There's also the "Timestamp" option, which allows you to select a specific point in time from where the values are accumulated. The timestamp anchor can be dragged to a desired bar via Tradingview's interactive option. Timestamp is particularly useful when looking for outperformers/underperformers after a market-wide move. The input positioned next to the period selection determines the timeframe on which the data is based. It's best to leave it at default (Chart Timeframe) unless you want to check the higher timeframe structure of the data.
◽️ Data
The first input in this section determines the data that will be displayed. You can choose between Price, OI, and OBV. The second input lets you select which one out of the three asset groups should be displayed. The symbols in the asset group can be modified in the bottom section of the indicator settings.
◽️ Appearance
You can choose to plot the data in the form of lines, circles, areas, and columns. The colors can be selected by choosing one of the six pre-prepared color palettes.
◽️ Labeling
This input allows you to show/hide the labels and select their appearance and size. You can choose between Label (colored pointed label), Label and Line (colored pointed label with a line that connects it to the plot), or Text Label (colored text).
◽️ Smoothing
If selected, this option will smooth the values using a Simple Moving Average (SMA) with a custom length. This is used to reduce noise and improve the visibility of plotted data.
◽️ Highlight
If selected, this option will highlight the top and bottom N (custom number) plots, while shading the others. This makes the symbols with extreme values stand out from the rest.
◽️ Group Mean
This input allows you to select the data that will be considered as the group mean. You can choose between Group Average (the average value of all assets in the group) or First Ticker (the value of the ticker that is positioned first on the group's list). The mean is then used in calculations such as correlation (as the second variable) and beta (as a benchmark). You can also choose to plot the mean by clicking on the checkbox.
◽️ Profile
If selected, the script will generate a vertical volume profile-like display with 10 zones/nodes, visualizing the distribution of assets below and above the mean. This makes it easy to see how many or what percentage of assets are outperforming or underperforming the mean.
◽️ Gradient
If selected, this option will color the plots with a gradient based on the proximity of the value to the upper extreme, zero, and lower extreme.
◽️ Table
This section includes several settings for the table's appearance and the data displayed in it. The "Reference Length" input determines the number of bars back that are used for calculating correlation and beta, while "RSI Length" determines the length used for calculating the Relative Strength Index. You can choose the data that should be displayed in the table by using the checkboxes.
◽️ Asset Groups
This section allows you to modify the symbols that have been selected to be a part of the 3 asset groups. If you want to change a symbol, you can simply click on the field and type the ticker of another one. You can also show/hide a specific asset by using the checkbox next to the field.
Tillson T3 Moving Average - ScreenerScreener version of Tillson T3 Moving Average:
The T3 Moving Average generally produces entry signals similar to other moving averages and, thus, is mainly traded in the same manner. Here are several assumptions:
Suppose the price action is above the T3 Moving Average, and the indicator is upward. In that case, we have a bullish trend and should only enter long trades (advisable for novice/intermediate traders). If the price is below the T3 Moving Average and edging lower, we have a bearish trend and should limit entries to short.
About Screener Panel:
Users can explore 20 different and user-defined tickers, which can be changed from the SETTINGS (shares, crypto, commodities...) on this screener version.
The screener panel shows up right after the bars on the right side of the chart.
Tickers seen in green are the ones that are in an uptrend, according to T3.
The ones that appear in red are those in the SELL signal, in a downtrend.
The numbers in front of each Ticker indicate how many bars passed after the last BUY or SELL signal of T3.
For example, according to the indicator, when BTCUSDT appears (3) in GREEN, Bitcoin switched to a BUY signal 3 bars ago.
-In this screener version of Tillson T3 Moving Average, users can define the number of demanded tickers (symbols) from 1 to 20 by checking the relevant boxes on the settings tab.
-All selected tickers can be screened in different timeframes.
-Also, different timeframes of the same Ticker can be screened.
IMPORTANT NOTICE:
Screener shows the results in 2 different logic:
-Screener shows the information about the color changes of the T3 Moving Average with default settings.
-Users can check the "Change Screener to show T3 & Price Flips" button to activate the screener giving information about price flips.
If this option is preferred, users are advised to enlarge the length to have better signals.
MavilimW ScreenerScreener version of MavilimW Moving Average :
Short-Term Examples (by decreasing 3 and 5 default values to have trading signals from color changes)
BUY when MavilimW turns blue from red.
SELL when MavW turns red from blue.
Long-Term Examples (with Default values 3 and 5)
BUY when the price crosses over the MavilimW line
SELL when the price crosses below the MavW line
MavilimW can also define significant SUPPORT and RESISTANCE levels in every period with its default values 3 and 5.
Screener Panel:
You can explore 20 different and user-defined tickers, which can be changed from the SETTINGS (shares, crypto, commodities...) on this screener version.
The screener panel shows up right after the bars on the right side of the chart.
Tickers seen in green are the ones that are in an uptrend, according to MavilimW.
The ones that appear in red are those in the SELL signal, in a downtrend.
The numbers in front of each Ticker indicate how many bars passed after the last BUY or SELL signal of MavW.
For example, according to the indicator, when BTCUSDT appears (3) in GREEN, Bitcoin switched to a BUY signal 3 bars ago.
-In this screener version of MavilimW, users can define the number of demanded tickers (symbols) from 1 to 20 by checking the relevant boxes on the settings tab.
-All selected tickers can be screened in different timeframes.
-Also, different timeframes of the same Ticker can be screened.
IMPORTANT NOTICE:
-Screener shows the information about the color changes of MavilimW Moving Average with default settings (as explained in the Short-Term Example section).
-Users can check the "Change Screener to show MavilimW & Price Flips" button to activate the screener as explained in the Short-Term Example section. Then the screener will give information about price flips.
Sort array alphabetically - educational🔶 OVERVIEW
• This educational script will sort an array of tickers alphabetically and place these values in an table , together with the according current price value next to each ticker .
🔶 SORT ALPHABETICALLY
🔹 I. We make a User Defined Type (UDT) obj , with:
· ticker - the string name of the ticker
· price - the current price (close)
• From this UDT we make an object obj.new() for each ticker
🔹 II. 2 array's are made:
• array of objects aObj , containing obj type obj.new() for every ticker
• array of strings sort , the ticker part of each object obj.new()
🔹 III. Now we make an object of each ticker with the createObject(sym ) function
object_1 = createObject("TICKER")
• the object object_1 consists off:
· ticker -> "TICKER"
· price -> current Daily close through request.security("TICKER") (non-repainting)
• object_1 will be added to the aObj array
• "TICKER" ( string ticker part of object ) will be added to the sort array
🔹 IV. The latter array is sorted alphabetically by using array.sort_indices()
EXAMPLE
originalArray = array.from("B", "A", "C")
indicesArray = // sorted indices
array.get(originalArray, 1) -> "A"
array.get(originalArray, 0) -> "B"
array.get(originalArray, 2) -> "C"
IMPORTANT
Alphabetically sorting is case sensitive , just like Java compareTo(String anotherString) !
• The comparison is based on the Unicode value of each character in the string, the lowest "Dec" values are sorted first in line.
• Comparing the "Dec" values at unicodelookup explains why default CAPITAL lettres will be sorted first,
• Default you would get this (A= 65, B= 66, a= 97, b= 98)
Aa
Ba
ab
bb
• Adding str.lower(string) in the toLowerCase() function will result to the following:
Aa
ab
Ba
bb
• (A= 65 is transformed to a= 97, ...)
• As a side note, should you write "AMZN" as "ÀMZN" this would be placed at the end, even after transforming to lower case the "Dec" values are higher (À= 192, à= 224).
• You can toggle "To Lower Case" to verify.
🔹 V. Values are placed in a table , using these sorted indices.
• With the usage of UDTs and objects , the current price has the same index in the aObj as their ticker ,
giving the advantage it is fairly easy to place every value correctly next to each other.
• The same can be done by make 2 separate arrays , 1 for the current price , the other for "TICKER" .
🔶 OTHER TECHNIQUES USED
• Alternative technique for adding comment
Instead of
// this is a comment
You can also do this:
_=" this is a comment "
• Alternate colour
· During a loop , alternate colour when i is even or odd , using the modulo operation (%) .
· This is the remainder when dividing.
EXAMPLE
· 3 % 2 = 1 -> 3 / 2 -> 1 * 2, 1 left (remainder)
· 4 % 2 = 0 -> 4 / 2 -> 2 * 2, 0 left (remainder)
· 5 % 2 = 1 -> 5 / 2 -> 2 * 2, 1 left (remainder)
for i = 0 to 10
even = i % 2 == 0
col = even ? thisColor : otherColor
• Adjust colour in script by using colour picker
Cheers!
Rule Of 20 - Fair Value Estimation by Inflation & Earnings (TG)The Rule Of 20 is a heuristic calculation to find the fair value of an asset or market given its earnings and current inflation.
Its calculation is straightforward: the fair multiple of the price or price-to-earnings ratio of a stock should be 20 minus the rate of inflation.
In math terms: fair_price-to-earnings_ratio = (20 - inflation) ; fair_value = current_price * fair_price-to-earnings_ratio / real_price-to-earnings_ratio
For example, if a stock or index was trading on 11 times earnings and inflation was 2%, then the theory would be that the fair price-to-earnings ratio would be 20-2 = 18, which is much higher than the real price-to-earnings ratio of 11, and hence the asset would be undervalued.
Conversely, a market or company that was trading on 18 times price-to-earnings ration when inflation was 8% was seen as overvalued, because of the fair price-to-earnings ratio being 20-8=12, hence much lower than the real price-to-earnings ratio of 18.
We can then project the delta between the fair PE and real PE onto the asset's value to obtain the projected fair value, which may be a target of future value the asset may reach or hover around.
For example, as of 1st November 2022, SPX stood at 3871.97, with a PE ratio of 20.14 and an inflation in the US of 7.70. Using the Rule Of 20, we find that the fair PE ratio is 20-7.7=12.3, which is much lower than the current PE ratio of 20.14 by 39%! This may indicate a future possibility of a further downside risk by 39% from current valuation levels.
The origins of this rule are unknown, although the legendary US fund manager Peter Lynch is said to have been an active proponent when he was directing the Fidelity’s Magellan fund from 1977 to 1990.
For more infos about the Rule Of 20, reading this article is recommended: www.sharesmagazine.co.uk
This indicator implements the Rule Of 20 on any asset where the Financials are availble to TradingView, and also for the entire SP:SPX index as a way to assess the wider US stock market. Technically, the calculation is a bit different for the latter, as we cannot access earnings of SPX through Financials on TradingView, so we access it using the QUANDL:MULTPL/SP500_PE_RATIO_MONTH ticker instead.
By default are displayed:
current asset value in red
fair asset value according to the Rule Of 20 in white for SPX, or different shades of purple/maroon for other assets. Note that for SPX there is only one calculation, whereas for other assets there are multiple different ways to calculate earnings, so different fair values can be computed.
fair price-to-earnings ratio (PE ratio) in light grey.
real price-to-earnings ratio in darker grey.
This indicator can be used on SP:SPX ticker, and on most NASDAQ:* tickers, since they have Financials integrated in TradingView. Stocks tickers from other exchanges may not provide Financials data, so this indicator won't work then. If this happens, try to find the same ticker on NASDAQ instead.
Note that by default, only the US stock market is considered. If you want to consider stocks or assets in other regions of the world, please change the inflation ticker to a ticker that reflect the target region's inflation.
Also adding a table to ease interpretation was considered, but then the Timeframe MTF parameter would not work, and since the big advantage of this indicator is to allow for historical comparisons, the table was dropped.
Enjoy, and keep in mind that all models are wrong, but some are useful.
Trade safely!
TG
Portfolio Tracker For Stocks & CryptoThis is a portfolio tracker that will track individual, overall and daily profit/loss for up to 12 assets. You can set the size of your buys and price of your buys for accurate, up to date profit and loss data right on your chart. It works on all markets and timeframes.
HOW TO USE
Go into the indicator settings and you will see all of the available settings. The first is the ability to turn the tracker info table on or off from the chart, so it saves your portfolio info but let’s you remove it from the chart while trading. Second is the option to move the position of the info table to suit your preference.
Next we get into setting up your portfolio tickers, order size and price. Each ticker lets you set which stock/crypto you bought, then set how much you purchased and then what price you purchased them at.
Go through and set up all of your assets and then turn off any tickers that you don’t need. Once that is all done, your portfolio will be shown on the chart with all the data.
FEATURES
Top Section
The portfolio tracker has 2 sections. The top section shows each ticker in your portfolio individually with the following data:
- Ticker Name
- Weight of that asset compared to your total portfolio in %
- Current value of that position in $
- Profit or loss value from purchase price in %
- Todays change in value from yesterday’s close in %
The $ Value, PnL % and Today % will all change colors from green to red depending if they are in profit or not.
Bottom Section
The bottom section of the tracker will give you info for your portfolio as a whole. It has the following data:
- Total cost of your entire portfolio in $
- Current value of your entire portfolio in $
- Current profit or loss of your entire portfolio in $
- Current profit or loss of your entire portfolio in %
- Todays change of your entire portfolio value compared to yesterday’s close in %
The $ Value, PnL $, PnL % and Today % will all change colors from green to red depending if they are in profit or not.