Pavan CPR Strategy Pavan CPR Strategy (Pine Script)
The Pavan CPR Strategy is a trading system based on the Central Pivot Range (CPR), designed to identify price breakouts and generate long trade signals. This strategy uses key CPR levels (Pivot, Top CPR, and Bottom CPR) calculated from the daily high, low, and close to inform trade decisions. Here's an overview of how the strategy works:
Key Components:
CPR Calculation:
The strategy calculates three critical CPR levels for each trading day:
Pivot (P): The central value, calculated as the average of the high, low, and close prices.
Top Central Pivot (TC): The midpoint of the daily high and low, acting as the resistance level.
Bottom Central Pivot (BC): Derived from the pivot and the top CPR, providing a support level.
The script uses request.security to fetch these CPR values from the daily timeframe, even when applied on intraday charts.
Trade Entry Condition:
A long position is initiated when:
The current price crosses above the Top CPR level (TC).
The previous close was below the Top CPR level, signaling a breakout above a key resistance level.
This condition aims to capture upward momentum as the price breaks above a significant level.
Exit Strategy:
Take Profit: The position is closed with a profit target set 50 points above the entry price.
Stop Loss: A stop loss is placed at the Pivot level to protect against unfavorable price movements.
Visual Reference:
The script plots the three CPR levels on the chart:
Pivot: Blue line.
Top CPR (TC): Green line.
Bottom CPR (BC): Red line.
These plotted levels provide visual guidance for identifying potential support and resistance zones.
Use Case:
The Pavan CPR Strategy is ideal for intraday traders who want to capitalize on price movements and breakouts above critical CPR levels. It provides clear entry and exit signals based on price action and is best used in conjunction with proper risk management.
Note: The strategy is written in Pine Script v5 for use on TradingView, and it is recommended to backtest and optimize it for the asset or market you are trading.
Cari dalam skrip untuk "top"
Patrick [TFO]This Patrick indicator was made for the 1 year anniversary of my Spongebob indicator, which was an experiment in using the polyline features of Pine Script to draw complex subjects. This indicator was made with the same methodology, with some helper functions to make things a bit easier on myself. It's sole purpose is to display a picture of Patrick Star on your chart, particularly the "I have $3" meme.
The initial Spongebob indicator included more than 1300 lines of code, as there were several more shapes to account for compared to Patrick, however it was done rather inefficiently. I essentially used an anchor point for each "layer" or shape (eye, nose, mouth, etc.), and drew from that point. This resulted in a ton of trial and error as I had to be very careful about the anchor points for each and every layer, and then draw around that point. In this indicator, however, I gave myself a frame to work with by specifying fixed bounds that you'll see in the code: LEFT, RIGHT, TOP, and BOTTOM.
var y_size = 4
atr = ta.atr(50)
LEFT = bar_index + 10
RIGHT = LEFT + 200
TOP = open + atr * y_size
BOTTOM = open - atr * y_size
You may notice that the top and bottom scale with the atr, or Average True Range to account for varying price fluctuations on different assets.
With these limits established, I could write some simple functions to translate my coordinates, using a range of 0-100 to describe how far the X coordinates should be from left to right, where left is 0 and right is 100; and likewise how far the Y coordinates should be from bottom to top, where bottom is 0 and top is 100.
X(float P) =>
result = LEFT + math.floor((RIGHT - LEFT)*P/100)
Y(float P) =>
result = BOTTOM + (TOP - BOTTOM)*P/100
With these functions, I could then start drawing points much simpler, with respect to the overall frame of the picture. If I wanted a point in the dead center of the frame, I would choose X(50), Y(50) for example.
At this point, the process just became tediously drawing each layer of my reference picture, including but not limited to Patrick's body, arm, mouth, eyes, eyebrows, etc. I've attached the reference picture here (left), without the text enabled.
As tedious as this was to create, it was done much more efficiently than Spongebob, and the ideas used here will make it much easier to draw more complex subjects in the future.
Depth of Market (DOM) [LuxAlgo]The Depth Of Market (DOM) tool allows traders to look under the hood of any market, taking price and volume analysis to the next level. The following features are included: DOM, Time & Sales, Volume Profile, Depth of Market, Imbalances, Buying Pressure, and up to 24 key intraday levels (it really packs a punch).
As a disclaimer, this tool does not use tick data, it is a DOM reconstruction from the provided real-time time series data (price and volume). So the volume you see is from filled orders only, this tool does not show unfilled limit orders.
Traders can enable or disable any of the features at will to avoid being overwhelmed with too much information and to make the tool perform faster.
The features that have the biggest impact on performance are Historical Data Collection, Key Levels (POC & VWAP), Time & Sales, Profile, and Imbalances. Disable these features to improve the indicator computational performance.
🔶 DOM
This is the simplest form of the tool, a simple DOM or ladder that displays the following columns:
PRICE: Price level
BID: Total number of market sell orders filled or limit buy orders filled.
SELL: Sell market orders
BUY: Buy market orders
ASK: Total number of market buy orders filled or limit sell orders filled.
The DOM only collects historical data from the last 24 hours and real-time data.
Traders can select a reset period for the DOM with two options:
DAILY: Resets at the beginning of each trading day
SESSIONS: Resets twice, as DAILY and 15.5 hours later, to coincide with the start of the RTH session for US tickers.
The DOM has two main modes, it can display price levels as ticks or points. The default is automatic based on the current daily volatility, but traders can manually force one mode or the other if they wish.
For convenience, traders have the option to set the number of lines (price levels), and the size of the text and to display only real-time data.
By default, the top price is set to 0 so that the DOM automatically adjusts the price levels to be displayed, but traders can set the top price manually so that the tool displays only the desired price levels in a fixed manner.
🔹 Volume Profile
As additional features to the basic DOM, traders have access to the volume profile histogram and the total volume per price level.
This helps traders identify at a glance key price areas where volume is accumulating (high volume nodes) or areas where volume is lacking (low volume nodes) - these areas are important to some traders who base their decision-making process on them.
🔹 Imbalances
Other added features are imbalances and buying pressure:
Interlevel Imbalance: volume delta between two different price levels
Intralevel Imbalance: delta between buy and sell volume at the same price level
Buying Pressure Percent: percentage of buy volume compared to total volume
Imbalances can help traders identify areas of interest in the price for possible support or resistance.
🔹 Depth
Depth allows traders to see at a glance how much supply is above the current price level or how much demand is below the current price level.
Above the current price level shows the cumulative ask volume (filled sell limit orders) and below the current price level shows the cumulative bid volume (filled buy limit orders).
🔶 KEY LEVELS
The tool includes up to 24 different key intraday levels of particular relevance:
Previous Week Levels
PWH: Previous week high
PWL: Previous week low
PWM: Previous week middle
PWS: Previous week settlement (close)
Previous Day Levels
PDH: Previous day high
PDL: Previous day low
PDM: Previous day middle
PDS: Previous day settlement (close)
Current Day Levels
OPEN: Open of day (or session)
HOD: High of day (or session)
LOD: Low of day (or session)
MOD: Middle of day (or session)
Opening Range
ORH: Open range high
ORL: Open range low
Initial Balance
IBH: Initial balance high
IBL: Initial balance low
VWAP
+3SD: Volume weighted average price plus 3 standard deviations
+2SD: Volume weighted average price plus 2 standard deviations
+1SD: Volume weighted average price plus 1 standard deviation
VWAP: Volume weighted average price
-1SD: Volume weighted average price minus 1 standard deviation
-2SD: Volume weighted average price minus 2 standard deviations
-3SD: Volume weighted average price minus 3 standard deviations
POC: Point of control
Different traders look at different levels, the key levels shown here are objective and specific areas of interest that traders can act on, providing us with potential areas of support or resistance in the price.
🔶 TIME & SALES
The tool also features a full-time and sales panel with time, price, and size columns, a size filter, and the ability to set the timezone to display time in the trader's local time.
The information shown here is what feeds the DOM and it can be useful in several ways, for example in detecting absorption. If a large number of orders are coming into the market but the price is barely moving, this indicates that there is enough liquidity at these levels to absorb all these orders, so if these orders stop coming into the market, the price may turn around.
🔶 SETTINGS
Period: Select the anchoring period to start data collection, DAILY will anchor at the start of the trading day, and SESSIONS will start as DAILY and 15.5 hours later (RTH for US tickers).
Mode: Select between AUTO and MANUAL modes for displaying TICKS or POINTS, in AUTO mode the tool will automatically select TICKS for tickers with a daily average volatility below 5000 ticks and POINTS for the rest of the tickers.
Rows: Select the number of price levels to display
Text Size: Select the text size
🔹 DOM
DOM: Enable/Disable DOM display
Realtime only: Enable/Disable real-time data only, historical data will be collected if disabled
Top Price: Specify the price to be displayed on the top row, set to 0 to enable dynamic DOM
Max updates: Specify how many times the values on the SELL and BUY columns are accumulated until reset.
Profile/Depth size: Maximum size of the histograms on the PROFILE and DEPTH columns.
Profile: Enable/Disable Profile column. High impact on performance.
Volume: Enable/Disable Volume column. Total volume traded at price level.
Interlevel Imbalance: Enable/Disable Interlevel Imbalance column. Total volume delta between the current price level and the price level above. High impact on performance.
Depth: Enable/Disable Depth, showing the cumulative supply above the current price and the cumulative demand below. Impact on performance.
Intralevel Imbalance: Enable/Disable Intralevel Imbalance column. Delta between total buy volume and total sell volume. High impact on performance.
Buying Pressure Percent: Enable/Disable Buy Percent column. Percentage of total buy volume compared to total volume.
Imbalance Threshold %: Threshold for highlighting imbalances. Set to 90 to highlight the top 10% of interlevel imbalances and the top and bottom 10% of intra-level imbalances.
Crypto volume precision: Specify the number of decimals to display on the volume of crypto assets
🔹 Key Levels
Key Levels: Enable/Disable KEY column. Very high performance impact.
Previous Week: Enable/Disable High, Low, Middle, and Close of the previous trading week.
Previous Day: Enable/Disable High, Low, Middle, and Settlement of the previous trading day.
Current Day/Session: Enable/Disable Open, High, Low and Middle of the current period.
Open Range: Enable/Disable High and Low of the first candle of the period.
Initial Balance: Enable/Disable High and Low of the first hour of the period.
VWAP: Enable/Disable Volume-weighted average price of the period with 1, 2, and 3 standard deviations.
POC: Enable/Disable Point of Control (price level with the highest volume traded) of the period.
🔹 Time & Sales
Time & Sales: Enable/Disable time and sales panel.
Timezone offset (hours): Enter your time zone\'s offset (+ or −), including a decimal fraction if needed.
Order Size: Set order size filter. Orders smaller than the value are not displayed.
🔶 THANKS
Hi, I'm makit0 coder of this tool and proud member of the LuxAlgo Opensource team, it's an honor to be part of the LuxAlgo family doing something I love as it's writing opensource code and sharing it with the world. I'd like to thank all of you who use, comment on, and vote for all of our open-source tools, and all of you who give us your support.
And of course thanks to the PineCoders family for all the work in front of and behind the scenes that makes the PineScript community what it is, simply the best.
Peace, Love & PineScript!
Logarithmic Bollinger Bands [MisterMoTA]The script plot the normal top and bottom Bollinger Bands and from them and SMA 20 it finds fibonacci logarithmic levels where price can find temporary support/resistance.
To get the best results need to change the standard deviation to your simbol value, like current for BTC the Standards Deviation is 2.61, current Standard Deviation for ETH is 2.55.. etc.. find the right current standard deviation of your simbol with a search online.
The lines ploted by indicators are:
Main line is a 20 SMA
2 retracement Logarithmic Fibonacci 0.382 levels above and bellow 20 sma
2 retracement Logarithmic Fibonacci 0.618 levels above and bellow 20 sma
Top and Bottom Bollindger bands (ticker than the rest of the lines)
2 expansion Logarithmic Fibonacci 0.382 levels above Top BB and bellow Bottom BB
2 expansion Logarithmic Fibonacci 0.618 levels above Top BB and bellow Bottom BB
2 expansion Logarithmic Fibonacci level 1 above Top BB and bellow Bottom BB
2 expansion Logarithmic Fibonacci 1.618 levels above Top BB and bellow Bottom BB
Let me know If you find the indicator useful or PM if you need any custom changes to it.
TableLibrary "Table"
This library provides an easy way to convert arrays and matrixes of data into tables. There are a few different implementations of each function so you can get more or less control over the appearance of the tables. The basic rule of thumb is that all matrix rows must have the same number of columns, and if you are providing multiple arrays/matrixes to specify additional colors (background/text), they must have the same number of rows/columns as the data array. Finally, you do have the option of spanning cells across rows or columns with some special syntax in the data cell. Look at the examples to see how the arrays and matrixes need to be built before they can be used by the functions.
floatArrayToCellArray(floatArray)
Helper function that converts a float array to a Cell array so it can be rendered with the fromArray function
Parameters:
floatArray (float ) : (array) the float array to convert to a Cell array.
Returns: array The Cell array to return.
stringArrayToCellArray(stringArray)
Helper function that converts a string array to a Cell array so it can be rendered with the fromArray function
Parameters:
stringArray (string ) : (array) the array to convert to a Cell array.
Returns: array The Cell array to return.
floatMatrixToCellMatrix(floatMatrix)
Helper function that converts a float matrix to a Cell matrix so it can be rendered with the fromMatrix function
Parameters:
floatMatrix (matrix) : (matrix) the float matrix to convert to a string matrix.
Returns: matrix The Cell matrix to render.
stringMatrixToCellMatrix(stringMatrix)
Helper function that converts a string matrix to a Cell matrix so it can be rendered with the fromMatrix function
Parameters:
stringMatrix (matrix) : (matrix) the string matrix to convert to a Cell matrix.
Returns: matrix The Cell matrix to return.
fromMatrix(CellMatrix, position, verticalOffset, transposeTable, textSize, borderWidth, tableNumRows, blankCellText)
Takes a CellMatrix and renders it as a table.
Parameters:
CellMatrix (matrix) : (matrix) The Cells to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
tableNumRows (int) : (int) Optional. The number of rows in the table. Not required, defaults to the number of rows in the provided matrix. If your matrix will have a variable number of rows, you must provide the max number of rows or the function will error when it attempts to set a cell value on a row that the table hadn't accounted for when it was defined.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
fromMatrix(dataMatrix, position, verticalOffset, transposeTable, textSize, borderWidth, tableNumRows, blankCellText)
Renders a float matrix as a table.
Parameters:
dataMatrix (matrix) : (matrix_float) The data to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
tableNumRows (int) : (int) Optional. The number of rows in the table. Not required, defaults to the number of rows in the provided matrix. If your matrix will have a variable number of rows, you must provide the max number of rows or the function will error when it attempts to set a cell value on a row that the table hadn't accounted for when it was defined.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
fromMatrix(dataMatrix, position, verticalOffset, transposeTable, textSize, borderWidth, tableNumRows, blankCellText)
Renders a string matrix as a table.
Parameters:
dataMatrix (matrix) : (matrix_string) The data to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
tableNumRows (int) : (int) Optional. The number of rows in the table. Not required, defaults to the number of rows in the provided matrix. If your matrix will have a variable number of rows, you must provide the max number of rows or the function will error when it attempts to set a cell value on a row that the table hadn't accounted for when it was defined.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
fromArray(dataArray, position, verticalOffset, transposeTable, textSize, borderWidth, blankCellText)
Renders a Cell array as a table.
Parameters:
dataArray (Cell ) : (array) The data to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
fromArray(dataArray, position, verticalOffset, transposeTable, textSize, borderWidth, blankCellText)
Renders a string array as a table.
Parameters:
dataArray (string ) : (array_string) The data to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
fromArray(dataArray, position, verticalOffset, transposeTable, textSize, borderWidth, blankCellText)
Renders a float array as a table.
Parameters:
dataArray (float ) : (array_float) The data to be rendered in a table
position (string) : (string) Optional. The position of the table. Defaults to position.top_right
verticalOffset (int) : (int) Optional. The vertical offset of the table from the top or bottom of the chart. Defaults to 0.
transposeTable (bool) : (bool) Optional. Will transpose all of the data in the matrices before rendering. Defaults to false.
textSize (string) : (string) Optional. The size of text to render in the table. Defaults to size.small.
borderWidth (int) : (int) Optional. The width of the border between table cells. Defaults to 2.
blankCellText (string) : (string) Optional. Text to use cells when adding blank rows for vertical offsetting.
debug(message, position)
Renders a debug message in a table at the desired location on screen.
Parameters:
message (string) : (string) The message to render.
position (string) : (string) Optional. The position of the debug message. Defaults to position.middle_right.
Cell
Type for each cell's content and appearance
Fields:
content (series string)
bgColor (series color)
textColor (series color)
align (series string)
colspan (series int)
rowspan (series int)
JK - Q SuiteThis indicator is primarily for identifying pauses in Stage 2 uptrends, modelled on Qullamaggie's style of trading, but fits well with many traders including William O' Neil. or Mark Minervini.
I built this for my own purposes, and have gradually added range of tools into a single suite. My goal has also to be as clean as possible, while providing clear, actionable information.
This suite includes all of the following:
Moving averages (10, 20, 50, 200)
Coloured bars showing tightening price (blue under 75% of ADR, orange under 50% of ADR)
A 'markets' dashboard (top-right), showing the major indexes. Red if 10<20MA, or price <20MA
A 'sectors' dashboard (top-right, below markets). Red if 5<10MA, or price <10MA - see note below
Strength / Weakness information - two cells at the top, bottom-right. See below
Stock information - glanceable stock info as quick filters. The thresholds for ADR, Average volume, and Dollar Volume can be customised.
NOTE - if the 'tightening coloured candles' are not showing, the indicator needs to be at the top of the stack. Click the triple squares at the very bottom-right of the TradingView interface, and drag the indicator to the top, should work then!
=============
Sectors
These are based on the 11 official Sectors, tracked using index funds (XLY, XLK etc). HOWEVER, TradingView does NOT use the official 11 sectors - therefore I've done my best to match TradingViews ones to the official ones, but doesn't always work... e.g. 'Electronic Technology' is typically semiconductors, which are classes as 'Industrials', but Apple is the same sector in TV, but classed as 'Technology' using the official 11 Sectors.
If TradingView move to use the official 11 I'll update this, but for now it's a best guess and will sometimes be wrong, sorry!
Strength / Weakness information
This was an experiment in trying not to give too much back to the market! Typically the strategy would be to sell if price closes below 10MA (Weakness), however there may be large pops that can be advantageous to sell into.
The 'Strength' information (top cell, bottom-right), checks how far the price is extended above 10MA - this is customisable as a multiple of ADR. You may find that in weak markets (like now), it can be best to take profits quickly - in good markets, you could increase this as stocks make bigger or more sustained moves.
=============
While I'm not the best coder - and I've hacked and tried and changed different things - this has been a labour of love and essential for me.
If you have any suggestions, while I may or may not be able to implement them, I'm certainly open to ideas!
Multiple Percentile Ranks (up to 5 sources at a time)This indicator is a visual percentile rank indicator that can display 1 to 5 sources at one time.
The options:
“Sources”
Choose the number of sources you would like to display. The minimum is 1, the maximum is 5.
“Label percent position”
The label for the current percentage of where the source candle ranks.
“Label position”
This displays the source/s you’ve selected, and the chosen bottom rank % and top rank %.
“Label text size”
Displays the text size of all labels.
“Display current % labels”
Switches the labels on/off only for the current percentage rank of each source.
Source options:
ATR: Average True Range
CCI: Commodity Channel Index
COG: Centre of Gravity
Close: closing price
Close Percent: close percentage from previous close
Dollar Value: volume * (high * low * close / 3)
EOM: Ease of Movement: how much volume it takes to move the price in a certain direction
OBV: On-Balance Volume
RANGE: percentage range of the close price
RSI: Relative Strength Index
RVI: Relative Vigor Index
Time Close: if you select the 1 second timeframe it will provide the gap of time between each 1 second close
Volume: each bar’s volume
Volume (MA): volume moving average
Source # where # is the number of the source. Selects the source you’d like.
Ma Length is the number of previous candles to consider when calculating the moving average of the source. Note, the “MA Length” only applies to sources that have the “(MA)” at the end of their name.
Bottom % is the bottom percentage rank of the source you’ve selected. This is a filter to display the candle line graph in red once the percentage rank is equal to the percentage you’ve chosen or below.
Top % is the top percentage rank of the source you’ve selected. This is a filter to display the candle line graph in green once the percentage rank is equal to the percentage you’ve chosen or higher.
A simple example of how to use the indicator:
Select the dropdown menu for source 1 and select volume.
As the candles populate, it will look at previous candles and assign a percentage rank of where the candles are in relation to previous candles.
*Note, the way Tradingview works is it will populate the first candle the chart was active, and continue on. So, let’s say the 3rd candle was the highest volume day. This candle will show up as 100%. If the next day, the 4th candle has an even higher volume, it will show up as 100% also, the previous candles won’t “repaint” to other values and are instead set based on when they were confirmed. So, this indicator works best when there are a lot of previous candles to compare itself to.
To use the bottom % rank filter enter a percentage such as 5%. As it comes across a candle that is 5% or less compared to previous volume candles, then the line graph will shade in red.
The same can be said for the top % rank. So, if you want to see the line graph change to green when it comes across the top 99th percentile rank of volume bars, then set the top % rank to 1% and it will give you extremely high-volume bars in green instead of blue.
Developing Market Profile / TPO [Honestcowboy]The Developing Market Profile Indicator aims to broaden the horizon of Market Profile / TPO research and trading. While standard Market Profiles aim is to show where PRICE is in relation to TIME on a previous session (usually a day). Developing Market Profile will change bar by bar and display PRICE in relation to TIME for a user specified number of past bars.
What is a market profile?
"Market Profile is an intra-day charting technique (price vertical, time/activity horizontal) devised by J. Peter Steidlmayer. Steidlmayer was seeking a way to determine and to evaluate market value as it developed in the day time frame. The concept was to display price on a vertical axis against time on the horizontal, and the ensuing graphic generally is a bell shape--fatter at the middle prices, with activity trailing off and volume diminished at the extreme higher and lower prices."
For education on market profiles I recommend you search the net and study some profitable traders who use it.
Key Differences
Does not have a value area but distinguishes each column in relation to the biggest column in percentage terms.
Updates bar by bar
Does not take sessions into account
Shows historical values for each bar
While there is an entire education system build around Market Profiles they usually focus on a daily profile and in some cases how the value area develops during the day (there are indicators showing the developing value area).
The idea of trading based on a developing value area is what inspired me to build the Developing Market Profile.
🟦 CALCULATION
Think of this Developing Market Profile the same way as you would think of a moving average. On each bar it will lookback 200 bars (or as user specified) and calculate a Market Profile from those bars (range).
🔹Market Profile gets calculated using these steps:
Get the highest high and lowest low of the price range.
Separate that range into user specified amount of price zones (all spaced evenly)
Loop through the ranges bars and on each bar check in which price zones price was, then add +1 to the zones price was in (we do this using the OccurenceArray)
After it looped through all bars in the range it will draw columns for each price zone (using boxes) and make them as wide as the OccurenceArray dictates in number of bars
🔹Coloring each column:
The script will find the biggest column in the Profile and use that as a reference for all other columns. It will then decide for each column individually how big it is in % compared to the biggest column. It will use that percentage to decide which color to give it, top 20% will be red, top 40% purple, top 60% blue, top 80% green and all the rest yellow. The user is able to adjust these numbers for further customisation.
The historical display of the profiles uses plotchar() and will not only use the color of the column at that time but the % rating will also decide transparancy for further detail when analysing how the profiles developed over time. Each of those historical profiles is calculated using its own 200 past bars. This makes the script very heavy and that is why it includes optimisation settings, more info below.
🟦 USAGE
My general idea of the markets is that they are ever changing and that in studying that changing behaviour a good trader is able to distinguish new behaviour from old behaviour and adapt his approach before losing traders "weak hands" do.
A Market Profile can visually show a trader what kind of market environment we currently are in. In training this visual feedback helps traders remember past market environments and how the market behaved during these times.
Use the history shown using plotchars in colors to get an idea of how the Market Profile looked at each bar of the chart.
This history will help in studying how price moves at different stages of the Market Profile development.
I'm in no way an expert in trading Market Profiles so take this information with a grain of salt. Below an idea of how I would trade using this indicator:
🟦 SETTINGS
🔹MARKET PROFILING
Lookback: The amount of bars the Market Profile will look in the past to calculate where price has been the most in that range
Resolution: This is the amount of columns the Market Profile will have. These columns are calculated using the highest and lowest point price has been for the lookback period
Resolution is limited to a maximum of 32 because of pinescript plotting limits (64). Each plotchar() because of using variable colors takes up 2 of these slots
🔹VISUAL SETTINGS
Profile Distance From Chart: The amount of bars the market profile will be offset from the current bar
Border width (MP): The line thickness of the Market Profile column borders
Character: This is the character the history will use to show past profiles, default is a square.
Color theme: You can pick 5 colors from biggest column of the Profile to smallest column of the profile.
Numbers: these are for % to decide column color. So on default top 20% will be red, top 40% purple... Always use these in descending order
Show Market Profile: This setting will enable/disable the current Market Profile (columns on right side of current bar)
Show Profile History: This setting will enable/disable the Profile History which are the colored characters you see on each bar
🔹OPTIMISATION AND DEBUGGING
Calculate from here: The Market Profile will only start to calculate bar by bar from this point. Setting is needed to optimise loading time and quite frankly without it the script would probably exceed tradingview loading time limits.
Min Size: This setting is there to avoid visual bugs in the script. Scaling the chart there can be issues where the Market Profile extends all the way to 0. To avoid this use a minimum size bigger than the bugged bottom box
Goertzel Cycle Composite Wave [Loxx]As the financial markets become increasingly complex and data-driven, traders and analysts must leverage powerful tools to gain insights and make informed decisions. One such tool is the Goertzel Cycle Composite Wave indicator, a sophisticated technical analysis indicator that helps identify cyclical patterns in financial data. This powerful tool is capable of detecting cyclical patterns in financial data, helping traders to make better predictions and optimize their trading strategies. With its unique combination of mathematical algorithms and advanced charting capabilities, this indicator has the potential to revolutionize the way we approach financial modeling and trading.
*** To decrease the load time of this indicator, only XX many bars back will render to the chart. You can control this value with the setting "Number of Bars to Render". This doesn't have anything to do with repainting or the indicator being endpointed***
█ Brief Overview of the Goertzel Cycle Composite Wave
The Goertzel Cycle Composite Wave is a sophisticated technical analysis tool that utilizes the Goertzel algorithm to analyze and visualize cyclical components within a financial time series. By identifying these cycles and their characteristics, the indicator aims to provide valuable insights into the market's underlying price movements, which could potentially be used for making informed trading decisions.
The Goertzel Cycle Composite Wave is considered a non-repainting and endpointed indicator. This means that once a value has been calculated for a specific bar, that value will not change in subsequent bars, and the indicator is designed to have a clear start and end point. This is an important characteristic for indicators used in technical analysis, as it allows traders to make informed decisions based on historical data without the risk of hindsight bias or future changes in the indicator's values. This means traders can use this indicator trading purposes.
The repainting version of this indicator with forecasting, cycle selection/elimination options, and data output table can be found here:
Goertzel Browser
The primary purpose of this indicator is to:
1. Detect and analyze the dominant cycles present in the price data.
2. Reconstruct and visualize the composite wave based on the detected cycles.
To achieve this, the indicator performs several tasks:
1. Detrending the price data: The indicator preprocesses the price data using various detrending techniques, such as Hodrick-Prescott filters, zero-lag moving averages, and linear regression, to remove the underlying trend and focus on the cyclical components.
2. Applying the Goertzel algorithm: The indicator applies the Goertzel algorithm to the detrended price data, identifying the dominant cycles and their characteristics, such as amplitude, phase, and cycle strength.
3. Constructing the composite wave: The indicator reconstructs the composite wave by combining the detected cycles, either by using a user-defined list of cycles or by selecting the top N cycles based on their amplitude or cycle strength.
4. Visualizing the composite wave: The indicator plots the composite wave, using solid lines for the cycles. The color of the lines indicates whether the wave is increasing or decreasing.
This indicator is a powerful tool that employs the Goertzel algorithm to analyze and visualize the cyclical components within a financial time series. By providing insights into the underlying price movements, the indicator aims to assist traders in making more informed decisions.
█ What is the Goertzel Algorithm?
The Goertzel algorithm, named after Gerald Goertzel, is a digital signal processing technique that is used to efficiently compute individual terms of the Discrete Fourier Transform (DFT). It was first introduced in 1958, and since then, it has found various applications in the fields of engineering, mathematics, and physics.
The Goertzel algorithm is primarily used to detect specific frequency components within a digital signal, making it particularly useful in applications where only a few frequency components are of interest. The algorithm is computationally efficient, as it requires fewer calculations than the Fast Fourier Transform (FFT) when detecting a small number of frequency components. This efficiency makes the Goertzel algorithm a popular choice in applications such as:
1. Telecommunications: The Goertzel algorithm is used for decoding Dual-Tone Multi-Frequency (DTMF) signals, which are the tones generated when pressing buttons on a telephone keypad. By identifying specific frequency components, the algorithm can accurately determine which button has been pressed.
2. Audio processing: The algorithm can be used to detect specific pitches or harmonics in an audio signal, making it useful in applications like pitch detection and tuning musical instruments.
3. Vibration analysis: In the field of mechanical engineering, the Goertzel algorithm can be applied to analyze vibrations in rotating machinery, helping to identify faulty components or signs of wear.
4. Power system analysis: The algorithm can be used to measure harmonic content in power systems, allowing engineers to assess power quality and detect potential issues.
The Goertzel algorithm is used in these applications because it offers several advantages over other methods, such as the FFT:
1. Computational efficiency: The Goertzel algorithm requires fewer calculations when detecting a small number of frequency components, making it more computationally efficient than the FFT in these cases.
2. Real-time analysis: The algorithm can be implemented in a streaming fashion, allowing for real-time analysis of signals, which is crucial in applications like telecommunications and audio processing.
3. Memory efficiency: The Goertzel algorithm requires less memory than the FFT, as it only computes the frequency components of interest.
4. Precision: The algorithm is less susceptible to numerical errors compared to the FFT, ensuring more accurate results in applications where precision is essential.
The Goertzel algorithm is an efficient digital signal processing technique that is primarily used to detect specific frequency components within a signal. Its computational efficiency, real-time capabilities, and precision make it an attractive choice for various applications, including telecommunications, audio processing, vibration analysis, and power system analysis. The algorithm has been widely adopted since its introduction in 1958 and continues to be an essential tool in the fields of engineering, mathematics, and physics.
█ Goertzel Algorithm in Quantitative Finance: In-Depth Analysis and Applications
The Goertzel algorithm, initially designed for signal processing in telecommunications, has gained significant traction in the financial industry due to its efficient frequency detection capabilities. In quantitative finance, the Goertzel algorithm has been utilized for uncovering hidden market cycles, developing data-driven trading strategies, and optimizing risk management. This section delves deeper into the applications of the Goertzel algorithm in finance, particularly within the context of quantitative trading and analysis.
Unveiling Hidden Market Cycles:
Market cycles are prevalent in financial markets and arise from various factors, such as economic conditions, investor psychology, and market participant behavior. The Goertzel algorithm's ability to detect and isolate specific frequencies in price data helps trader analysts identify hidden market cycles that may otherwise go unnoticed. By examining the amplitude, phase, and periodicity of each cycle, traders can better understand the underlying market structure and dynamics, enabling them to develop more informed and effective trading strategies.
Developing Quantitative Trading Strategies:
The Goertzel algorithm's versatility allows traders to incorporate its insights into a wide range of trading strategies. By identifying the dominant market cycles in a financial instrument's price data, traders can create data-driven strategies that capitalize on the cyclical nature of markets.
For instance, a trader may develop a mean-reversion strategy that takes advantage of the identified cycles. By establishing positions when the price deviates from the predicted cycle, the trader can profit from the subsequent reversion to the cycle's mean. Similarly, a momentum-based strategy could be designed to exploit the persistence of a dominant cycle by entering positions that align with the cycle's direction.
Enhancing Risk Management:
The Goertzel algorithm plays a vital role in risk management for quantitative strategies. By analyzing the cyclical components of a financial instrument's price data, traders can gain insights into the potential risks associated with their trading strategies.
By monitoring the amplitude and phase of dominant cycles, a trader can detect changes in market dynamics that may pose risks to their positions. For example, a sudden increase in amplitude may indicate heightened volatility, prompting the trader to adjust position sizing or employ hedging techniques to protect their portfolio. Additionally, changes in phase alignment could signal a potential shift in market sentiment, necessitating adjustments to the trading strategy.
Expanding Quantitative Toolkits:
Traders can augment the Goertzel algorithm's insights by combining it with other quantitative techniques, creating a more comprehensive and sophisticated analysis framework. For example, machine learning algorithms, such as neural networks or support vector machines, could be trained on features extracted from the Goertzel algorithm to predict future price movements more accurately.
Furthermore, the Goertzel algorithm can be integrated with other technical analysis tools, such as moving averages or oscillators, to enhance their effectiveness. By applying these tools to the identified cycles, traders can generate more robust and reliable trading signals.
The Goertzel algorithm offers invaluable benefits to quantitative finance practitioners by uncovering hidden market cycles, aiding in the development of data-driven trading strategies, and improving risk management. By leveraging the insights provided by the Goertzel algorithm and integrating it with other quantitative techniques, traders can gain a deeper understanding of market dynamics and devise more effective trading strategies.
█ Indicator Inputs
src: This is the source data for the analysis, typically the closing price of the financial instrument.
detrendornot: This input determines the method used for detrending the source data. Detrending is the process of removing the underlying trend from the data to focus on the cyclical components.
The available options are:
hpsmthdt: Detrend using Hodrick-Prescott filter centered moving average.
zlagsmthdt: Detrend using zero-lag moving average centered moving average.
logZlagRegression: Detrend using logarithmic zero-lag linear regression.
hpsmth: Detrend using Hodrick-Prescott filter.
zlagsmth: Detrend using zero-lag moving average.
DT_HPper1 and DT_HPper2: These inputs define the period range for the Hodrick-Prescott filter centered moving average when detrendornot is set to hpsmthdt.
DT_ZLper1 and DT_ZLper2: These inputs define the period range for the zero-lag moving average centered moving average when detrendornot is set to zlagsmthdt.
DT_RegZLsmoothPer: This input defines the period for the zero-lag moving average used in logarithmic zero-lag linear regression when detrendornot is set to logZlagRegression.
HPsmoothPer: This input defines the period for the Hodrick-Prescott filter when detrendornot is set to hpsmth.
ZLMAsmoothPer: This input defines the period for the zero-lag moving average when detrendornot is set to zlagsmth.
MaxPer: This input sets the maximum period for the Goertzel algorithm to search for cycles.
squaredAmp: This boolean input determines whether the amplitude should be squared in the Goertzel algorithm.
useAddition: This boolean input determines whether the Goertzel algorithm should use addition for combining the cycles.
useCosine: This boolean input determines whether the Goertzel algorithm should use cosine waves instead of sine waves.
UseCycleStrength: This boolean input determines whether the Goertzel algorithm should compute the cycle strength, which is a normalized measure of the cycle's amplitude.
WindowSizePast: These inputs define the window size for the composite wave.
FilterBartels: This boolean input determines whether Bartel's test should be applied to filter out non-significant cycles.
BartNoCycles: This input sets the number of cycles to be used in Bartel's test.
BartSmoothPer: This input sets the period for the moving average used in Bartel's test.
BartSigLimit: This input sets the significance limit for Bartel's test, below which cycles are considered insignificant.
SortBartels: This boolean input determines whether the cycles should be sorted by their Bartel's test results.
StartAtCycle: This input determines the starting index for selecting the top N cycles when UseCycleList is set to false. This allows you to skip a certain number of cycles from the top before selecting the desired number of cycles.
UseTopCycles: This input sets the number of top cycles to use for constructing the composite wave when UseCycleList is set to false. The cycles are ranked based on their amplitudes or cycle strengths, depending on the UseCycleStrength input.
SubtractNoise: This boolean input determines whether to subtract the noise (remaining cycles) from the composite wave. If set to true, the composite wave will only include the top N cycles specified by UseTopCycles.
█ Exploring Auxiliary Functions
The following functions demonstrate advanced techniques for analyzing financial markets, including zero-lag moving averages, Bartels probability, detrending, and Hodrick-Prescott filtering. This section examines each function in detail, explaining their purpose, methodology, and applications in finance. We will examine how each function contributes to the overall performance and effectiveness of the indicator and how they work together to create a powerful analytical tool.
Zero-Lag Moving Average:
The zero-lag moving average function is designed to minimize the lag typically associated with moving averages. This is achieved through a two-step weighted linear regression process that emphasizes more recent data points. The function calculates a linearly weighted moving average (LWMA) on the input data and then applies another LWMA on the result. By doing this, the function creates a moving average that closely follows the price action, reducing the lag and improving the responsiveness of the indicator.
The zero-lag moving average function is used in the indicator to provide a responsive, low-lag smoothing of the input data. This function helps reduce the noise and fluctuations in the data, making it easier to identify and analyze underlying trends and patterns. By minimizing the lag associated with traditional moving averages, this function allows the indicator to react more quickly to changes in market conditions, providing timely signals and improving the overall effectiveness of the indicator.
Bartels Probability:
The Bartels probability function calculates the probability of a given cycle being significant in a time series. It uses a mathematical test called the Bartels test to assess the significance of cycles detected in the data. The function calculates coefficients for each detected cycle and computes an average amplitude and an expected amplitude. By comparing these values, the Bartels probability is derived, indicating the likelihood of a cycle's significance. This information can help in identifying and analyzing dominant cycles in financial markets.
The Bartels probability function is incorporated into the indicator to assess the significance of detected cycles in the input data. By calculating the Bartels probability for each cycle, the indicator can prioritize the most significant cycles and focus on the market dynamics that are most relevant to the current trading environment. This function enhances the indicator's ability to identify dominant market cycles, improving its predictive power and aiding in the development of effective trading strategies.
Detrend Logarithmic Zero-Lag Regression:
The detrend logarithmic zero-lag regression function is used for detrending data while minimizing lag. It combines a zero-lag moving average with a linear regression detrending method. The function first calculates the zero-lag moving average of the logarithm of input data and then applies a linear regression to remove the trend. By detrending the data, the function isolates the cyclical components, making it easier to analyze and interpret the underlying market dynamics.
The detrend logarithmic zero-lag regression function is used in the indicator to isolate the cyclical components of the input data. By detrending the data, the function enables the indicator to focus on the cyclical movements in the market, making it easier to analyze and interpret market dynamics. This function is essential for identifying cyclical patterns and understanding the interactions between different market cycles, which can inform trading decisions and enhance overall market understanding.
Bartels Cycle Significance Test:
The Bartels cycle significance test is a function that combines the Bartels probability function and the detrend logarithmic zero-lag regression function to assess the significance of detected cycles. The function calculates the Bartels probability for each cycle and stores the results in an array. By analyzing the probability values, traders and analysts can identify the most significant cycles in the data, which can be used to develop trading strategies and improve market understanding.
The Bartels cycle significance test function is integrated into the indicator to provide a comprehensive analysis of the significance of detected cycles. By combining the Bartels probability function and the detrend logarithmic zero-lag regression function, this test evaluates the significance of each cycle and stores the results in an array. The indicator can then use this information to prioritize the most significant cycles and focus on the most relevant market dynamics. This function enhances the indicator's ability to identify and analyze dominant market cycles, providing valuable insights for trading and market analysis.
Hodrick-Prescott Filter:
The Hodrick-Prescott filter is a popular technique used to separate the trend and cyclical components of a time series. The function applies a smoothing parameter to the input data and calculates a smoothed series using a two-sided filter. This smoothed series represents the trend component, which can be subtracted from the original data to obtain the cyclical component. The Hodrick-Prescott filter is commonly used in economics and finance to analyze economic data and financial market trends.
The Hodrick-Prescott filter is incorporated into the indicator to separate the trend and cyclical components of the input data. By applying the filter to the data, the indicator can isolate the trend component, which can be used to analyze long-term market trends and inform trading decisions. Additionally, the cyclical component can be used to identify shorter-term market dynamics and provide insights into potential trading opportunities. The inclusion of the Hodrick-Prescott filter adds another layer of analysis to the indicator, making it more versatile and comprehensive.
Detrending Options: Detrend Centered Moving Average:
The detrend centered moving average function provides different detrending methods, including the Hodrick-Prescott filter and the zero-lag moving average, based on the selected detrending method. The function calculates two sets of smoothed values using the chosen method and subtracts one set from the other to obtain a detrended series. By offering multiple detrending options, this function allows traders and analysts to select the most appropriate method for their specific needs and preferences.
The detrend centered moving average function is integrated into the indicator to provide users with multiple detrending options, including the Hodrick-Prescott filter and the zero-lag moving average. By offering multiple detrending methods, the indicator allows users to customize the analysis to their specific needs and preferences, enhancing the indicator's overall utility and adaptability. This function ensures that the indicator can cater to a wide range of trading styles and objectives, making it a valuable tool for a diverse group of market participants.
The auxiliary functions functions discussed in this section demonstrate the power and versatility of mathematical techniques in analyzing financial markets. By understanding and implementing these functions, traders and analysts can gain valuable insights into market dynamics, improve their trading strategies, and make more informed decisions. The combination of zero-lag moving averages, Bartels probability, detrending methods, and the Hodrick-Prescott filter provides a comprehensive toolkit for analyzing and interpreting financial data. The integration of advanced functions in a financial indicator creates a powerful and versatile analytical tool that can provide valuable insights into financial markets. By combining the zero-lag moving average,
█ In-Depth Analysis of the Goertzel Cycle Composite Wave Code
The Goertzel Cycle Composite Wave code is an implementation of the Goertzel Algorithm, an efficient technique to perform spectral analysis on a signal. The code is designed to detect and analyze dominant cycles within a given financial market data set. This section will provide an extremely detailed explanation of the code, its structure, functions, and intended purpose.
Function signature and input parameters:
The Goertzel Cycle Composite Wave function accepts numerous input parameters for customization, including source data (src), the current bar (forBar), sample size (samplesize), period (per), squared amplitude flag (squaredAmp), addition flag (useAddition), cosine flag (useCosine), cycle strength flag (UseCycleStrength), past sizes (WindowSizePast), Bartels filter flag (FilterBartels), Bartels-related parameters (BartNoCycles, BartSmoothPer, BartSigLimit), sorting flag (SortBartels), and output buffers (goeWorkPast, cyclebuffer, amplitudebuffer, phasebuffer, cycleBartelsBuffer).
Initializing variables and arrays:
The code initializes several float arrays (goeWork1, goeWork2, goeWork3, goeWork4) with the same length as twice the period (2 * per). These arrays store intermediate results during the execution of the algorithm.
Preprocessing input data:
The input data (src) undergoes preprocessing to remove linear trends. This step enhances the algorithm's ability to focus on cyclical components in the data. The linear trend is calculated by finding the slope between the first and last values of the input data within the sample.
Iterative calculation of Goertzel coefficients:
The core of the Goertzel Cycle Composite Wave algorithm lies in the iterative calculation of Goertzel coefficients for each frequency bin. These coefficients represent the spectral content of the input data at different frequencies. The code iterates through the range of frequencies, calculating the Goertzel coefficients using a nested loop structure.
Cycle strength computation:
The code calculates the cycle strength based on the Goertzel coefficients. This is an optional step, controlled by the UseCycleStrength flag. The cycle strength provides information on the relative influence of each cycle on the data per bar, considering both amplitude and cycle length. The algorithm computes the cycle strength either by squaring the amplitude (controlled by squaredAmp flag) or using the actual amplitude values.
Phase calculation:
The Goertzel Cycle Composite Wave code computes the phase of each cycle, which represents the position of the cycle within the input data. The phase is calculated using the arctangent function (math.atan) based on the ratio of the imaginary and real components of the Goertzel coefficients.
Peak detection and cycle extraction:
The algorithm performs peak detection on the computed amplitudes or cycle strengths to identify dominant cycles. It stores the detected cycles in the cyclebuffer array, along with their corresponding amplitudes and phases in the amplitudebuffer and phasebuffer arrays, respectively.
Sorting cycles by amplitude or cycle strength:
The code sorts the detected cycles based on their amplitude or cycle strength in descending order. This allows the algorithm to prioritize cycles with the most significant impact on the input data.
Bartels cycle significance test:
If the FilterBartels flag is set, the code performs a Bartels cycle significance test on the detected cycles. This test determines the statistical significance of each cycle and filters out the insignificant cycles. The significant cycles are stored in the cycleBartelsBuffer array. If the SortBartels flag is set, the code sorts the significant cycles based on their Bartels significance values.
Waveform calculation:
The Goertzel Cycle Composite Wave code calculates the waveform of the significant cycles for specified time windows. The windows are defined by the WindowSizePast parameters, respectively. The algorithm uses either cosine or sine functions (controlled by the useCosine flag) to calculate the waveforms for each cycle. The useAddition flag determines whether the waveforms should be added or subtracted.
Storing waveforms in a matrix:
The calculated waveforms for the cycle is stored in the matrix - goeWorkPast. This matrix holds the waveforms for the specified time windows. Each row in the matrix represents a time window position, and each column corresponds to a cycle.
Returning the number of cycles:
The Goertzel Cycle Composite Wave function returns the total number of detected cycles (number_of_cycles) after processing the input data. This information can be used to further analyze the results or to visualize the detected cycles.
The Goertzel Cycle Composite Wave code is a comprehensive implementation of the Goertzel Algorithm, specifically designed for detecting and analyzing dominant cycles within financial market data. The code offers a high level of customization, allowing users to fine-tune the algorithm based on their specific needs. The Goertzel Cycle Composite Wave's combination of preprocessing, iterative calculations, cycle extraction, sorting, significance testing, and waveform calculation makes it a powerful tool for understanding cyclical components in financial data.
█ Generating and Visualizing Composite Waveform
The indicator calculates and visualizes the composite waveform for specified time windows based on the detected cycles. Here's a detailed explanation of this process:
Updating WindowSizePast:
The WindowSizePast is updated to ensure they are at least twice the MaxPer (maximum period).
Initializing matrices and arrays:
The matrix goeWorkPast is initialized to store the Goertzel results for specified time windows. Multiple arrays are also initialized to store cycle, amplitude, phase, and Bartels information.
Preparing the source data (srcVal) array:
The source data is copied into an array, srcVal, and detrended using one of the selected methods (hpsmthdt, zlagsmthdt, logZlagRegression, hpsmth, or zlagsmth).
Goertzel function call:
The Goertzel function is called to analyze the detrended source data and extract cycle information. The output, number_of_cycles, contains the number of detected cycles.
Initializing arrays for waveforms:
The goertzel array is initialized to store the endpoint Goertzel.
Calculating composite waveform (goertzel array):
The composite waveform is calculated by summing the selected cycles (either from the user-defined cycle list or the top cycles) and optionally subtracting the noise component.
Drawing composite waveform (pvlines):
The composite waveform is drawn on the chart using solid lines. The color of the lines is determined by the direction of the waveform (green for upward, red for downward).
To summarize, this indicator generates a composite waveform based on the detected cycles in the financial data. It calculates the composite waveforms and visualizes them on the chart using colored lines.
█ Enhancing the Goertzel Algorithm-Based Script for Financial Modeling and Trading
The Goertzel algorithm-based script for detecting dominant cycles in financial data is a powerful tool for financial modeling and trading. It provides valuable insights into the past behavior of these cycles. However, as with any algorithm, there is always room for improvement. This section discusses potential enhancements to the existing script to make it even more robust and versatile for financial modeling, general trading, advanced trading, and high-frequency finance trading.
Enhancements for Financial Modeling
Data preprocessing: One way to improve the script's performance for financial modeling is to introduce more advanced data preprocessing techniques. This could include removing outliers, handling missing data, and normalizing the data to ensure consistent and accurate results.
Additional detrending and smoothing methods: Incorporating more sophisticated detrending and smoothing techniques, such as wavelet transform or empirical mode decomposition, can help improve the script's ability to accurately identify cycles and trends in the data.
Machine learning integration: Integrating machine learning techniques, such as artificial neural networks or support vector machines, can help enhance the script's predictive capabilities, leading to more accurate financial models.
Enhancements for General and Advanced Trading
Customizable indicator integration: Allowing users to integrate their own technical indicators can help improve the script's effectiveness for both general and advanced trading. By enabling the combination of the dominant cycle information with other technical analysis tools, traders can develop more comprehensive trading strategies.
Risk management and position sizing: Incorporating risk management and position sizing functionality into the script can help traders better manage their trades and control potential losses. This can be achieved by calculating the optimal position size based on the user's risk tolerance and account size.
Multi-timeframe analysis: Enhancing the script to perform multi-timeframe analysis can provide traders with a more holistic view of market trends and cycles. By identifying dominant cycles on different timeframes, traders can gain insights into the potential confluence of cycles and make better-informed trading decisions.
Enhancements for High-Frequency Finance Trading
Algorithm optimization: To ensure the script's suitability for high-frequency finance trading, optimizing the algorithm for faster execution is crucial. This can be achieved by employing efficient data structures and refining the calculation methods to minimize computational complexity.
Real-time data streaming: Integrating real-time data streaming capabilities into the script can help high-frequency traders react to market changes more quickly. By continuously updating the cycle information based on real-time market data, traders can adapt their strategies accordingly and capitalize on short-term market fluctuations.
Order execution and trade management: To fully leverage the script's capabilities for high-frequency trading, implementing functionality for automated order execution and trade management is essential. This can include features such as stop-loss and take-profit orders, trailing stops, and automated trade exit strategies.
While the existing Goertzel algorithm-based script is a valuable tool for detecting dominant cycles in financial data, there are several potential enhancements that can make it even more powerful for financial modeling, general trading, advanced trading, and high-frequency finance trading. By incorporating these improvements, the script can become a more versatile and effective tool for traders and financial analysts alike.
█ Understanding the Limitations of the Goertzel Algorithm
While the Goertzel algorithm-based script for detecting dominant cycles in financial data provides valuable insights, it is important to be aware of its limitations and drawbacks. Some of the key drawbacks of this indicator are:
Lagging nature:
As with many other technical indicators, the Goertzel algorithm-based script can suffer from lagging effects, meaning that it may not immediately react to real-time market changes. This lag can lead to late entries and exits, potentially resulting in reduced profitability or increased losses.
Parameter sensitivity:
The performance of the script can be sensitive to the chosen parameters, such as the detrending methods, smoothing techniques, and cycle detection settings. Improper parameter selection may lead to inaccurate cycle detection or increased false signals, which can negatively impact trading performance.
Complexity:
The Goertzel algorithm itself is relatively complex, making it difficult for novice traders or those unfamiliar with the concept of cycle analysis to fully understand and effectively utilize the script. This complexity can also make it challenging to optimize the script for specific trading styles or market conditions.
Overfitting risk:
As with any data-driven approach, there is a risk of overfitting when using the Goertzel algorithm-based script. Overfitting occurs when a model becomes too specific to the historical data it was trained on, leading to poor performance on new, unseen data. This can result in misleading signals and reduced trading performance.
Limited applicability:
The Goertzel algorithm-based script may not be suitable for all markets, trading styles, or timeframes. Its effectiveness in detecting cycles may be limited in certain market conditions, such as during periods of extreme volatility or low liquidity.
While the Goertzel algorithm-based script offers valuable insights into dominant cycles in financial data, it is essential to consider its drawbacks and limitations when incorporating it into a trading strategy. Traders should always use the script in conjunction with other technical and fundamental analysis tools, as well as proper risk management, to make well-informed trading decisions.
█ Interpreting Results
The Goertzel Cycle Composite Wave indicator can be interpreted by analyzing the plotted lines. The indicator plots two lines: composite waves. The composite wave represents the composite wave of the price data.
The composite wave line displays a solid line, with green indicating a bullish trend and red indicating a bearish trend.
Interpreting the Goertzel Cycle Composite Wave indicator involves identifying the trend of the composite wave lines and matching them with the corresponding bullish or bearish color.
█ Conclusion
The Goertzel Cycle Composite Wave indicator is a powerful tool for identifying and analyzing cyclical patterns in financial markets. Its ability to detect multiple cycles of varying frequencies and strengths make it a valuable addition to any trader's technical analysis toolkit. However, it is important to keep in mind that the Goertzel Cycle Composite Wave indicator should be used in conjunction with other technical analysis tools and fundamental analysis to achieve the best results. With continued refinement and development, the Goertzel Cycle Composite Wave indicator has the potential to become a highly effective tool for financial modeling, general trading, advanced trading, and high-frequency finance trading. Its accuracy and versatility make it a promising candidate for further research and development.
█ Footnotes
What is the Bartels Test for Cycle Significance?
The Bartels Cycle Significance Test is a statistical method that determines whether the peaks and troughs of a time series are statistically significant. The test is named after its inventor, George Bartels, who developed it in the mid-20th century.
The Bartels test is designed to analyze the cyclical components of a time series, which can help traders and analysts identify trends and cycles in financial markets. The test calculates a Bartels statistic, which measures the degree of non-randomness or autocorrelation in the time series.
The Bartels statistic is calculated by first splitting the time series into two halves and calculating the range of the peaks and troughs in each half. The test then compares these ranges using a t-test, which measures the significance of the difference between the two ranges.
If the Bartels statistic is greater than a critical value, it indicates that the peaks and troughs in the time series are non-random and that there is a significant cyclical component to the data. Conversely, if the Bartels statistic is less than the critical value, it suggests that the peaks and troughs are random and that there is no significant cyclical component.
The Bartels Cycle Significance Test is particularly useful in financial analysis because it can help traders and analysts identify significant cycles in asset prices, which can in turn inform investment decisions. However, it is important to note that the test is not perfect and can produce false signals in certain situations, particularly in noisy or volatile markets. Therefore, it is always recommended to use the test in conjunction with other technical and fundamental indicators to confirm trends and cycles.
Deep-dive into the Hodrick-Prescott Fitler
The Hodrick-Prescott (HP) filter is a statistical tool used in economics and finance to separate a time series into two components: a trend component and a cyclical component. It is a powerful tool for identifying long-term trends in economic and financial data and is widely used by economists, central banks, and financial institutions around the world.
The HP filter was first introduced in the 1990s by economists Robert Hodrick and Edward Prescott. It is a simple, two-parameter filter that separates a time series into a trend component and a cyclical component. The trend component represents the long-term behavior of the data, while the cyclical component captures the shorter-term fluctuations around the trend.
The HP filter works by minimizing the following objective function:
Minimize: (Sum of Squared Deviations) + λ (Sum of Squared Second Differences)
Where:
1. The first term represents the deviation of the data from the trend.
2. The second term represents the smoothness of the trend.
3. λ is a smoothing parameter that determines the degree of smoothness of the trend.
The smoothing parameter λ is typically set to a value between 100 and 1600, depending on the frequency of the data. Higher values of λ lead to a smoother trend, while lower values lead to a more volatile trend.
The HP filter has several advantages over other smoothing techniques. It is a non-parametric method, meaning that it does not make any assumptions about the underlying distribution of the data. It also allows for easy comparison of trends across different time series and can be used with data of any frequency.
However, the HP filter also has some limitations. It assumes that the trend is a smooth function, which may not be the case in some situations. It can also be sensitive to changes in the smoothing parameter λ, which may result in different trends for the same data. Additionally, the filter may produce unrealistic trends for very short time series.
Despite these limitations, the HP filter remains a valuable tool for analyzing economic and financial data. It is widely used by central banks and financial institutions to monitor long-term trends in the economy, and it can be used to identify turning points in the business cycle. The filter can also be used to analyze asset prices, exchange rates, and other financial variables.
The Hodrick-Prescott filter is a powerful tool for analyzing economic and financial data. It separates a time series into a trend component and a cyclical component, allowing for easy identification of long-term trends and turning points in the business cycle. While it has some limitations, it remains a valuable tool for economists, central banks, and financial institutions around the world.
TICK - Custom Tickers [Pt]Traditionally, the TICK index is a technical analysis indicator that shows the difference in the number of stocks that are trading on an uptick vs a downtick in a particular period of time. This indicator allows user to choose up to 40 tickers to calculate TICK.
By default, it uses the SPY Top 40 stocks, but can be changed to any tickers.
There are options to show:
- Top 7 , ie. can be used for just showing TICK for FAANGMT => $FB + $AMZN + $AAPL + $NFLX + $GOOG + $MSFT + $TSLA
- Top 10
- Top 20
- Top 30
- Top 40
Data can be displayed in candle bars, line, or both.
Enjoy~
SessionInBoxesProLibrary "SessionInBoxesPro"
get_time_by_bar(bar_count)
Parameters:
bar_count
get_positions_func(sessiontime_, duration_)
Parameters:
sessiontime_
duration_
get_period(_session, _start, _lookback)
Parameters:
_session
_start
_lookback
is_start(_session)
Parameters:
_session
is_end(_session)
Parameters:
_session
draw_progress(_show, _session, _is_started, _is_ended, _color, _bottom, _delete_history)
Parameters:
_show
_session
_is_started
_is_ended
_color
_bottom
_delete_history
draw_label(_show, _session, _is_started, _color, _top, _bottom, _text, _delete_history, i_label_chg, i_label_size, i_label_position, i_tz, i_label_format_day)
Parameters:
_show
_session
_is_started
_color
_top
_bottom
_text
_delete_history
i_label_chg
i_label_size
i_label_position
i_tz
i_label_format_day
draw_fib(_show, _session, _is_started, _color, _top, _bottom, _level, _width, _style, _is_extend, _delete_history)
Parameters:
_show
_session
_is_started
_color
_top
_bottom
_level
_width
_style
_is_extend
_delete_history
get_op_stricts(_session, _is_started, top, bottom, i_o_minutes)
Parameters:
_session
_is_started
top
bottom
i_o_minutes
draw_op(_show, _session, _is_started, _color, top, bottom, _is_extend, _delete_history, i_o_minutes, i_o_opacity)
Parameters:
_show
_session
_is_started
_color
top
bottom
_is_extend
_delete_history
i_o_minutes
i_o_opacity
get_pm_stricts(_show, _show_pm, tf, ctf, _is_started)
Parameters:
_show
_show_pm
tf
ctf
_is_started
draw_pm(_show, _show_pm, tf, ctf, _is_started, _is_ended, _delete_history, _color)
Parameters:
_show
_show_pm
tf
ctf
_is_started
_is_ended
_delete_history
_color
draw_market(_show, _session, _is_started, _color, btr, _top, _bottom, _extend, _is_extend, _delete_history, i_sess_border_style, i_sess_border_width, i_sess_bgopacity)
Parameters:
_show
_session
_is_started
_color
btr
_top
_bottom
_extend
_is_extend
_delete_history
i_sess_border_style
i_sess_border_width
i_sess_bgopacity
draw(_show, _show_pm, pm_tf, ctf, _session, _color, btr, _label, _extend, _show_fib, _show_op, i_label_chg, i_label_size, i_label_position, i_o_minutes, i_o_opacity, i_sess_border_style, i_sess_border_width, i_sess_bgopacity, i_show_history, i_show_closed, i_label_show, i_f_linewidth, i_f_linestyle, top, bottom, i_tz, i_label_format_day)
Parameters:
_show
_show_pm
pm_tf
ctf
_session
_color
btr
_label
_extend
_show_fib
_show_op
i_label_chg
i_label_size
i_label_position
i_o_minutes
i_o_opacity
i_sess_border_style
i_sess_border_width
i_sess_bgopacity
i_show_history
i_show_closed
i_label_show
i_f_linewidth
i_f_linestyle
top
bottom
i_tz
i_label_format_day
Daily Scalping Moving AveragesThis is a technical analysis study based on the most fit leading indicators for short timeframes like EMA and SMA.
At the same time we have daily channel made from the last 2 weeks of ATR values, which will give us the daily top and bottom expected values(with 80%+ confidence)
We have 3 groups of lengths for short length, medium length and a bigger length.
At the same time we combine it with the daily vwap values .
In the end we are going to have a total of 7 indicators telling us the direction.
The way we can use it :
The max ratings that we can have are +7 for long and -7 for short
In general once we have at least 5 indicators(fast and medium ones) giving us a direction, there is a high chance that we can scalp that trend and then we can exit either when we will be at +7 or close to neutral point
At the same time is very important to be aware of the current position inside of the TOP/BOTTOM channel that we have.
For example lets assume we are at 40k on BTC and our top channel is around 41-42k while the bottom is around 38k. In this case the margin that we have for long is much smaller than for short, so we should be prepared to exit once we reach the top values and from there wait and see if there is a huge continuation or a reversal. If the top channel was hit and the market started the rebounce going downwards and the moving averages confirms it, then we have a huge advantage using the top points as a STOP LOSS and continue the short movements, giving us an amazing risk/reward ratio .
If you have any questions let me know !
[blackcat] L2 Swing Oscillator Swing MeterLevel: 2
Background
Swing trading is a type of trading aimed at making short to medium term profits from a trading pair over a period of a few days to several weeks. Swing traders mainly use technical analysis to look for trading opportunities. In addition to analyzing price trends and patterns, these traders can also use fundamental analysis.
Function
L2 Swing Oscillator Swing Meter is an oscillator based on breakouts. Another important feature of it is the swing meter, which confirms the top or bottom's confidence level with different color candles. The higher of the candles stack up, the higher confidence level is indicated.
Key Signal
absolutebot ---> absolute bottom with very high confidence level
ltbot ---> long term bottom with high confidence level
mtbot ---> middle term bottom with moderate confidence level
stbot ---> short term bottom with low confidence level
absolutetop ---> absolute top with very high confidence level
lttop ---> long term top with high confidence level
mttop ---> middle term top with moderate confidence level
sttop ---> short term top with low confidence level
fastline ---> oscillator fast line
slowline ---> oscillator slow line
Pros and Cons
Pros:
1. reconfigurable swing oscillator based on breakouts
2. swing meter can confirm/validate the bottom and top signal
Cons:
1. not appliable with trading pairs without volume information
2. small time frame may not trigger swing meter function
Remarks
This is a simple but very comprehensive technical indicator
Readme
In real life, I am a prolific inventor. I have successfully applied for more than 60 international and regional patents in the past 12 years. But in the past two years or so, I have tried to transfer my creativity to the development of trading strategies. Tradingview is the ideal platform for me. I am selecting and contributing some of the hundreds of scripts to publish in Tradingview community. Welcome everyone to interact with me to discuss these interesting pine scripts.
The scripts posted are categorized into 5 levels according to my efforts or manhours put into these works.
Level 1 : interesting script snippets or distinctive improvement from classic indicators or strategy. Level 1 scripts can usually appear in more complex indicators as a function module or element.
Level 2 : composite indicator/strategy. By selecting or combining several independent or dependent functions or sub indicators in proper way, the composite script exhibits a resonance phenomenon which can filter out noise or fake trading signal to enhance trading confidence level.
Level 3 : comprehensive indicator/strategy. They are simple trading systems based on my strategies. They are commonly containing several or all of entry signal, close signal, stop loss, take profit, re-entry, risk management, and position sizing techniques. Even some interesting fundamental and mass psychological aspects are incorporated.
Level 4 : script snippets or functions that do not disclose source code. Interesting element that can reveal market laws and work as raw material for indicators and strategies. If you find Level 1~2 scripts are helpful, Level 4 is a private version that took me far more efforts to develop.
Level 5 : indicator/strategy that do not disclose source code. private version of Level 3 script with my accumulated script processing skills or a large number of custom functions. I had a private function library built in past two years. Level 5 scripts use many of them to achieve private trading strategy.
Golden RatioThis is inspired by Philip Swift's Golden Ratio Multiplier research however it uses the 300 DMA to predict the Macro Cycle Top's Price. It still uses the 350 DMA * 2 and 111 DMA to predict the top's date (the two cross).
111 DMA (Orange) crosses the 350 DMA * 2 (Green)= Macro Cycle Top Date
300 DMA * 3 (Red) predicts the Current Macro Cycle Top Price
300 DMA * 5 (Yellow) predicted the 2018 Macro Cycle Top Price
300 DMA * 8 (Blue) predicted the 2014 Macro Cycle Top Price
Bearish Candlestick PatternsDoji
Black Spinning Top
White Spinning Top
Bearish Abandoned Baby
Bearish Advance Block
Bearish Below The Stomach
Bearish Belt Hold
Bearish Breakaway
Bearish Counter Attack Lines
Bearish Dark Cloud Cover
Bearish Deliberation Blok
Bearish Descending Hawk
Bearish Doji Star
Bearish Downside Gap Three Methods
Bearish Downside Tasuki Gap
Bearish Dragonfly Doji
Bearish Engulfing
Bearish Evening Doji Star
Bearish Evening Star
Bearish Falling Three Methods
Bearish Falling Window
Bearish Gravestone Doji
Bearish Hanging Man
Bearish Harami
Bearish Harami Cross
Bearish Hook Reversal
Bearish Identical Three Crows
Bearish In Neck
Bearish Island Reversal
Bearish Kicking
Bearish Ladder Top
Bearish Last Engulfing Top
Bearish Low Price Gapping Play
Bearish Mat Hold
Bearish Matching High
Bearish Meeting Line
Bearish On Neck
Bearish One Black Crow
Bearish Separating Lines
Bearish Shooting Star
Bearish Side by side White Lines
Bearish Three Black Crows
Bearish Three Gap Up
Bearish Three Inside Down
Bearish Three Line Strike
Bearish Three Outside Down
Bearish Three Stars in the North
Bearish Thrusting Line During Dowtrend
Bearish Tower Top
Bearish Tristar
Bearish Tweezers Top
Bearish Two Black Gapping
Bearish Two Crows
Bearish Upside Gap Two Crows
MFI v1.0 Normal and Dinamic (Totals)The normal MFI script use an RSI in the formula so the quantity of movments are not visible, this script allows you to see how much volume is being trade at the moment, so you can detect unusual levels, but you will no be allowed to see the RSI (0-100)* so I suggest to use this script with a normal MFI
Features:
+ Normal MFI length (14)
+ Green bars show the total of money trade of the bars that are going up
+ Red bars show the total of money trade when of the bars that are going down
+ Dinamic calculation (Optional)(Bellow)
Normal MFI use hlc3 ((high+low+close)/3) * (volume) to calculate each bar
The dinamic MFI: (This is an optional feature, if you dont active it you will use the normal MFI calculation)
(The information bellow is experimental and theorical only, you can use it or not in the script with the Dinamic option)
Dinamic MFI divides the bar and volume in three parts.
Volume is corresponding on each part ex. If the bar has not a top or lower wick the 100% of volume is in the middle... ex 2 If the 50% of the bar is a top wick, the 50% of volume is in the top wick
Top wick: Is calculated this way
If the bar is red (high-open)*volume of top wick
or
If the bar is green (high-close)*volume of top wick
Middle: Is calculated this way
If the bar is green (close-open)*volumemiddle
or
If the bar is red (open-close)*volumemiddle
Lower wick
If the bar is red (close-low)*volume of lower wick
or
If the bar is green (open- low)*volume of lower wick
BTC - Satoshis Altcoin Graveyard OVERVIEW
The Satoshi's Altcoin Graveyard (SAG) is a macro-statistical engine designed to solve the problem of Survivorship Bias . It is a well-known phenomenon in the crypto markets that the "Top 10" list is in a constant state of flux. If you look at historical data from CoinMarketCap (CMC) year by year, you will see a revolving door of projects that once seemed "too big to fail" disappearing into obscurity. Meanwhile, Bitcoin has remained the undisputed #1 since inception.
While most traders have a "gut feeling" that Altcoins eventually depreciate against Bitcoin, I believe in measuring it and drawing it on a chart for better visibility. By locking in specific "Cohorts" of market leaders from the past, we can track their inevitable decay through the Satoshi Sieve .
THE 13-COIN STATISTICAL BUCKET
To ensure an objective, non-biased audit, each cohort (we look at 2018, 2020 and 2022) is constructed using a fixed market-cap methodology from the snapshot date (excluding stablecoins):
• The Core: The Top 10 non-stablecoin assets at that time by Marketcap.
• The Risk Alpha: Representative samples from the Top #25, #50, and #100 ranks. (By including lower-ranked "riskier" alts, we capture the full statistical decay of the market, not just the "Blue Chips.")
TECHNICAL ARCHITECTURE
This script is engineered to push the boundaries of the Pine Script engine. TradingView enforces a hard limit of 40 unique data requests . By tracking 3 cohorts of 13 assets plus the Bitcoin base, this indicator utilizes exactly 40/40 requests , providing the maximum possible data density in a single chart window.
THE SPS CONCEPT (Survival Probability Score)
The SPS measures the Breadth of Survival . It answers: "How many coins from this year (the year of the snapshot) are actually outperforming BTC?"
We use a binary logic system to determine if a coin is "Winning" or "Losing" against the only benchmark that matters: Bitcoin.
• The Status Formula: Status = Current_Alt_BTC_Ratio >= Entry_Alt_BTC_Ratio ? 1 : 0 . This means: Every single day, at the Daily Close , the script compares the current Alt/BTC ratio to the fixed ratio from the snapshot date. If the coin is worth more in Bitcoin today than it was back then, it is assigned a "1" (a Win). If it has lost value against Bitcoin, it gets a "0" (a Loss).
• The SPS Line: SPS Line = (Sum of 'Wins' / 13) * 100 This means: We add up all the "Winners" for that specific day and turn it into a percentage. For example, if the Aqua line is at 7.69% on your chart, it confirms that on that day , exactly 1 out of the 13 coins was successfully beating Bitcoin, while the other 12 were underperforming.
THE PERFORMANCE MATRIX
In the top-right corner, we provide a Weighted Portfolio Simulation . This answers the financial question: "If I swapped 1 BTC into an equal-weight basket of these 13 coins on the snapshot day, what is my BTC value today?".
• Value < 1.0 BTC: You lost purchasing power compared to holding Bitcoin.
• Value > 1.0 BTC: You successfully achieved "Alpha" over the benchmark.
HOW TO READ THE CHART
• The Waterfall: Lines generally trend downward as the "Satoshi Sieve" filters out assets that cannot maintain their BTC-relative value.
• Dynamic Winners: We dynamically print the names of the current survivors at the tip of each line. If a cohort shows "None," the graveyard is full.
HOW TO READ THE MATRIX
• The BTC Target: Any portfolio value in the matrix below 1.0 BTC represents a failed altcoin rotation.
• Class of 2018: A portfolio value near 0.15 BTC at the current date, means a 85% loss rate.
• Class of 2020: A portfolio value near 0.77 BTC at the current date, means an approx 20 % loss rate.
• Class of 2022: A portfolio value near 0.31 BTC at the current date, means an approx 70% loss rate.
DIFFERENCE FROM AN ALTCOIN INDEX
Standard Altcoin Indexes (like my ALSI Index ) "rebalance" by removing losers and adding new winners. This is deceptive. The Altcoin Graveyard never rebalances . It forces you to watch the "losers" decay, providing a realistic look at the long-term opportunity cost of "Buy and Hold" for anything other than Bitcoin.
CONCLUSION
The data revealed by the Satoshi Sieve leads to a singular, sobering "Lesson Learned": Picking the right coin to outperform Bitcoin is not just difficult—it is statistically improbable over a long-term horizon.
While the "Risk-Reward" of altcoins is often marketed as having higher upside, the Altcoin Graveyard proves that for the vast majority of assets, the reward does not justify the risk of total portfolio erosion in BTC terms.
• The Mathematical Odds: If you picked a Top 10 coin in 2018, your chance of outperforming BTC today is effectively 0%.
• The Rotation Trap: Most investors "HODL" these assets into the graveyard, hoping for a return to previous ATHs that never comes because the liquidity has already moved on to the next "Class" of winners.
The final conclusion is clear: Diversification into altcoins is often just a slow-motion transfer of wealth back to Bitcoin. If you cannot identify the 1-out-of-13 that survives the Sieve, your best risk-adjusted move has historically been to simply hold the benchmark.
DISCLAIMER
This script is for educational purposes only. It does not constitute financial advice. It is a mathematical study of historical opportunity cost and survivorship bias.
Tags
bitcoin, btc, satoshis graveyard, altseason, dominance, total3, rotation, cycle, index, alsi, Rob Maths, robmaths
Ranked Exchange Volume (REV)📊 Ranked Exchange Volume (REV) - Multi-Venue Volume Distribution Visualizer
## Stop Guessing Where the Real Volume Is. See It.
Most traders look at aggregate volume and miss the critical story: **where** that volume actually traded. Ranked Exchange Volume (REV) solves this by revealing the complete liquidity landscape across multiple trading venues in a single, elegant visualization.
This isn't just another volume indicator—it's a **dynamic stratified histogram** that automatically reorganizes exchange layers by magnitude on every bar, showing you **instant market dominance** at a glance.
---
## 🎯 The Core Innovation: Self-Organizing Volume Layers
REV displays volume from up to 10 different exchanges as **stacked, color-coded bars** where the largest volume source literally rises to the top. Watch as exchanges compete for dominance in real-time:
- **Largest volume = Top of the bar** (most visible position)
- **Smallest volume = Bottom of the bar** (foundation layer)
- **Everything in between = Automatically sorted on every candle**
This visual hierarchy makes it instantly obvious which venues are leading the market—no mental math required.
---
## ✨ Key Features
### 🔄 **Dynamic Layer Sorting**
Unlike static stacked charts, REV uses real-time stratification. If Binance had 60% of volume last bar but Coinbase takes 70% this bar, you'll see Coinbase jump to the top. The hierarchy reflects current reality, not a fixed order.
### 🎨 **10 Fully Customizable Exchange Slots**
Each exchange slot offers complete control:
- **Enable/Disable toggle** - Turn exchanges on/off without losing your configuration
- **Custom prefix** - Track ANY exchange on TradingView (BINANCE, KRAKEN, OANDA, FXCM, etc.)
- **Custom suffix** - Specify quote currency (USDT, USD, EUR, or leave blank for stocks/forex)
- **Display name** - Control how exchanges appear in the rankings table
- **Color selection** - Match your chart theme or use brand colors for instant recognition
### 📊 **Live Rankings Table**
A real-time leaderboard shows:
- **Rank** - Current position (1 = highest volume)
- **Exchange name** - With color-coded background
- **Volume** - Intelligently formatted with K/M/B units
- **Percentage** - Exact market share
**Table positioning:** Choose from 9 screen positions (top/middle/bottom × left/center/right) to keep your chart clean.
### 🧮 **Intelligent Volume Formatting**
REV automatically detects volume magnitude and applies the appropriate scale:
- **Billions** - Displays as "1.5B" for readability
- **Millions** - Displays as "342.8M"
- **Thousands** - Displays as "45.2K"
- **Full numbers option** - Toggle to see complete values (23,456,789)
The scale adjusts per-bar, so you always see the clearest representation.
### 🚨 **Three Built-In Alert Conditions**
1. **Exchange Dominance Alert (>50%)**
- Triggers when a single venue controls majority of volume
- Signals potential liquidity concentration risk or exchange-specific events
2. **Volume Spike Alert (>2x average)**
- Detects unusual aggregate activity across all venues
- Catches breakouts, news events, or institutional flow
3. **Liquidity Migration Alert**
- Fires when market leadership shifts between exchanges
- Reveals arbitrage opportunities or changing market structure
### 📈 **Optional Total Volume Line**
Display aggregate volume from all exchanges as a reference overlay with customizable color.
---
## 🌍 Market Compatibility: Beyond Crypto
While optimized for cryptocurrency (its primary design), REV works across multiple asset classes:
### ✅ **Cryptocurrency (Perfect Fit)**
**Why it excels:** Crypto trades 24/7 across dozens of global exchanges simultaneously. REV reveals true price discovery.
**Example configurations:**
- **BTC/USDT:** Compare Binance, Coinbase, OKX, Bybit, Kraken, Bitget
- **ETH/USD:** Track institutional venues (Coinbase, Kraken, Gemini) vs retail (Binance, Gate.io)
- **Altcoins:** Identify which exchanges have the deepest liquidity before placing large orders
**Trading applications:**
- **Arbitrage detection** - Spot when volume migrates between venues (price differential opportunities)
- **Exchange risk** - Don't trade on exchanges with suspiciously low volume
- **Whale tracking** - Sudden Coinbase dominance often signals institutional activity
- **Market maker identification** - Consistent Binance leadership suggests MM concentration
### ✅ **Forex (Excellent Fit)**
**Why it works:** Forex doesn't have centralized exchanges—it trades OTC across multiple broker feeds. REV shows which data providers are seeing the action.
**Example configurations:**
- **EUR/USD:** Compare OANDA, FXCM, FOREX.COM, FX_IDC, CAPITALCOM
- **GBP/JPY:** Track volatility across broker feeds
- **Exotics:** Verify liquidity before trading thin pairs
**Setup notes:**
- Leave **suffix field blank** for forex
- Use broker prefixes: OANDA, FXCM, FOREXCOM, FX_IDC, SAXO
- Symbol constructs as "OANDA:EURUSD"
**Trading applications:**
- **Spread verification** - Higher volume feeds typically offer tighter spreads
- **News event tracking** - See which brokers capture the most flow during announcements
- **Session analysis** - Watch London/NY volume shifts across different providers
### ⚠️ **Stocks (Limited But Useful)**
**Where it works:**
- **Dual-listed stocks** - Canadian companies on TSX and NYSE
- **International ADRs** - Same company, different exchanges
- **ETF arbitrage** - Compare volume across regional listings
**Example configurations:**
- **Shopify (SHOP):** Compare TSX vs NYSE volume
- **Alibaba (BABA):** NYSE vs HKEX volume
- **European stocks:** Compare primary exchange vs secondary listings
**Setup notes:**
- Leave **suffix field blank**
- Use exchange prefixes: NYSE, NASDAQ, TSX, LSE, XETRA
- Note: TradingView doesn't show per-venue volume for U.S. equities (NYSE vs BATS vs ARCA all aggregate)
**Limitations:** Most stocks trade primarily on one exchange, so REV is less valuable than in crypto/forex.
### ❌ **Futures (Not Recommended)**
Futures contracts differ by exchange (CME's ES ≠ EUREX's FESX), so volume isn't comparable.
---
## 📚 Practical Use Cases
### 1. **Pre-Trade Liquidity Analysis**
Before entering a large position, check which exchanges have sufficient volume to fill your order without slippage.
**Example:** You want to sell 50 BTC. REV shows Binance has 2,340 BTC volume this hour while a smaller exchange has only 87 BTC. Route your order to Binance for better execution.
### 2. **Exchange Risk Management**
Identify "fake volume" or wash trading by comparing venues.
**Red flag pattern:** An exchange consistently shows 10x the volume of competitors but with minimal price impact—likely artificial.
### 3. **Arbitrage Opportunity Detection**
When volume suddenly concentrates on one exchange, price premiums/discounts often appear.
**Alert pattern:** Liquidity Migration alert fires → Check price differences → Execute arb if spread exceeds fees.
### 4. **Institutional Flow Tracking**
In crypto, institutions typically use regulated exchanges (Coinbase, Kraken, Gemini).
**Pattern to watch:** Coinbase volume spikes to 60%+ dominance → Often precedes directional moves as institutions position.
### 5. **Market Structure Analysis**
Watch long-term trends in exchange dominance to understand market evolution.
**Example insight:** "Binance's market share has dropped from 70% to 45% over 6 months as traders diversify to OKX and Bybit."
### 6. **Event Response Comparison**
During major news events, see which exchanges react first.
**Analysis:** If one exchange shows volume spike 5 minutes before others, that feed may have faster news incorporation.
---
## ⚙️ Technical Specifications
- **Maximum exchanges:** 10 simultaneous venues
- **Sorting algorithm:** Bubble sort (O(n²) but optimal for n=10, prioritizes stability)
- **Update frequency:** Real-time, every bar
- **Data handling:** Gracefully ignores invalid symbols, treats NA as zero
- **Chart type:** Non-overlay (separate pane below price)
- **Performance:** Lightweight, no lag on any timeframe
---
## 🚀 Getting Started
### Quick Setup (5 Minutes)
**For Crypto Traders (Default Configuration):**
1. Add indicator to any crypto chart (BTC, ETH, SOL, etc.)
2. Works immediately—top 10 exchanges pre-configured
3. Customize colors if desired
4. Position table to your preference
**For Forex Traders:**
1. Open any forex pair (EUR/USD, GBP/JPY, etc.)
2. Go to Exchange 1 settings
3. Change prefix to "OANDA" (or your preferred broker)
4. **Clear the suffix field** (leave it blank)
5. Repeat for other exchanges (FXCM, FOREXCOM, FX_IDC, etc.)
6. Disable any unused exchange slots
**For Stock Traders (Dual-Listed):**
1. Open a dual-listed stock (e.g., SHOP on TSX)
2. Exchange 1: Prefix = "TSX", Suffix = blank, Name = "Toronto"
3. Exchange 2: Prefix = "NYSE", Suffix = blank, Name = "New York"
4. Disable exchanges 3-10
5. Compare volume distribution
### Advanced Customization
**Tracking Regional Markets:**
Want to compare Korean vs Japanese crypto exchanges?
- Exchange 1: UPBIT (Korean)
- Exchange 2: BITHUMB (Korean)
- Exchange 3: BITFLYER (Japanese)
- Exchange 4: COINCHECK (Japanese)
**Isolating Institutional Volume:**
Focus only on regulated U.S. exchanges:
- Enable: Coinbase, Kraken, Gemini
- Disable: All others
- Watch for >50% dominance alerts
---
## 👥 Who Is This For?
### ✅ **Perfect for:**
- **Crypto day traders** - Need to know where liquidity actually is
- **Arbitrage traders** - Spot cross-exchange inefficiencies
- **Institutional traders** - Validate execution venues before large orders
- **Forex scalpers** - Compare broker feeds for best execution
- **Market structure analysts** - Track long-term exchange dominance trends
### ❌ **Less useful for:**
- **Long-term investors** who don't care about short-term liquidity
- **Single-exchange traders** who never compare venues
- **Futures traders** (contracts differ by exchange)
---
## 🎓 Understanding the Visualization
**What each colored segment means:**
Each horizontal stripe represents one exchange's volume contribution. The **height** of each stripe shows that exchange's volume relative to others.
**Reading the pattern:**
- **Dominant top layer** (50%+ of bar) = Clear market leader
- **Evenly distributed layers** (10-15% each) = Fragmented liquidity
- **Sudden layer reorganization** = Liquidity migration event
- **Shrinking bottom layers** = Exchanges losing market share
**Color coding strategy:**
The indicator defaults to exchange brand colors for instant recognition:
- Yellow = Binance (their signature gold)
- Blue = Coinbase (their brand blue)
- Purple = Kraken (their brand purple)
- etc.
You can customize all colors to match your chart theme.
---
## 🔧 Configuration Tips
### **Best Practices:**
1. **Start with defaults** - Test on BTC/USDT to understand behavior
2. **Disable unused exchanges** - Cleaner visualization, faster computation
3. **Match your trading venues** - Only track exchanges you actually use
4. **Use brand colors initially** - Helps build visual pattern recognition
5. **Enable alerts strategically** - Don't spam yourself; focus on actionable signals
### **Common Mistakes to Avoid:**
❌ Tracking too many irrelevant exchanges (creates visual noise)
❌ Forgetting to clear suffix for forex/stocks (symbol won't construct properly)
❌ Using the same color for multiple exchanges (defeats instant recognition)
❌ Hiding the table permanently (you lose the percentage data)
---
## 📊 Performance Notes
- **Lightweight computation** - No impact on chart performance
- **Works on all timeframes** - 1-minute to monthly
- **Historical analysis** - Full bar history available (max_bars_back=5000)
- **Multi-monitor friendly** - Table positioning adapts to any screen layout
---
## 🆕 Future Enhancements (Planned)
While the current version is feature-complete, potential additions include:
- Volume-weighted average price (VWAP) overlay per exchange
- Historical dominance charts (which exchange led most this week/month)
- Correlation matrix (do exchanges move together or independently?)
**User feedback shapes development** - Comment with your requests!
---
## 💡 Pro Tips
### **Tip 1: The "Whale Exchange" Filter**
In crypto, institutions use Coinbase/Kraken. Enable ONLY these two exchanges to isolate professional flow and ignore retail noise.
### **Tip 2: The "Arbitrage Scanner"**
Set Liquidity Migration alert on 1-minute timeframe. When it fires, check price across exchanges—often there's a temporary premium/discount.
### **Tip 3: The "Liquidity Gauge"**
Before placing a large market order, switch to 5-minute timeframe and check last 10 bars. If your target exchange consistently has <20% of volume, you'll face slippage.
### **Tip 4: The "Market Structure Tracker"**
Take screenshots of the table weekly. Over time, you'll see exchange market share trends that reveal fundamental shifts in trader preferences.
### **Tip 5: The "News Event Validator"**
During major announcements (Fed decisions, earnings, etc.), watch which exchange shows volume first. That's where informed traders are positioned.
---
## 🎯 Summary
**Ranked Exchange Volume (REV) transforms volume analysis from a single number into a complete market microstructure view.**
Instead of seeing "1.2M volume," you see:
- Binance: 640K (53%)
- Coinbase: 280K (23%)
- OKX: 180K (15%)
- Bybit: 100K (9%)
**That's actionable intelligence.**
Whether you're executing a large crypto trade, arbitraging forex across brokers, or validating liquidity before buying a dual-listed stock, REV shows you **where the market actually is**—not where you assume it is.
---
## 📖 Quick Reference Card
| Feature | What It Does | Why It Matters |
|---------|-------------|----------------|
| **Dynamic Sorting** | Largest volume rises to top | Instant dominance identification |
| **10 Custom Slots** | Track any exchanges | Works for YOUR trading venues |
| **Live Rankings** | Real-time leaderboard | Precise market share data |
| **Smart Formatting** | Auto K/M/B scaling | Always readable, never cluttered |
| **Dominance Alert** | Warns at >50% concentration | Risk management for large orders |
| **Migration Alert** | Fires on leadership change | Arbitrage opportunity signal |
| **Spike Alert** | Detects 2x volume surges | Breakout/news confirmation |
| **Total Line** | Shows aggregate volume | Reference for overall activity |
| **Table Positioning** | 9 screen locations | Adapts to your layout |
| **Full/Short Toggle** | Complete vs abbreviated numbers | Flexibility for different assets |
---
## ✅ Installation & Support
**Install:** Add to your TradingView favorites, apply to any chart
**Updates:** Automatic through TradingView
**Support:** Comment with questions—active developer community
**Like this indicator?** Leave a ⭐ rating and share with fellow traders who need better volume intelligence.
---
**🚀 Start seeing the complete volume picture. Add Ranked Exchange Volume to your charts today.**
Multi Cycles Slope-Fit System MLMulti Cycles Predictive System : A Slope-Adaptive Ensemble
Executive Summary:
The MCPS-Slope (Multi Cycles Slope-Fit System) represents a paradigm shift from static technical analysis to adaptive, probabilistic market modeling. Unlike traditional indicators that rely on a single algorithm with fixed settings, this system deploys a "Mixture of Experts" (MoE) ensemble comprising 13 distinct cycle and trend algorithms.
Using a Gradient-Based Memory (GBM) learning engine, the system dynamically solves the "Cycle Mode" problem by real-time weighting. It aggressively curve-fits the Slope of component cycles to the Slope of the price action, rewarding algorithms that successfully predict direction while suppressing those that fail.
This is a non-repainting, adaptive oscillator designed to identify market regimes, pinpoint high-probability reversals via OB/OS logic, and visualize the aggregate consensus of advanced signal processing mathematics.
1. The Core Philosophy: Why "Slope" Matters:
In technical analysis, most traders focus on Levels (Price is above X) or Values (RSI is at 70). However, the primary driver of price action is Momentum, which is mathematically defined as the Rate of Change, or the Slope.
This script introduces a novel approach: Slope Fitting.
Instead of asking "Is the cycle high or low?", this system asks: "Is the trajectory (Slope) of this cycle matching the trajectory of the price?"
The Dual-Functionality of the Normalized Oscillator
The final output is a normalized oscillator bounded between -1.0 and +1.0. This structure serves two critical functions simultaneously:
Directional Bias (The Slope):
When the Combined Cycle line is rising (Positive Slope), the aggregate consensus of the 13 algorithms suggests bullish momentum. When falling (Negative Slope), it suggests bearish momentum. The script measures how well these slopes correlate with price action over a rolling lookback window to assign confidence weights.
Overbought / Oversold (OB/OS) Identification:
Because the output is mathematically clipped and normalized:
Approaching +1.0 (Overbought): Indicates that the top-weighted algorithms have reached their theoretical maximum amplitude. This is a statistical extreme, often preceding a mean reversion or trend exhaustion.
Approaching -1.0 (Oversold): Indicates the aggregate cycle has reached maximum bearish extension, signaling a potential accumulation zone.
Zero Line (0.0): The equilibrium point. A cross of the Zero Line is the most traditional signal of a trend shift.
2. The "Mixture of Experts" (MoE) Architecture:
Markets are dynamic. Sometimes they trend (Trend Following works), sometimes they chop (Mean Reversion works), and sometimes they cycle cleanly (Signal Processing works). No single indicator works in all regimes.
This system solves that problem by running 13 Algorithms simultaneously and voting on the outcome.
The 13 "Experts" Inside the Code:
All algorithms have been engineered to be Non-Repainting.
Ehlers Bandpass Filter: Extracts cycle components within a specific frequency bandwidth.
Schaff Trend Cycle: A double-smoothed stochastic of the MACD, excellent for cycle turning points.
Fisher Transform: Normalizes prices into a Gaussian distribution to pinpoint turning points.
Zero-Lag EMA (ZLEMA): Reduces lag to track price changes faster than standard MAs.
Coppock Curve: A momentum indicator originally designed for long-term market bottoms.
Detrended Price Oscillator (DPO): Removes trend to isolate short-term cycles.
MESA Adaptive (Sine Wave): Uses Phase accumulation to detect cycle turns.
Goertzel Algorithm: Uses Digital Signal Processing (DSP) to detect the magnitude of specific frequencies.
Hilbert Transform: Measures the instantaneous position of the cycle.
Autocorrelation: measures the correlation of the current price series with a lagged version of itself.
SSA (Simplified): Singular Spectrum Analysis approximation (Lag-compensated, non-repainting).
Wavelet (Simplified): Decomposes price into approximation and detail coefficients.
EMD (Simplified): Empirical Mode Decomposition approximation using envelope theory.
3. The Adaptive "GBM" Learning Engine
This is the "Machine Learning" component of the script. It does not use pre-trained weights; it learns live on your chart.
How it works:
Fitting Window: On every bar, the system looks back 20 days (configurable).
Slope Correlation: It calculates the correlation between the Slope of each of the 13 algorithms and the Slope of the Price.
Directional Bonus: It checks if the algorithm is pointing in the same direction as the price.
Weight Optimization:
Algorithms that match the price direction and correlation receive a higher "Fit Score."
Algorithms that diverge from price action are penalized.
A "Softmax" style temperature function and memory decay allow the weights to shift smoothly but aggressively.
The Result: If the market enters a clean sine-wave cycle, the Ehlers and Goertzel weights will spike. If the market explodes into a linear trend, ZLEMA and Schaff will take over, suppressing the cycle indicators that would otherwise call for a premature top.
4. How to Read the Interface:
The visual interface is designed for maximum information density without clutter.
The Dashboard (Bottom Left - GBM Stats)
Combined Fit: A percentage score (0-100%). High values (>70%) mean the system is "Locked In" and tracking price accurately. Low values suggest market chaos/noise.
Entropy: A measure of disorder. High entropy means the algorithms disagree (Neutral/Chop). Low entropy means the algorithms are unanimous (Strong Trend).
Top 1 / Top 3 Weight: Shows how concentrated the decision is. If Top 1 Weight is 50%, one algorithm is dominating the decision.
The Matrix (Bottom Right - Weight Table)
This table lifts the hood on the engine.
Fit Score: How well this specific algo is performing right now.
Corr/Dir: Raw correlation and Direction Match stats.
Weight: The actual percentage influence this algorithm has on the final line.
Cycle: The current value of that specific algorithm.
Regime: Identifies if the consensus is Bullish, Bearish, or Neutral.
The Chart Overlay
The Line: The Gradient-Colored line is the Weighted Ensemble Prediction.
Green: Bullish Slope.
Red: Bearish Slope.
Triangles: Zero-Cross signals (Bullish/Bearish).
"STRONG" Labels: Appears when the cycle sustains a value above +0.5 or below -0.5, indicating strong momentum.
Background Color: Changes subtly to reflect the aggregate Regime (Strong Up, Bullish, Neutral, Bearish, Strong Down).
5. Trading Strategies:
A. The Slope Reversal (OB/OS Fade)
Concept: Catching tops and bottoms using the -1/+1 normalization.
Signal: Wait for the Combined Cycle to reach extreme values (>0.8 or <-0.8).
Trigger: The entry is taken not when it hits the level, but when the Slope flips.
Short: Cycle hits +0.9, color turns from Green to Red (Slope becomes negative).
Long: Cycle hits -0.9, color turns from Red to Green (Slope becomes positive).
B. The Zero-Line Trend Join
Concept: Joining an established trend after a correction.
Signal: Price is trending, but the Cycle pulls back to the Zero line.
Trigger: A "Triangle" signal appears as the cycle crosses Zero in the direction of the higher timeframe trend.
C. Divergence Analysis
Concept: Using the "Fit Score" to identify weak moves.
Signal: Price makes a Higher High, but the Combined Cycle makes a Lower High.
Confirmation: Check the GBM Stats table. If "Combined Fit" is dropping while price is rising, the trend is decoupling from the cycle logic. This is a high-probability reversal warning.
6. Technical Configuration:
Fitting Window (Default: 20): The number of bars the ML engine looks back to judge algorithm performance. Lower (10-15) for scalping/quick adaptation. Higher (30-50) for swing trading and stability.
GBM Learning Rate (Default: 0.25): Controls how fast weights change.
High (>0.3): The system reacts instantly to new behaviors but may be "jumpy."
Low (<0.15): The system is very smooth but may lag in regime changes.
Max Single Weight (Default: 0.55): Prevents one single algorithm from completely hijacking the system, ensuring an ensemble effect remains.
Slope Lookback: The period over which the slope (velocity) is calculated.
7. Disclaimer & Notes:
Repainting: This indicator utilizes closed bar data for calculations and employs non-repainting approximations of SSA, EMD, and Wavelets. It does not repaint historical signals.
Calculations: The "ML" label refers to the adaptive weighting algorithm (Gradient-based optimization), not a neural network black box.
Risk: No indicator guarantees future performance. The "Fit Score" is a backward-looking metric of recent performance; market regimes can shift instantly. Always use proper risk management.
Author's Note
The MCPS-Slope was built to solve the frustration of "indicator shopping." Instead of switching between an RSI, a MACD, and a Stochastic depending on the day, this system mathematically determines which one is working best right now and presents you with a single, synthesized data stream.
If you find this tool useful, please leave a Boost and a Comment below!
As Good As It Gets Pivot ArrowsAs Good As It Gets Pivot Arrows
Description
- As Good As It Gets Pivot Arrows is a clean, high-precision pivot detection indicator that plots bright green upward triangles for confirmed pivot lows (buy signals) and red downward triangles for confirmed pivot highs (sell signals), and comes with customizable pivot length. Additionally, it optionally displays white dots for double-top/double-bottom pivots within a user-defined percentage tolerance.
Key Features
- Exact replication of TOS pivot high/low triangles (12-arrow style)
- Customizable pivot length (default 7)
- Option to ignore the last unconfirmed bar
- Toggle triangles and/or pivot dots independently
- Double-top/bottom detection with adjustable % tolerance (0.1% default)
- Clean visual signals with no repainting on confirmed pivots
What Makes It Unique
- This script delivers the pivot arrow behavior (including brighter lime-green buy triangles) that many traders love, with added flexibility: individual toggles for triangles/dots, double-top/bottom detection, and full customization. Unlike generic pivot indicators, it has precise confirmation logic while remaining fast and non-repainting on closed bars.
How to Use and Trade With It
- Adjust "Pivot Length" to suit your timeframe (7–14 common)
- Enable/disable triangles or dots as preferred
- Fine-tune "% Tolerance" for double-top/bottom sensitivity
Trading Signals
- Green upward triangle below bar: Confirmed pivot low → potential LONG entry or support
- Red downward triangle above bar: Confirmed pivot high → potential SHORT entry or - resistance
- White dots: Double-top (above) or double-bottom (below) within tolerance → higher-probability reversal zones
Best Practice
- Use triangles for primary swing entries/exits
- Combine with volume, trend filters, or support/resistance for confirmation
- Works on any timeframe; shorter lengths for intraday scalping, longer for positional trading
SuperWaveTrendWaveTrend with Crosses + HyperWave + Confluence Zones + Thresholds
SuperWaveTrend — Advanced Momentum System Integrating WaveTrend, HyperWave, Confluence Zones & Threshold Filters
SuperWaveTrend is an enhanced momentum indicator built upon the classic WaveTrend (WT) framework.
It integrates HyperWave extreme zones, top/bottom Confluence Zones, trend hesitation Threshold regions, WT crossover reversal signals, and more.
This indicator is suitable for:
• Trend following
• Swing trading
• Reversal spotting
• Overbought/oversold structure analysis
• Extreme market sentiment detection
Whether you’re scalping or planning swing entries, SuperWaveTrend offers a more precise and visually intuitive momentum structure.
Key Features
1. WaveTrend Core Structure (WT1 / WT2)
• WT1: Primary momentum line
• WT2: Signal line
• Momentum Spread Area (WT1 − WT2) visualization highlights shifts in trend strength
2. HyperWave Extreme Momentum Zones
Background highlight automatically appears during extreme momentum conditions:
• Purple-red: Extreme bullish zone
• Orange: Extreme bearish zone
Helps identify:
• Blow-off tops
• Panic sell-offs
• Extreme trend continuation phases
3. Confluence Zones (Top/Bottom Resonance)
Combines overbought/oversold signals with momentum structure to mark:
• Gold top zones → weakening bullish momentum
• Blue bottom zones → weakening bearish momentum
Useful for detecting:
• Bearish divergence tops
• Reversal bounces
• High-level exhaustion / low-level capitulation
4. Threshold Hesitation Zone (Gray)
When WT1 and WT2 converge tightly, a gray background highlights:
• Unclear direction
• Trend weakening
• Higher risk of false signals
Generally not recommended for new entries.
5. WT Crossover Signals (Cross Signals)
WT1 and WT2 crossovers are marked with color-coded dots:
• Green: Bullish cross
• Red: Bearish cross
A core signal for capturing reversal shifts.
⚠️ Creator’s Disclaimer & Usage Insights
***WARNING***
SuperWaveTrend is not designed for extremely strong one-sided trends.
During highly impulsive markets, signals may become delayed or less reliable.
Optimal Timeframes
Based on extensive backtesting, In swing-trading environments, the indicator performs most effectively on the 1H–4H timeframes, where momentum cycles form cleanly and Confluence Zones provide high-probability setups.
Trading Insights
• In swing-trading environments, Confluence Zones often coincide with excellent long/short opportunities, especially when momentum exhaustion is confirmed.
• When paired with a Bollinger Bands framework, the system exhibits significantly improved accuracy and structure clarity.
Have fun,
BigTrunks
FVG Maxing - Fair Value Gaps, Equilibrium, and Candle Patterns
What this script does
This open-source indicator highlights 3-candle fair value gaps (FVGs) on the active chart timeframe, draws their midpoint ("equilibrium") line, tracks when each gap is mitigated, and optionally marks simple candle patterns (engulfing and doji) for confluence. It is intended as an educational tool to study how price interacts with imbalances.
3-candle bullish and bearish FVG zones drawn as forward-extending boxes.
Equilibrium line at 50% of each gap.
Different styling for mitigated vs unmitigated gaps.
Compact statistics panel showing how many gaps are currently active and filled.
Optional overlays for bullish/bearish engulfing patterns and doji candles.
1. FVG logic (3-candle gaps)
The script focuses on a strict 3-candle definition of a fair value gap:
Three consecutive candles with the same body direction.
The wick of candle 3 is separated from the wick of candle 1 (no overlap).
A bullish gap is created when price moves up fast enough to leave a gap between candle 1 and 3. A bearish gap is the mirror case to the downside.
In Pine, the core detection looks like this:
// Three candles with the same body direction
bull_seq = close > open and close > open and close > open
bear_seq = close < open and close < open and close < open
// Wick gap between candle 1 and candle 3
bull_gap = bull_seq and low > high
bear_gap = bear_seq and high < low
// Final FVG flags
is_bull_fvg = bull_gap
is_bear_fvg = bear_gap
For each detected FVG:
Bullish FVG range: from high up to low (gap below current price).
Bearish FVG range: from low down to high (gap above current price).
Each zone is stored in a custom FVGData structure so it can be updated when price later trades back inside it.
2. Equilibrium line (0.5 of the gap)
Every FVG box gets an optional equilibrium line plotted at the midpoint between its top and bottom:
eq_level = (top + bottom) / 2.0
right_index = extend_boxes ? bar_index + extend_length_bars : bar_index
bx = box.new(bar_index - 2, top, right_index, bottom)
eq_ln = line.new(bar_index - 2, eq_level, right_index, eq_level)
line.set_style(eq_ln, line.style_dashed)
line.set_color(eq_ln, eq_color)
You can use this line as a neutral “fair value” reference inside the zone, or as a simple way to think in terms of premium/discount within each gap.
3. Mitigation rules and styling
Each FVG stays active until price trades back into the gap:
Bullish FVG is considered mitigated when the low touches or moves below the top of the gap.
Bearish FVG is considered mitigated when the high touches or moves above the bottom of the gap.
When that happens, the script:
Marks the internal FVGData entry as mitigated.
Softens the box fill and border colors.
Optionally updates the label text from "BULL EQ / BEAR EQ" to "BULL FILLED / BEAR FILLED".
Can hide mitigated zones almost completely if you only want to see unfilled imbalances.
This allows you to distinguish between current areas of interest and zones that have already been traded through.
4. Candle pattern overlays (engulfing and doji)
For additional confluence, the script can mark simple candle patterns on top of the FVG view:
Bullish engulfing — current candle body fully wraps the previous bearish body and is larger in size.
Bearish engulfing — current candle body fully wraps the previous bullish body and is larger in size.
Doji — candles where the real body is small relative to the full range (high–low).
The detection is based on basic body and range geometry:
curr_body = math.abs(close - open)
prev_body = math.abs(close - open )
curr_range = high - low
body_ratio = curr_range > 0 ? curr_body / curr_range : 1.0
bull_engulfing = close > open and close < open and open <= close and close >= open and curr_body > prev_body
bear_engulfing = close < open and close > open and open >= close and close <= open and curr_body > prev_body
is_doji = curr_range > 0 and body_ratio <= doji_body_ratio
On the chart, they appear as:
Small triangle markers below bullish engulfing candles.
Small triangle markers above bearish engulfing candles.
Small circles above doji candles.
All three overlays are optional and can be turned on or off and recolored in the CANDLE PATTERNS group of inputs.
5. Inputs overview
The script organizes settings into clear groups:
DISPLAY SETTINGS : Show bullish/bearish FVGs, show/hide mitigated zones, box extension length, box border width, and maximum number of boxes.
EQUILIBRIUM : Toggle equilibrium lines, color, and line width.
LABELS : Enable labels, choose whether to label unmitigated and/or mitigated zones, and select label size.
BULLISH COLORS / BEARISH COLORS : Separate fill and border colors for bullish and bearish gaps.
MITIGATED STYLE : Opacity used when a gap is marked as mitigated.
STATISTICS : Toggle the on-chart FVG statistics panel.
CANDLE PATTERNS : Show engulfing patterns, show dojis, colors, and the body-to-range threshold that defines a doji.
6. Statistics panel
An optional table in the corner of the chart summarizes the current state of all tracked gaps:
Total number of FVGs still being tracked.
Number of bullish vs bearish FVGs.
Number of unfilled vs mitigated FVGs.
Simple fill rate: percentage of tracked FVGs that have been marked as mitigated.
This can help you study how a particular market tends to treat gaps over time.
7. How you might use it (examples)
These are usage ideas only, not recommendations:
Study how often your symbol mitigates gaps and where inside the zone price tends to react.
Use higher-timeframe context and then refine entries near the equilibrium line on your trading timeframe.
Combine FVG zones with basic candle patterns (engulfing/doji) as an extra visual anchor, if that fits your process.
Hope you enjoy, give your feedback in the comments!
- officialjackofalltrades
Open Interest RSI [BackQuant]Open Interest RSI
A multi-venue open interest oscillator that aggregates OI across major derivatives exchanges, converts it to coin or USD terms, and runs an RSI-style engine on that aggregated OI so you can track positioning pressure, crowding, and mean reversion in leverage flows, not just in price.
What this is
This tool is an RSI built on top of aggregated open interest instead of price. It pulls futures OI from several major exchanges, converts it into a unified unit (COIN or USD), sums it into a single synthetic OI candle, then applies RSI and smoothing to that combined series.
You can then render that Open Interest RSI in different visual modes:
Clean line or colored line for classic oscillator-style reads.
Column-style oscillator for impulse and compression views.
Flag mode that fills between OI RSI and its EMA for trend/mean reversion blends. See:
Heatmap mode that paints the panel based on OI RSI extremes, ideal for scanning. See:
On top of that it includes:
Aggregated OI source selection (Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit).
Choice of OI units (COIN or USD).
Reference lines and OB/OS zones.
Extreme highlighting for either trend or mean reversion.
A vertical OI RSI meter that acts as a quick strength gauge.
Aggregated open interest source
Under the hood, the indicator builds a synthetic open interest candle by:
Looping over a list of supported exchanges: Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit.
Looping over multiple contract suffixes (such as USDT.P, USD.P, USDC.P, USD.PM) to capture different contract types on each venue.
Requesting OI candles from each venue + contract combination for the same underlying symbol.
Converting each OI stream into a common unit: In COIN mode, everything is normalized into coin-denominated OI. In USD mode, coin OI is multiplied by price to approximate notional OI.
Summing up open, high, low and close of OI across venues into a single aggregated OI candle.
If no valid OI is available for the current symbol across all sources, the script throws a clear runtime error so you know you are on an unsupported market.
This gives you a single, exchange-agnostic open interest curve instead of being tied to one venue. That aggregated OI is then passed into the RSI logic.
How the OI RSI is calculated
The RSI side is straightforward, but it is applied to the aggregated OI close:
Compute a base RSI of aggregated OI using the Calculation Period .
Apply a simple moving average of length Smoothing Period (SMA) to reduce noise in the raw OI RSI.
Optionally apply an EMA on top of the smoothed OI RSI as a moving average signal line.
Key parameters:
Calculation Period – base RSI length for OI.
Smoothing Period (SMA) – extra smoothing on the RSI value.
EMA Period – EMA length on the smoothed OI RSI.
The result is:
oi_rsi – raw RSI of aggregated OI.
oi_rsi_s – SMA-smoothed OI RSI.
ma – EMA of the smoothed OI RSI.
Thresholds and extremes
You control three core thresholds:
Mid Point – central reference level, typically 50.
Extreme Upper Threshold – high-level OI RSI edge (for example 80).
Extreme Lower Threshold – low-level OI RSI edge (for example 20).
These thresholds are used for:
Reference lines or OB/OS zone fills.
Heatmap gradient bounds.
Background highlighting of extremes.
The Extreme Highlighting mode controls how extremes are interpreted:
None – do nothing special in extreme regions.
Mean-Rev – background turns red on high OI RSI and green on low OI RSI, framing extremes as contrarian zones.
Trend – background turns green on high OI RSI and red on low OI RSI, framing extremes as participation zones aligned with the prevailing move.
Reference lines and OB/OS zones
You can choose:
None – clean plotting without guides.
Basic Reference Lines – mid, upper and lower thresholds as simple gray horizontals.
OB/OS Levels – filled zones between:
Upper OB: from the upper threshold to 100, colored with the short/overbought color.
Lower OS: from 0 to the lower threshold, colored with the long/oversold color.
These guides help visually anchor the OI RSI within "normal" versus "extreme" regions.
Plotting modes
The Plotting Type input controls how OI RSI is drawn. All modes share the same underlying OI and RSI logic, but emphasise different aspects of the signal.
1) Line mode
This is the classic oscillator representation:
Plots the smoothed OI RSI as a simple line using RSI Line Color and RSI Line Width .
Optionally plots the EMA overlay on the same panel.
Works well when you want standard RSI-style signals on leverage flows: crosses of the midline, divergences versus price, and so on.
2) Colored Line mode
In this mode:
The OI RSI is plotted as a line, but its color is dynamic.
If the smoothed OI RSI is above the mid point, it uses the Long/OB Color .
If it is below the mid point, it uses the Short/OS Color .
This creates an instant visual regime switch between "bullish positioning pressure" and "bearish positioning pressure", while retaining the feel of a traditional RSI line.
3) Oscillator mode
Oscillator mode renders OI RSI as vertical columns around the mid level:
The smoothed OI RSI is plotted as columns using plot.style_columns .
The histogram base is fixed at 50, so bars extend above and below the mid line.
Bar color is dynamic, using long or short colors depending on which side of the mid point the value sits.
This representation makes impulse and compression in OI flows more obvious. It is especially useful when you want to focus on how quickly OI RSI is expanding or contracting around its neutral level. See:
4) Flag mode
Flag mode turns OI RSI and its EMA into a two-line band with a filled area between them:
The smoothed OI RSI and its EMA are both plotted.
A fill is drawn between them.
The fill color flips between the long color and the short color depending on whether OI RSI is above or below its EMA.
Black outlines are added to both lines to make the band clear against any background.
This creates a "flag" style region where:
Green fills show OI RSI leading its EMA, suggesting positive positioning momentum.
Red fills show OI RSI trailing below its EMA, suggesting negative positioning momentum.
Crossovers of the two lines can be read as shifts in OI momentum regime.
Flag mode is useful if you want a more structural view that combines both the level and slope behaviour of OI RSI. See:
5) Heatmap mode
Heatmap mode recasts OI RSI as a single-row gradient instead of a line:
A single row at level 1 is plotted using column style.
The color is pulled from a gradient between the lower and upper thresholds: Near the lower threshold it approaches the short/oversold color and near the upper threshold it approaches the long/overbought color.
The EMA overlay and reference lines are disabled in this mode to keep the panel clean.
This is a very compact way to track OI RSI state at a glance, especially when stacking it alongside other indicators. See:
OI RSI vertical meter
Beyond the main plot, the script can draw a small "thermometer" table showing the current OI RSI position from 0 to 100:
The meter is a two-column table with a configurable number of rows.
Row colors form an inverted gradient: red at the top (100) and green at the bottom (0).
The script clamps OI RSI between 0 and 100 and maps it to a row index.
An arrow marker "▶" is drawn next to the row corresponding to the current OI RSI value.
0 and 100 labels are printed at the ends of the scale for orientation.
You control:
Show OI RSI Meter – turn the meter on or off.
OI RSI Blocks – number of vertical blocks (granularity).
OI RSI Meter Position – panel anchor (top/bottom, left/center/right).
The meter is particularly helpful if you keep the main plot in a small panel but still want an intuitive strength gauge.
How to read it as a market pressure gauge
Because this is an RSI built on aggregated open interest, its extremes and regimes speak to positioning pressure rather than price alone:
High OI RSI (near or above the upper threshold) indicates that open interest has been increasing aggressively relative to its recent history. This often coincides with crowded leverage and a buildup of directional pressure.
Low OI RSI (near or below the lower threshold) indicates aggressive de-leveraging or closing of positions, often associated with flushes, forced unwinds or post-liquidation clean-ups.
Values around the mid point indicate more balanced positioning flows.
You can combine this with price action:
Price up with rising OI RSI suggests fresh leverage joining the move, a more persistent trend.
Price up with falling OI RSI suggests shorts covering or longs taking profit, more fragile upside.
Price down with rising OI RSI suggests aggressive new shorts or levered selling.
Price down with falling OI RSI suggests de-leveraging and potential exhaustion of the move.
Trading applications
Trend confirmation on leverage flows
Use OI RSI to confirm or question a price trend:
In an uptrend, rising OI RSI with values above the mid point indicates supportive leverage flows.
In an uptrend, repeated failures to lift OI RSI above mid point or persistent weakness suggest less committed participation.
In a downtrend, strong OI RSI on the downside points to aggressive shorting.
Mean reversion in positioning
Use thresholds and the Mean-Rev highlight mode:
When OI RSI spends extended time above the upper threshold, the crowd is extended on one side. That can set up squeeze risk in the opposite direction.
When OI RSI has been pinned low, it suggests heavy de-leveraging. Once price stabilises, a re-risking phase is often not far away.
Background colours in Mean-Rev mode help visually identify these periods.
Regime mapping with plotting modes
Different plotting modes give different perspectives:
Heatmap mode for dashboard-style use where you just need to know "hot", "neutral" or "cold" on OI flows at a glance.
Oscillator mode for short term impulses and compression reads around the mid line. See:
Flag mode for blending level and trend of OI RSI into a single banded visual. See:
Settings overview
RSI group
Plotting Type – None, Line, Colored Line, Oscillator, Flag, Heatmap.
Calculation Period – base RSI length for OI.
Smoothing Period (SMA) – smoothing on RSI.
Moving Average group
Show EMA – toggle EMA overlay (not used in heatmap).
EMA Period – length of EMA on OI RSI.
EMA Color – colour of EMA line.
Thresholds group
Mid Point – central reference.
Extreme Upper Threshold and Extreme Lower Threshold – OB/OS thresholds.
Select Reference Lines – none, basic lines or OB/OS zone fills.
Extreme Highlighting – None, Mean-Rev, Trend.
Extra Plotting and UI
RSI Line Color and RSI Line Width .
Long/OB Color and Short/OS Color .
Show OI RSI Meter , OI RSI Blocks , OI RSI Meter Position .
Open Interest Source
OI Units – COIN or USD.
Exchange toggles: Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit.
Notes
This is a positioning and pressure tool, not a complete system. It:
Models aggregated futures open interest across multiple centralized exchanges.
Transforms that OI into an RSI-style oscillator for better comparability across regimes.
Offers several visual modes to match different workflows, from detailed analysis to compact dashboards.
Use it to understand how leverage and positioning are evolving behind the price, to gauge when the crowd is stretched, and to decide whether to lean with or against that pressure. Attach it to your existing signals, not in place of them.
Also, please check out @NoveltyTrade for the OI Aggregation logic & pulling the data source!
Here is the original script:






















