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.
在脚本中搜索"文华财经tick价格"
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.
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)))
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
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
CVD - Cumulative Volume Delta Candles█ OVERVIEW
This indicator displays cumulative volume delta in candle form. It uses intrabar information to obtain more precise volume delta information than methods using only the chart's timeframe.
█ CONCEPTS
Bar polarity
By bar polarity , we mean the direction of a bar, which is determined by looking at the bar's close vs its open .
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 bars at the lower timeframe of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This script uses a LTF to access intrabars. The lower the LTF, the more intrabars are analyzed, but the less chart bars can display CVD information because there is a limit to the total number of intrabars that can be analyzed.
Volume delta
The volume delta concept divides a bar's volume in "up" and "down" volumes. The delta is calculated by subtracting down volume from up volume. Many calculation techniques exist to isolate up and down volume within a bar. The simplest techniques use the polarity of interbar price changes to assign their volume to up or down slots, e.g., On Balance Volume or the Klinger Oscillator . Others such as Chaikin Money Flow use assumptions based on a bar's OHLC values. The most precise calculation method uses tick data and assigns the volume of each tick to the up or down slot depending on whether the transaction occurs at the bid or ask price. While this technique is ideal, it requires huge amounts of data on historical bars, which usually limits the historical depth of charts and the number of symbols for which tick data is available.
This indicator uses intrabar analysis to achieve a compromise between the simplest and most precise methods of calculating volume delta. In the context where historical tick data is not yet available on TradingView, intrabar analysis is the most precise technique to calculate volume delta on historical bars on our charts. Our Volume Profile indicators use it. Other volume delta indicators in our Community Scripts such as the Realtime 5D Profile use realtime chart updates to achieve more precise volume delta calculations, but that method cannot be used on historical bars, so those indicators only work in real time.
This is the logic we use to assign intrabar volume to up or down slots:
• If the intrabar's open and close values are different, their relative position is used.
• If the intrabar's open and close values are the same, the difference between the intrabar's close and the previous intrabar's close is used.
• As a last resort, when there is no movement during an intrabar and it closes at the same price as the previous intrabar, the last known polarity is used.
Once all intrabars making up a chart bar have been analyzed and the up or down property of each intrabar's volume determined, the up volumes are added and the down volumes subtracted. The resulting value is volume delta for that chart bar.
█ FEATURES
CVD Candles
Cumulative Volume Delta Candles present volume delta information as it evolves during a period of time.
This is how each candle's levels are calculated:
• open : Each candle's' open level is the cumulative volume delta for the current period at the start of the bar.
This value becomes zero on the first candle following a CVD reset.
The candles after the first one always open where the previous candle closed.
The candle's high, low and close levels are then calculated by adding or subtracting a volume value to the open.
• high : The highest volume delta value found in intrabars. If it is not higher than the volume delta for the bar, then that candle will have no upper wick.
• low : The lowest volume delta value found in intrabars. If it is not lower than the volume delta for the bar, then that candle will have no lower wick.
• close : The aggregated volume delta for all intrabars. If volume delta is positive for the chart bar, then the candle's close will be higher than its open, and vice versa.
The candles are plotted in one of two configurable colors, depending on the polarity of volume delta for the bar.
CVD resets
The "cumulative" part of the indicator's name stems from the fact that calculations accumulate during a period of time. This allows you to analyze the progression of volume delta across manageable chunks, which is often more useful than looking at volume delta cumulated from the beginning of a chart's history.
You can configure the reset period using the "CVD Resets" input, which offers the following selections:
• None : Calculations do not reset.
• On a fixed higher timeframe : Calculations reset on the higher timeframe you select in the "Fixed higher timeframe" field.
• At a fixed time that you specify.
• At the beginning of the regular session .
• On a stepped higher timeframe : Calculations reset on a higher timeframe automatically stepped using the chart's timeframe and following these rules:
Chart TF HTF
< 1min 1H
< 3H 1D
<= 12H 1W
< 1W 1M
>= 1W 1Y
The indicator's background shows where resets occur.
Intrabar precision
The precision of calculations increases with the number of intrabars analyzed for each chart bar. It is controlled through the script's "Intrabar precision" input, which offers the following selections:
• Least precise, covering many chart bars
• Less precise, covering some chart bars
• More precise, covering less chart bars
• Most precise, 1min intrabars
As there is a limit to the number of intrabars that can be analyzed by a script, a tradeoff occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
Total volume candles
You can choose to display candles showing the total intrabar volume for the chart bar. This provides you with more context to evaluate a bar's volume delta by showing it relative to the sum of intrabar volume. Note that because of the reasons explained in the "NOTES" section further down, the total volume is the sum of all intrabar volume rather than the volume of the bar at the chart's timeframe.
Total volume candles can be configured with their own up and down colors. You can also control the opacity of their bodies to make them more or less prominent. This publication's chart shows the indicator with total volume candles. They are turned off by default, so you will need to choose to display them in the script's inputs for them to plot.
Divergences
Divergences occur when the polarity of volume delta does not match that of the chart bar. You can identify divergences by coloring the CVD candles differently for them, or by coloring the indicator's background.
Information box
An information box in the lower-left corner of the indicator displays the HTF used for resets, the LTF used for intrabars, and the average quantity of intrabars per chart bar. You can hide the box using the script's inputs.
█ INTERPRETATION
The first thing to look at when analyzing CVD candles is the side of the zero line they are on, as this tells you if CVD is generally bullish or bearish. Next, one should consider the relative position of successive candles, just as you would with a price chart. Are successive candles trending up, down, or stagnating? Keep in mind that whatever trend you identify must be considered in the context of where it appears with regards to the zero line; an uptrend in a negative CVD (below the zero line) may not be as powerful as one taking place in positive CVD values, but it may also predate a movement into positive CVD territory. The same goes with stagnation; a trader in a long position will find stagnation in positive CVD territory less worrisome than stagnation under the zero line.
After consideration of the bigger picture, one can drill down into the details. Exactly what you are looking for in markets will, of course, depend on your trading methodology, but you may find it useful to:
• Evaluate volume delta for the bar in relation to price movement for that bar.
• Evaluate the proportion that volume delta represents of total volume.
• Notice divergences and if the chart's candle shape confirms a hesitation point, as a Doji would.
• Evaluate if the progress of CVD candles correlates with that of chart bars.
• Analyze the wicks. As with price candles, long wicks tend to indicate weakness.
Always keep in mind that unless you have chosen not to reset it, your CVD resets for each period, whether it is fixed or automatically stepped. Consequently, any trend from the preceding period must re-establish itself in the next.
█ NOTES
Know your volume
Traders using volume information should understand the volume data they are using: where it originates and what transactions it includes, as this can vary with instruments, sectors, exchanges, timeframes, and between historical and realtime bars. The information used to build a chart's bars and display volume comes from data providers (exchanges, brokers, etc.) who often maintain distinct feeds for intraday and end-of-day (EOD) timeframes. How volume data is assembled for the two feeds depends on how instruments are traded in that sector and/or the volume reporting policy for each feed. Instruments from crypto and forex markets, for example, will often display similar volume on both feeds. Stocks will often display variations because block trades or other types of trades may not be included in their intraday volume data. Futures will also typically display variations.
Note that as intraday vs EOD variations exist for historical bars on some instruments, differences may also exist between the realtime feeds used on intraday vs 1D or greater timeframes for those same assets. Realtime reporting rules will often be different from historical feed reporting rules, so variations between realtime feeds will often be different from the variations between historical feeds for the same instrument. The Volume X-ray indicator can help you analyze differences between intraday and EOD volumes for the instruments you trade.
If every unit of volume is both bought by a buyer and sold by a seller, how can volume delta make sense?
Traders who do not understand the mechanics of matching engines (the exchange software that matches orders from buyers and sellers) sometimes argue that the concept of volume delta is flawed, as every unit of volume is both bought and sold. While they are rigorously correct in stating that every unit of volume is both bought and sold, they overlook the fact that information can be mined by analyzing variations in the price of successive ticks, or in our case, intrabars.
Our calculations model the situation where, in fully automated order handling, market orders are generally matched to limit orders sitting in the order book. Buy market orders are matched to quotes at the ask level and sell market orders are matched to quotes at the bid level. As explained earlier, we use the same logic when comparing intrabar prices. While using intrabar analysis does not produce results as precise as when individual transactions — or ticks — are analyzed, results are much more precise than those of methods using only chart prices.
Not only does the concept underlying volume delta make sense, it provides a window on an oft-overlooked variable which, with price and time, is the only basic information representing market activity. Furthermore, because the calculation of volume delta also uses price and time variations, one could conceivably surmise that it can provide a more complete model than ones using price and time only. Whether or not volume delta can be useful in your trading practice, as usual, is for you to decide, as each trader's methodology is different.
For Pine Script™ coders
As our latest Polarity Divergences publication, this script uses the recently released request.security_lower_tf() Pine Script™ function discussed in this blog post . It works differently from the usual request.security() in that it can only be used at LTFs, and it returns an array containing one value per intrabar. This makes it much easier for programmers to access intrabar information.
Look first. Then leap.
Grid Bot AutoThis script is an auto-adjusting grid bot simulator. This is an improved version of the original Grid Bot Simulator. The grid bot is best used for ranging/choppy markets. Prices are divided into grids, or trade zones, that will trigger signals each time a new zone is entered. During ranging markets, each transaction is followed by a “take profit.” As the market starts to trend, transactions are stacked (compare to DCA ), until the market consolidates. No signals are triggered above the Upper Limit or Below the Lower Limit. Unlike the previous version, the upper and lower limits are calculated automatically. Grid levels are determined by four factors: Smoothing, Laziness, Elasticity, and Grid Intervals.
Smoothing:
A moving average (or linear regression) is applied to each close price as a basis. Options for smoothing are Linear Regression, Simple Moving Average, Exponential Moving Average, Volume-Weighted Moving Average, Triple-Exponential Moving Average.
Laziness:
Laziness is the percentage change required to reach the next level. If laziness is 1.5, the price must move up or down by 1.5% before the grid will change. This concept is based on Alex Grover’s Efficient Trend Step. This allows the grids to be based on even price levels, as opposed to jagged moving averages.
Elasticity:
Elasticity is the degree of “stickiness” to the current price trend. If the smoothing line remains above (or below) the current grid center without reverting but still not enough to reach the next grid level, the grid line will start to curve toward the next grid level. Elasticity is added to (or subtracted from) the gridline by a factor of minimum system ticks for the current pair. Elasticity of zero will keep the gridlines horizontal. If elasticity is too high, the grid will distort.
Grid Intervals:
Grid intervals are the percentage of space between each grid.
Laziness = 4%, Elasticity = 0. Price must move at least 4% before reaching the next level. With zero elasticity, gridlines are straight.
Laziness = 5%, Elasticity = 100. For each bar at a new grid level, the grid will start “curve” toward the next price level (up if price is greater than the middle grid, down if less than middle grid). Elasticity is calculated by the user-inputted “Elasticity” multiplied by the minimum tick for the current pair (ELSTX = syminfo.mintick * iELSTX)
Try experimenting with different combinations of the Smoothing Length, Smoothing Type, Laziness, Elasticity, and Grid Intervals to find the optimum settings for each chart. Lower-priced pairs (e.g. XRP/ADA/DODGE) will require lower Elasticity. Also note that different exchanges may have different minimum tick values. For example, minimum tick for BITMEX:XBTUSD and BYBIT:BTCUSD is .5, but BINANCE:BTCUSDT and COINBASE:BTCUSD is .01.
s3.tradingview.com
DODGEUSDT, 5min. Laziness: 4%, Elasticity 2.5
Number of Grids: 2. Laziness: 3.75%. Elasticity: 150. Grid Interval 2%.
Settings Overview
Smoothing Length : Smoothing period
Smoothing Type : Linear Regression, Simple Moving Average, Exponential Moving Average, Volume-Weighted Moving Average, Triple-Exponential Moving Average
Laziness : Percentage required for price to move until it reaches the next level. If price does not reach the next level (up or down), the grid will remain the same as previous grid (because it’s lazy).
Elasticity : Amount of curvature toward the next grid, based on the current price trend. As elasticity increases, gridlines will curve up or down by a factor of the number of ticks since the last grid change.
Grid Interval : Percent between grid levels.
Number of Grids : Number of grids to show.
Cooldown : Number of bars to wait to prevent consecutive signals.
Grid Line Transparency : Lower transparencies brighten the gridlines; higher transparencies dim the gridlines. To hide the gridlines completely, enter 100.
Fill Transparency: Lower transparencies brighten the fill box; higher transparencies dim the fill box. To hide the fill box completely, enter 100.
Signal Size : Make signal triangles large or small.
Reset Buy/Sell Index When Grids Change : When a new grid is formed, resetting the index may prevent false signals (experimental)
Use Highs/Lows for Signals : If enabled, signals are triggered as soon as the price touches the next zone. If disabled, signals are triggered after bar closes. Enable this for “Once Per Bar alerts. Disable for “Once Per Bar Close” alerts.
Show Min Tick : If checked, syminfo.mintick is displayed in upper-righthand corner. Useful for estimating Laziness.
Reverse Fill Colors : Default fill for fill boxes is green after buy and red after sell. Check this box to reverse.
Note: The Grid Bot Simulator scripts are experimental and works in progress. Please feel free to comment or contact me if you have suggestions/complaints.
Join data and union of 2 hystorical markets
How to create a union from two contiguous Tradingview tickers (series)
Francesco Marzolo March 18, 2021
Go to the older ticker of the two, for example CME: SP1! and open it on Tradingview.
On the graph thus created, add this script.
In the indicator settings select the same ticker as the chart in Symbol1
while in Symbol2 the ticker from which to retrieve the most recent data, for example: SPX500
The operation this script does is examine each bar of the two tickers, where there is a value for the second it holds this one, where it does not exist in second ticker it keeps the value of the first one. This new series is called Merge. So now in the chart there will be 4 series:
- that of the original chart without script
- the same series loaded via script (Symbol1)
- series 2 of "new" data (Symbol2)
- the Merge series that "prefers" the Symbol2 data if present, otherwise it shows Symbol1
So now you have to change the visibility of the 4 series to see the differences:
- turn off the visibility of the chart indicator
- turn off the Symbol1 series in the script properties (old data only)
- switch off the Symbol2 series as well (only new data)
- switch on the Merge series (new data if existing, old if not present in the new ticker)
Compare (RSI) MACDHere I've created an indicator which can be used together with my "Compare (RSI) Ticker 3x" Indicator.
It makes it much easier to see the movements between the "RSI Ticker 1" and "RSI Ticker 2/3".
- The white line is the "MACD" of Ticker 1, which is the difference between the "RSI Ticker 1" and "RSI Ticker 2/3".
- The purple line is the "Signal" line, an EMA of the "MACD". (Length is adjustable)
- The "0-line" is the "RSI Ticker 2/3" line, when Ticker 2 is chosen, this will be blue coloured, when Ticker 3 is chosen it will be red.
Because 2 MACD in 1 indicator is way too messy, you only can choose the comparison against Ticker 2 OR Ticker 3.
- In "Settings" > "Inputs" you can enable/disable the second or third Ticker
(If Ticker 2 is enabled, Ticker 3 is disabled and vice versa)
- The second Ticker has multiple choices
- The third you can type any Ticker you want, for example CRYPTOCAP:BNB, BINANCE:ETHUSDT, NASDAQ_DLY:NDX or whatever,
just start typing and you'll see the possibilities (You also can choose between "Cryptocurrencies", "Index", "Forex", ...)
- When the "MACD" crosses the "0-line", arrows will appear, white ones for "MACD", purple ones for the "Signal" line.
- The "Histogram" makes it easier to see the difference between "MACD" and "Signal" line.
- The source of this indicator is adjustable
- When the second chosen Ticker is the same as the first Ticker, of course you will be seeing lines
(because there is no difference between the 2 Tickers, the EMA is visible though)
If you use both "Compare (RSI) Ticker 3x" AND "Compare (RSI) MACD", of course be aware that you have the same Ticker 2 or 3 in each indicator!
ICT First Presented FVG with Volume Imbalance [1st P. FVG + VI]The indicator identifies and highlights the first presented Fair Value Gap (FVG) occurringthe morning (09:30–10:00) and afternoon (13:30–14:00) session's first 30 minutes. It includes an optional feature to extend FVG zones when a volume imbalance (V.I.) is detected, providing additional context for areas of potential price inefficiency. This powerful combination helps traders identify significant market structure gaps that often act as support/resistance zones and potential price targets.
What is an FVG?
A Fair Value Gap, often abbreviated as FVG, is a price range on a chart where there is an inefficiency or imbalance in trading. This typically happens when price moves rapidly in one direction, leaving a gap between the wicks or bodies of three consecutive candles. For example, in a bullish move, if the low of the third candle is higher than the high of the first candle, the space between them is the FVG.
What is a Volume Imbalance?
A volume imbalance is a smaller, more precise inefficiency within price action, often visible as a "crack" or thin area in the price delivery. It represents a spot where the volume traded was not balanced between buyers and sellers, often seen as a thin wick or a gap between candle bodies.
FVG + Volume Imbalance:
When you have a fair value gap that contains a volume imbalance, it becomes a more significant area of interest. ICT teaches that you should not ignore a volume imbalance if it’s part of an FVG. In fact, you should use the volume imbalance in conjunction with the FVG to define your trading range more accurately
📊 Volume Imbalance Integration
Toggle Option: Enable/disable volume imbalance detection based on preference
Extended Boundaries: When enabled, FVG boundaries expand to include volume imbalance zones
Accurate Gap Sizing: Total gap calculation includes volume imbalance extensions
Multi-Scenario Support: Handles volume imbalances at start, end, or both sides of FVG formations
📈 Multiple Display Modes
Current Day: Shows only today's FVGs for clean chart analysis
Current Week: Displays all weekly FVGs for broader context
Forward Extension: Extends FVG boxes and CE, Upper/Lower Quadrant lines into the future
📊 Visualization
Bullish FVGs appear in semi-transparent blue or purple zones (depending on session).
Bearish FVGs appear in red or orange zones.
Optional dotted lines mark the CE (midpoint) of each FVG for additional reference.
Quadrant Division: Additional 25%/75% lines for large FVGs (configurable minimum gap size)
🎯 Smart Filtering
First Presentation Only: Only displays the initial FVG in each session, avoiding clutter
Minimum Gap Size: Configurable tick-based thresholds for AM and PM sessions
Core FVG Validation: Ensures only valid Fair Value Gaps are displayed
⚙️ Configuration Options
Display Settings
Show Mode: Current Day or Current Week view
Forward Extension: 1-500 bars projection
Day Labels: Toggle weekday labels in weekly mode
Text Color: Customizable label colors
Volume Imbalance Settings
Include Volume Imbalance: Master toggle for enhanced boundary calculation
Automatic Detection: Identifies imbalance scenarios without additional input
Session-Specific Settings
AM Session (09:30-10:00):
Enable/disable AM FVG detection
Customizable bullish/bearish colors
CE line visibility and coloring
Minimum gap size in ticks
PM Session (13:30-14:00):
Enable/disable PM FVG detection
Customizable bullish/bearish colors
CE line visibility and coloring
Minimum gap size in ticks
Quadrant Settings
Enable/Disable: Toggle quadrant line display
Minimum Gap: Tick threshold for quadrant activation
Line Style: Dotted, dashed, or solid
Color: Customizable quadrant line color
How It Works
FVG Boundary Calculation
Traditional FVG: High to Low (bullish) or Low to High (bearish)
Enhanced FVG: Extended boundaries to include volume imbalance zones when enabled
Total Gap Size: Calculated including any volume imbalance extensions
Volume Imbalance Detection
The indicator identifies volume imbalances by detecting bars where:
Bullish Imbalance: Current bar's body is completely above previous bar's body
Bearish Imbalance: Current bar's body is completely below previous bar's body
⚠️ Disclaimer
This script is a technical visualization tool only.
It does not provide financial advice, signals, or predictions. Always perform independent analysis and manage risk appropriately before making trading decisions.
Quantum Flux Universal Strategy Summary in one paragraph
Quantum Flux Universal is a regime switching strategy for stocks, ETFs, index futures, major FX pairs, and liquid crypto on intraday and swing timeframes. It helps you act only when the normalized core signal and its guide agree on direction. It is original because the engine fuses three adaptive drivers into the smoothing gains itself. Directional intensity is measured with binary entropy, path efficiency shapes trend quality, and a volatility squash preserves contrast. Add it to a clean chart, watch the polarity lane and background, and trade from positive or negative alignment. For conservative workflows use on bar close in the alert settings when you add alerts in a later version.
Scope and intent
• Markets. Large cap equities and ETFs. Index futures. Major FX pairs. Liquid crypto
• Timeframes. One minute to daily
• Default demo used in the publication. QQQ on one hour
• Purpose. Provide a robust and portable way to detect when momentum and confirmation align, while dampening chop and preserving turns
• Limits. This is a strategy. Orders are simulated on standard candles only
Originality and usefulness
• Unique concept or fusion. The novelty sits in the gain map. Instead of gating separate indicators, the model mixes three drivers into the adaptive gains that power two one pole filters. Directional entropy measures how one sided recent movement has been. Kaufman style path efficiency scores how direct the path has been. A volatility squash stabilizes step size. The drivers are blended into the gains with visible inputs for strength, windows, and clamps.
• What failure mode it addresses. False starts in chop and whipsaw after fast spikes. Efficiency and the squash reduce over reaction in noise.
• Testability. Every component has an input. You can lengthen or shorten each window and change the normalization mode. The polarity plot and background provide a direct readout of state.
• Portable yardstick. The core is normalized with three options. Z score, percent rank mapped to a symmetric range, and MAD based Z score. Clamp bounds define the effective unit so context transfers across symbols.
Method overview in plain language
The strategy computes two smoothed tracks from the chart price source. The fast track and the slow track use gains that are not fixed. Each gain is modulated by three drivers. A driver for directional intensity, a driver for path efficiency, and a driver for volatility. The difference between the fast and the slow tracks forms the raw flux. A small phase assist reduces lag by subtracting a portion of the delayed value. The flux is then normalized. A guide line is an EMA of a small lead on the flux. When the flux and its guide are both above zero, the polarity is positive. When both are below zero, the polarity is negative. Polarity changes create the trade direction.
Base measures
• Return basis. The step is the change in the chosen price source. Its absolute value feeds the volatility estimate. Mean absolute step over the window gives a stable scale.
• Efficiency basis. The ratio of net move to the sum of absolute step over the window gives a value between zero and one. High values mean trend quality. Low values mean chop.
• Intensity basis. The fraction of up moves over the window plugs into binary entropy. Intensity is one minus entropy, which maps to zero in uncertainty and one in very one sided moves.
Components
• Directional Intensity. Measures how one sided recent bars have been. Smoothed with RMA. More intensity increases the gain and makes the fast and slow tracks react sooner.
• Path Efficiency. Measures the straightness of the price path. A gamma input shapes the curve so you can make trend quality count more or less. Higher efficiency lifts the gain in clean trends.
• Volatility Squash. Normalizes the absolute step with Z score then pushes it through an arctangent squash. This caps the effect of spikes so they do not dominate the response.
• Normalizer. Three modes. Z score for familiar units, percent rank for a robust monotone map to a symmetric range, and MAD based Z for outlier resistance.
• Guide Line. EMA of the flux with a small lead term that counteracts lag without heavy overshoot.
Fusion rule
• Weighted sum of the three drivers with fixed weights visible in the code comments. Intensity has fifty percent weight. Efficiency thirty percent. Volatility twenty percent.
• The blend power input scales the driver mix. Zero means fixed spans. One means full driver control.
• Minimum and maximum gain clamps bound the adaptive gain. This protects stability in quiet or violent regimes.
Signal rule
• Long suggestion appears when flux and guide are both above zero. That sets polarity to plus one.
• Short suggestion appears when flux and guide are both below zero. That sets polarity to minus one.
• When polarity flips from plus to minus, the strategy closes any long and enters a short.
• When flux crosses above the guide, the strategy closes any short.
What you will see on the chart
• White polarity plot around the zero line
• A dotted reference line at zero named Zen
• Green background tint for positive polarity and red background tint for negative polarity
• Strategy long and short markers placed by the TradingView engine at entry and at close conditions
• No table in this version to keep the visual clean and portable
Inputs with guidance
Setup
• Price source. Default ohlc4. Stable for noisy symbols.
• Fast span. Typical range 6 to 24. Raising it slows the fast track and can reduce churn. Lowering it makes entries more reactive.
• Slow span. Typical range 20 to 60. Raising it lengthens the baseline horizon. Lowering it brings the slow track closer to price.
Logic
• Guide span. Typical range 4 to 12. A small guide smooths without eating turns.
• Blend power. Typical range 0.25 to 0.85. Raising it lets the drivers modulate gains more. Lowering it pushes behavior toward fixed EMA style smoothing.
• Vol window. Typical range 20 to 80. Larger values calm the volatility driver. Smaller values adapt faster in intraday work.
• Efficiency window. Typical range 10 to 60. Larger values focus on smoother trends. Smaller values react faster but accept more noise.
• Efficiency gamma. Typical range 0.8 to 2.0. Above one increases contrast between clean trends and chop. Below one flattens the curve.
• Min alpha multiplier. Typical range 0.30 to 0.80. Lower values increase smoothing when the mix is weak.
• Max alpha multiplier. Typical range 1.2 to 3.0. Higher values shorten smoothing when the mix is strong.
• Normalization window. Typical range 100 to 300. Larger values reduce drift in the baseline.
• Normalization mode. Z score, percent rank, or MAD Z. Use MAD Z for outlier heavy symbols.
• Clamp level. Typical range 2.0 to 4.0. Lower clamps reduce the influence of extreme runs.
Filters
• Efficiency filter is implicit in the gain map. Raising efficiency gamma and the efficiency window increases the preference for clean trends.
• Micro versus macro relation is handled by the fast and slow spans. Increase separation for swing, reduce for scalping.
• Location filter is not included in v1.0. If you need distance gates from a reference such as VWAP or a moving mean, add them before publication of a new version.
Alerts
• This version does not include alertcondition lines to keep the core minimal. If you prefer alerts, add names Long Polarity Up, Short Polarity Down, Exit Short on Flux Cross Up in a later version and select on bar close for conservative workflows.
Strategy has been currently adapted for the QQQ asset with 30/60min timeframe.
For other assets may require new optimization
Properties visible in this publication
• Initial capital 25000
• Base currency Default
• Default order size method percent of equity with value 5
• Pyramiding 1
• Commission 0.05 percent
• Slippage 10 ticks
• Process orders on close ON
• Bar magnifier ON
• Recalculate after order is filled OFF
• Calc on every tick OFF
Honest limitations and failure modes
• Past results do not guarantee future outcomes
• Economic releases, circuit breakers, and thin books can break the assumptions behind intensity and efficiency
• Gap heavy symbols may benefit from the MAD Z normalization
• Very quiet regimes can reduce signal contrast. Use longer windows or higher guide span to stabilize context
• Session time is the exchange time of the chart
• If both stop and target can be hit in one bar, tie handling would matter. This strategy has no fixed stops or targets. It uses polarity flips for exits. If you add stops later, declare the preference
Open source reuse and credits
• None beyond public domain building blocks and Pine built ins such as EMA, SMA, standard deviation, RMA, and percent rank
• Method and fusion are original in construction and disclosure
Legal
Education and research only. Not investment advice. You are responsible for your decisions. Test on historical data and in simulation before any live use. Use realistic costs.
Strategy add on block
Strategy notice
Orders are simulated by the TradingView engine on standard candles. No request.security() calls are used.
Entries and exits
• Entry logic. Enter long when both the normalized flux and its guide line are above zero. Enter short when both are below zero
• Exit logic. When polarity flips from plus to minus, close any long and open a short. When the flux crosses above the guide line, close any short
• Risk model. No initial stop or target in v1.0. The model is a regime flipper. You can add a stop or trail in later versions if needed
• Tie handling. Not applicable in this version because there are no fixed stops or targets
Position sizing
• Percent of equity in the Properties panel. Five percent is the default for examples. Risk per trade should not exceed five to ten percent of equity. One to two percent is a common choice
Properties used on the published chart
• Initial capital 25000
• Base currency Default
• Default order size percent of equity with value 5
• Pyramiding 1
• Commission 0.05 percent
• Slippage 10 ticks
• Process orders on close ON
• Bar magnifier ON
• Recalculate after order is filled OFF
• Calc on every tick OFF
Dataset and sample size
• Test window Jan 2, 2014 to Oct 16, 2025 on QQQ one hour
• Trade count in sample 324 on the example chart
Release notes template for future updates
Version 1.1.
• Add alertcondition lines for long, short, and exit short
• Add optional table with component readouts
• Add optional stop model with a distance unit expressed as ATR or a percent of price
Notes. Backward compatibility Yes. Inputs migrated Yes.
Untouched ExtremesWhat it is
Untouched Extremes plots horizontal levels at green-candle highs and red-candle lows. Each level is considered “untouched” (clean liquidity) until price revisits it; on the first valid touch the line auto-deletes, keeping only live targets on your chart.
How it works (logic)
Bar close event
If close > open, the script draws a line at that bar’s high and extends it to the right.
If close < open, it draws a line at that bar’s low and extends it to the right.
(Optional) Perfect/almost-dojis can be classified as green or red via settings.
Touch & removal
A green-high line is removed when any later bar’s high ≥ level (optionally within a tick tolerance).
A red-low line is removed when any later bar’s low ≤ level (optionally within a tick tolerance).
You can delay deletion by N bars to make the touch visible before the line disappears.
Housekeeping
Maximum active lines per side and line styling are user-configurable.
Why it’s useful
Untouched highs/lows often coincide with resting liquidity and incomplete price probes. Tracking them helps:
Define targets and magnets price may seek.
Frame mean-reversion rotations after a failed push.
Keep the chart clean: only levels that have not been traded are displayed.
How to use it (trading idea)
Confirmation rule: Treat the line as a level/zone. Price can pierce it; wait for a clear reversal candle pattern (e.g., pin bar, engulfing, strong momentum shift) at or immediately after the touch.
Directional play:
If a bullish reversal pattern forms at/around a red-low line, the working assumption is that price will move toward the first untouched upper line (nearest green-high line above). Many traders use that as the primary target.
Conversely, if a bearish reversal pattern forms at/around a green-high line, expect rotation toward the first untouched lower line.
Risk management: Stops typically go just beyond the level or beyond the pattern’s wick. Consider a fixed R:R (e.g., 1:2) and partials at intermediate levels.
Settings
Doji handling: Choose how to classify close ≈ open bars (Green / Red / Ignore). A small equality margin (ticks) helps with rounding on some symbols.
Touch tolerance (ticks): Counts near-misses as touches if desired.
Deletion delay (bars): Wait N bars after creation before a line becomes eligible for deletion.
Max lines per side / width / colors: Keep the view readable.
Tips
Works on any symbol/timeframe; lower TFs produce more levels—adjust Max lines accordingly.
Combining with a trend filter (e.g., EMA-200), ATR distance, or volume clues can improve selectivity.
If spreads or wicks are noisy, increase tolerance slightly and/or use deletion delay to visualize touches.
Note: This tool provides structure and potential targets, not signals by itself. Always require your reversal pattern as confirmation and manage risk appropriately.
Range TableThe Range Table indicator calculates and displays the Daily Average True Range (ATR), the current day's True Range (TR), and two customizable ATR percentage values in a clean table format. It provides values in ticks, points, and USD, helping traders set stop-loss buffers based on market volatility.
**Features:**
- Displays the Daily ATR (14-period) and current day's True Range (TR) with its percentage of the Daily ATR.
- Includes two customizable ATR percentages (default: 75% and 10%, with the second disabled by default).
- Shows values in ticks, points, and USD based on the symbol's tick size and point value.
- Customizable table position, background color, text color, and font size.
- Toggle visibility for the table and percentage rows via input settings.
**How to Use:**
1. Add the indicator to your chart.
2. Adjust the table position, colors, and font size in the input settings.
3. Enable or disable the 75% and 10% ATR rows or customize their percentages.
4. Use the displayed values to set stop-loss or take-profit levels based on volatility.
**Ideal For:**
- Day traders and swing traders looking to set volatility-based stop-losses.
- Users analyzing tick, point, and USD-based risk metrics.
**Notes:**
- Ensure your chart is set to a timeframe that aligns with the daily ATR calculations.
- USD values are approximate if `syminfo.pointvalue` is unavailable.
Developed by FlyingSeaHorse.
Tuga SupertrendDescription
This strategy uses the Supertrend indicator enhanced with commission and slippage filters to capture trends on the daily chart. It’s designed to work on any asset but is especially effective in markets with consistent movements.
Use the date inputs to set the backtest period (default: from January 1, 2018, through today, June 30, 2025).
The default input values are optimized for the daily chart. For other timeframes, adjust the parameters to suit the asset you’re testing.
Release Notes
June 30, 2025
• Updated default backtest period to end on June 30, 2025.
• Default commission adjusted to 0.1 %.
• Slippage set to 3 ticks.
• Default slippage set to 3 ticks.
• Simplified the strategy name to “Tuga Supertrend”.
Default Parameters
Parameter Default Value
Supertrend Period 10
Multiplier (Factor) 3
Commission 0.1 %
Slippage 3 ticks
Start Date January 1, 2018
End Date June 30, 2025
[Mustang Algo] Channel Strategy# Mustang Algo Channel Strategy - Universal Market Sentiment Oscillator
## 🎯 ORIGINAL CONCEPT
This strategy employs a unique market sentiment oscillator that works on ALL financial assets. It uses Bitcoin supply dynamics combined with stablecoin market capitalization as a macro sentiment indicator to generate universal timing signals across stocks, forex, commodities, indices, and cryptocurrencies.
## 🌐 UNIVERSAL APPLICATION
- **Any Asset Class:** Stocks, Forex, Commodities, Indices, Crypto, Bonds
- **Market-Wide Timing:** BTC/Stablecoin ratio serves as a global risk sentiment gauge
- **Cross-Market Signals:** Trade any instrument using macro liquidity conditions
- **Ecosystem Approach:** One oscillator for all financial markets
## 🧮 METHODOLOGY
**Core Calculation:** BTC Supply / (Combined Stablecoin Market Cap / BTC Price)
- **Data Sources:** DAI + USDT + USDC market capitalizations
- **Signal Generation:** RSI(14) applied to the ratio, double-smoothed with WMA
- **Timing Logic:** Crossover signals filtered by overbought/oversold zones
- **Multi-Timeframe:** Configurable timeframe analysis (default: Daily)
## 📈 TRADING STRATEGY
**LONG Entries:** Bullish crossover when market sentiment is oversold (<48)
**SHORT Entries:** Bearish crossover when market sentiment is overbought (>55)
**Universal Timing:** These macro signals apply to trading any financial instrument
## ⚙️ FLEXIBLE RISK MANAGEMENT
**Three SL/TP Calculation Modes:**
- **Percentage Mode:** Traditional % based (4% SL, 12% TP default)
- **Ticks Mode:** Precise tick-based calculation (50/150 ticks default)
- **Pips Mode:** Forex-style pip calculation (50/150 pips default)
**Realistic Parameters:**
- Commission: 0.1% (adjustable for different asset classes)
- Slippage: 2 ticks
- Position sizing: 10% of equity (conservative)
- No pyramiding (single position management)
## 📊 KEY ADVANTAGES
✅ **Universal Application:** One strategy for all asset classes
✅ **Macro Foundation:** Based on global liquidity and risk sentiment
✅ **False Signal Filtering:** Overbought/oversold zones reduce noise
✅ **Flexible Risk Management:** Multiple SL/TP calculation methods
✅ **No Lookahead Bias:** Clean backtesting with realistic results
✅ **Cross-Market Correlation:** Captures broad market risk cycles
## 🎛️ CONFIGURATION GUIDE
1. **Asset Selection:** Apply to stocks, forex, commodities, indices, crypto
2. **Timeframe Setup:** Daily recommended for swing trading
3. **Sentiment Bounds:** Adjust 48/55 levels based on market volatility
4. **Risk Management:** Choose appropriate SL/TP mode for your asset class
5. **Direction Filter:** Select Long Only, Short Only, or Both
## 📋 BACKTESTING STANDARDS
**Compliant with TradingView Guidelines:**
- ✅ Realistic commission structure (0.1% default)
- ✅ Appropriate slippage modeling (2 ticks)
- ✅ Conservative position sizing (10% equity)
- ✅ Sustainable risk ratios (1:3 SL/TP)
- ✅ No lookahead bias (proper historical simulation)
- ✅ Sufficient sample size potential (100+ trades possible)
## 🔬 ORIGINAL RESEARCH
This strategy introduces a revolutionary approach to financial markets by treating the BTC/Stablecoin ratio as a global risk sentiment gauge. Unlike traditional indicators that analyze individual asset price action, this oscillator captures macro liquidity flows that affect ALL financial markets - from stocks to forex to commodities.
## 🎯 MARKET APPLICATIONS
**Stocks & Indices:** Risk-on/risk-off sentiment timing
**Forex:** Global liquidity flow analysis for major pairs
**Commodities:** Risk appetite for inflation hedges
**Bonds:** Flight-to-safety vs. risk-seeking behavior
**Crypto:** Native application with direct correlation
## ⚠️ RISK DISCLOSURE
- Designed for intermediate to long-term trading across all timeframes
- Market sentiment can remain extreme longer than expected
- Always use appropriate position sizing for your specific asset class
- Adjust commission and slippage settings for different markets
- Past performance does not guarantee future results
## 🚀 INNOVATION SUMMARY
**What makes this strategy unique:**
- First to use BTC/Stablecoin ratio as universal market sentiment indicator
- Applies macro-economic principles to technical analysis across all assets
- Single oscillator provides timing signals for entire financial ecosystem
- Bridges traditional finance with digital asset insights
- Combines fundamental liquidity analysis with technical precision
WebhookGeneratorLibrary "WebhookGenerator"
Generates Json objects for webhook messages.
GenerateOT(license_id, symbol, action, order_type, trade_type, size, price, tp, sl, risk, trailPrice, trailOffset)
CreateOrderTicket: Establishes a order ticket.
Parameters:
license_id (string) : Provide your license index
symbol (string) : Symbol on which to execute the trade
action (string) : Execution method of the trade : "MRKT" or "PENDING"
order_type (string) : Direction type of the order: "BUY" or "SELL"
trade_type (string) : Is it a "SPREAD" trade or a "SINGLE" symbol execution?
size (float) : Size of the trade, in units
price (float) : If the order is pending you must specify the execution price
tp (float) : (Optional) Take profit of the order
sl (float) : (Optional) Stop loss of the order
risk (float) : Percent to risk for the trade, if size not specified
trailPrice (float) : (Optional) Price at which trailing stop is starting
trailOffset (float) : (Optional) Amount to trail by
Returns: Return Order string