3LS | 3 Line Strike Strategy [Kintsugi Trading]What is the 3LS | 3 Line Strike Strategy?
Incorporating the 3 Line Strike candlestick pattern into our strategy was inspired by Arty at The Moving Average and the amazing traders at TheTrdFloor .
The Three Line Strike is a trend continuation candlestick pattern consisting of four candles. Depending on their heights and collocation, a bullish or a bearish trend continuation can be predicted.
In a symphony of trend analysis, price action, and volume we can find and place high-probability trades with the 3LS Strategy.
How to use it!
----- First, start by choosing a Stop-Loss Strategy, Stop PIP Size, and Risk/Reward Ratio -----
- Stop-Loss Strategy
Fixed PIP Size – This uses the top/bottom of the indicator candle and places a TP based on the chosen Risk:Reward ratio.
ATR Trail (No set Target Profit, only uses ATR Stop)
ATR Trail-Stop (Has set Target Profit, however, stop is based on ATR inputs)
**If you choose an ATR Stop-Loss Strategy - input the desired ATR period and Multiple you would like the stop to be calculated at**
**ATR Stop-Loss Strategies have a unique alert setup for Auto-Trading. See Auto-Trading Section**
- Risk/Reward Ratio = If you have a .5 risk/reward, it means you are risking $100 to make $50.
- Additional Stop PIP Size = Number of PIPs over the default stop location of the top or bottom of the indicator candle.
----- Next, we set the Session Filter -----
Set the Timezone and Trade Session you desire. If no specific session is desired, simply set the Trade Session to 00:00 - 00:00.
----- Next, we set the Moving Average Cloud Fill -----
Enter the Fast and Slow Moving Average Length used to calculate trend direction:
MA Period Fast
MA Period Slow
These inputs will determine whether the strategy looks for Long or Short positions.
----- Next, we set the VSA – Volume Spread Analysis Settings -----
Check the box to show the indicator at the bottom of the chart if desired.
This is just a different visual output of the VSA | Volume Spread Analysis indicator available for free under the community indicators tab. You can add that indicator to your chart and see the same output in candle format.
In combination with the Moving Average Cloud, the Volume Spread Analysis will help us determine when to take a trade and in what direction.
The strategy is essentially looking for small reversals going against the overall trend and placing a trade once that reversal ends and the price moves back in the direction of the overall trend.
The 3LS Strategy utilizes confirmation between trend, volume, and price action to place high probability trades.
The VSA is completely customizable by:
Moving Average Length
MA-1 Multiplier
MA-2 Multiplier
MA-3 Multiplier
Check out the VSA | Volume Spread Analysis indicator in the community scripts section under the indicators tab to use this awesome resource on other strategies.
----- Next, we have the option to view the automated KT Bull/Bear Signals -----
Check the boxes to show the buy-sell signal on the chart if desired.
----- Next, we set the risk we want to use if Auto Trading the strategy -----
I always suggest using no more than 1-3% of your total account balance per trade. Remember, if you have multiple strategies triggering per day with each using 1%, the total percent at risk will be much larger.
For Example – if you have 10 strategies each risking 1% your total risk is 10% of your account, not 1%! Be mindful to only use 1-3% of your total account balance across all strategies, not just each individual one.
----- Finally, we backtest our ideas -----
After using the 'Strategy Tester' tab on TradingView to thoroughly backtest your predictions you are ready to take it to the next level - Automated Trading!
This was my whole reason for creating the script. If you work a full-time job, live in a time zone that is hard to trade, or just don't have the patience, this will be a game-changer for you as it was for me.
Auto-Trading
When it comes to auto-trading this strategy I have included two options in the script that utilize the alert messages generated by TradingView.
*Note: Please trade on a demo account until you feel comfortable enough to use real money, and then please stick to 1%-2% of your total account value in risk per trade.*
AutoView
PineConnector
**ATR Auto-Trading Alert Setup**
How to create alerts on 3 Line Strike Strategy
For Trailing Stops:
1) Adjust autoview/pineconnector settings
2) Click "add alert"
3) Select "Condition" = Strategy Name
4) Select "Order Fills Only" from the drop-down
3) Remove template message text from "message" box and place the exact text. '{{strategy.order.alert_message}}'
4) Click "create"
For Fixed Pip Stop:
1) Adjust autoview/pineconnector settings
2) Click "add alert"
3) Select "Condition" = Strategy Name
4) Select "alert() function calls only"
5) I like to title my Alert Name the same thing I named it as an Indicator Template to keep track
Good luck with your trading!
在脚本中搜索"text"
TR_HighLowLibrary "TR_HighLow"
TODO: add library description here
ShowLabel(_Text, _X, _Y, _Style, _Size, _Yloc, _Color)
TODO: Function to display labels
Parameters:
_Text : TODO: text (series string) Label text.
_X : TODO: x (series int) Bar index.
_Y : TODO: y (series int/float) Price of the label position.
_Style : TODO: style (series string) Label style.
_Size : TODO: size (series string) Label size.
_Yloc : TODO: yloc (series string) Possible values are yloc.price, yloc.abovebar, yloc.belowbar.
_Color : TODO: color (series color) Color of the label border and arrow
Returns: TODO: No return values
GetColor(_Index)
TODO: Function to take out 12 colors in order
Parameters:
_Index : TODO: color number.
Returns: TODO: color code
Tbl_position(_Pos)
TODO: Table display position function
Parameters:
_Pos : TODO: position.
Returns: TODO: Table position
DeleteLine()
TODO: Delete Line
Parameters:
: TODO: No parameter
Returns: TODO: No return value
DeleteLabel()
TODO: Delete Label
Parameters:
: TODO: No parameter
Returns: TODO: No return value
ZigZag(_a_PHiLo, _a_IHiLo, _a_FHiLo, _a_DHiLo, _Histories, _Provisional_PHiLo, _Provisional_IHiLo, _Color1, _Width1, _Color2, _Width2, _ShowLabel, _ShowHighLowBar, _HighLowBarWidth, _HighLow_LabelSize)
TODO: Draw a zig-zag line.
Parameters:
_a_PHiLo : TODO: High-Low price array
_a_IHiLo : TODO: High-Low INDEX array
_a_FHiLo : TODO: High-Low flag array sequence 1:High 2:Low
_a_DHiLo : TODO: High-Low Price Differential Array
_Histories : TODO: Array size (High-Low length)
_Provisional_PHiLo : TODO: Provisional High-Low Price
_Provisional_IHiLo : TODO: Provisional High-Low INDEX
_Color1 : TODO: Normal High-Low color
_Width1 : TODO: Normal High-Low width
_Color2 : TODO: Provisional High-Low color
_Width2 : TODO: Provisional High-Low width
_ShowLabel : TODO: Label display flag True: Displayed False: Not displayed
_ShowHighLowBar : TODO: High-Low bar display flag True:Show False:Hide
_HighLowBarWidth : TODO: High-Low bar width
_HighLow_LabelSize : TODO: Label Size
Returns: TODO: No return value
TrendLine(_a_PHiLo, _a_IHiLo, _Histories, _MultiLine, _StartWidth, _EndWidth, _IncreWidth, _StartTrans, _EndTrans, _IncreTrans, _ColorMode, _Color1_1, _Color1_2, _Color2_1, _Color2_2, _Top_High, _Top_Low, _Bottom_High, _Bottom_Low)
TODO: Draw a Trend Line
Parameters:
_a_PHiLo : TODO: High-Low price array
_a_IHiLo : TODO: High-Low INDEX array
_Histories : TODO: Array size (High-Low length)
_MultiLine : TODO: Draw a multiple Line.
_StartWidth : TODO: Line width start value
_EndWidth : TODO: Line width end value
_IncreWidth : TODO: Line width increment value
_StartTrans : TODO: Transparent rate start value
_EndTrans : TODO: Transparent rate finally
_IncreTrans : TODO: Transparent rate increase value
_ColorMode : TODO: 0:Nomal 1:Gradation
_Color1_1 : TODO: Gradation Color 1_1
_Color1_2 : TODO: Gradation Color 1_2
_Color2_1 : TODO: Gradation Color 2_1
_Color2_2 : TODO: Gradation Color 2_2
_Top_High : TODO: _Top_High Value for Gradation
_Top_Low : TODO: _Top_Low Value for Gradation
_Bottom_High : TODO: _Bottom_High Value for Gradation
_Bottom_Low : TODO: _Bottom_Low Value for Gradation
Returns: TODO: No return value
Fibonacci(_a_Fibonacci, _a_PHiLo, _Provisional_PHiLo, _Index, _FrontMargin, _BackMargin)
TODO: Draw a Fibonacci line
Parameters:
_a_Fibonacci : TODO: Fibonacci Percentage Array
_a_PHiLo : TODO: High-Low price array
_Provisional_PHiLo : TODO: Provisional High-Low price (when _Index is 0)
_Index : TODO: Where to draw the Fibonacci line
_FrontMargin : TODO: Fibonacci line front-margin
_BackMargin : TODO: Fibonacci line back-margin
Returns: TODO: No return value
Fibonacci(_a_Fibonacci, _a_PHiLo, _Provisional_PHiLo, _Index1, _FrontMargin1, _BackMargin1, _Transparent1, _Index2, _FrontMargin2, _BackMargin2, _Transparent2)
TODO: Draw a Fibonacci line
Parameters:
_a_Fibonacci : TODO: Fibonacci Percentage Array
_a_PHiLo : TODO: High-Low price array
_Provisional_PHiLo : TODO: Provisional High-Low price (when _Index is 0)
_Index1 : TODO: Where to draw the Fibonacci line 1
_FrontMargin1 : TODO: Fibonacci line front-margin 1
_BackMargin1 : TODO: Fibonacci line back-margin 1
_Transparent1 : TODO: Transparent rate 1
_Index2 : TODO: Where to draw the Fibonacci line 2
_FrontMargin2 : TODO: Fibonacci line front-margin 2
_BackMargin2 : TODO: Fibonacci line back-margin 2
_Transparent2 : TODO: Transparent rate 2
Returns: TODO: No return value
High_Low_Judgment(_Length, _Extension, _Difference)
TODO: Judges High-Low
Parameters:
_Length : TODO: High-Low Confirmation Length
_Extension : TODO: Length of extension when the difference did not open
_Difference : TODO: Difference size
Returns: TODO: _HiLo=High-Low flag 0:Neither high nor low、1:High、2:Low、3:High-Low
_PHi=high price、_PLo=low price、_IHi=High Price Index、_ILo=Low Price Index、
_Cnt=count、_ECnt=Extension count、
_DiffHi=Difference from Start(High)、_DiffLo=Difference from Start(Low)、
_StartHi=Start value(High)、_StartLo=Start value(Low)
High_Low_Data_AddedAndUpdated(_HiLo, _Histories, _PHi, _PLo, _IHi, _ILo, _DiffHi, _DiffLo, _a_PHiLo, _a_IHiLo, _a_FHiLo, _a_DHiLo)
TODO: Adds and updates High-Low related arrays from given parameters
Parameters:
_HiLo : TODO: High-Low flag
_Histories : TODO: Array size (High-Low length)
_PHi : TODO: Price Hi
_PLo : TODO: Price Lo
_IHi : TODO: Index Hi
_ILo : TODO: Index Lo
_DiffHi : TODO: Difference in High
_DiffLo : TODO: Difference in Low
_a_PHiLo : TODO: High-Low price array
_a_IHiLo : TODO: High-Low INDEX array
_a_FHiLo : TODO: High-Low flag array 1:High 2:Low
_a_DHiLo : TODO: High-Low Price Differential Array
Returns: TODO: _PHiLo price array、_IHiLo indexed array、_FHiLo flag array、_DHiLo price-matching array、
Provisional_PHiLo Provisional price、Provisional_IHiLo 暫定インデックス
High_Low(_a_PHiLo, _a_IHiLo, _a_FHiLo, _a_DHiLo, _a_Fibonacci, _Length, _Extension, _Difference, _Histories, _ShowZigZag, _ZigZagColor1, _ZigZagWidth1, _ZigZagColor2, _ZigZagWidth2, _ShowZigZagLabel, _ShowHighLowBar, _ShowTrendLine, _TrendMultiLine, _TrendStartWidth, _TrendEndWidth, _TrendIncreWidth, _TrendStartTrans, _TrendEndTrans, _TrendIncreTrans, _TrendColorMode, _TrendColor1_1, _TrendColor1_2, _TrendColor2_1, _TrendColor2_2, _ShowFibonacci1, _FibIndex1, _FibFrontMargin1, _FibBackMargin1, _FibTransparent1, _ShowFibonacci2, _FibIndex2, _FibFrontMargin2, _FibBackMargin2, _FibTransparent2, _ShowInfoTable1, _TablePosition1, _ShowInfoTable2, _TablePosition2)
TODO: Draw the contents of the High-Low array.
Parameters:
_a_PHiLo : TODO: High-Low price array
_a_IHiLo : TODO: High-Low INDEX array
_a_FHiLo : TODO: High-Low flag sequence 1:High 2:Low
_a_DHiLo : TODO: High-Low Price Differential Array
_a_Fibonacci : TODO: Fibonacci Gnar Matching
_Length : TODO: Length of confirmation
_Extension : TODO: Extension Length of extension when the difference did not open
_Difference : TODO: Difference size
_Histories : TODO: High-Low Length
_ShowZigZag : TODO: ZigZag Display
_ZigZagColor1 : TODO: Colors of ZigZag1
_ZigZagWidth1 : TODO: Width of ZigZag1
_ZigZagColor2 : TODO: Colors of ZigZag2
_ZigZagWidth2 : TODO: Width of ZigZag2
_ShowZigZagLabel : TODO: ZigZagLabel Display
_ShowHighLowBar : TODO: High-Low Bar Display
_ShowTrendLine : TODO: Trend Line Display
_TrendMultiLine : TODO: Trend Multi Line Display
_TrendStartWidth : TODO: Line width start value
_TrendEndWidth : TODO: Line width end value
_TrendIncreWidth : TODO: Line width increment value
_TrendStartTrans : TODO: Starting transmittance value
_TrendEndTrans : TODO: Transmittance End Value
_TrendIncreTrans : TODO: Increased transmittance value
_TrendColorMode : TODO: color mode
_TrendColor1_1 : TODO: Trend Color 1_1
_TrendColor1_2 : TODO: Trend Color 1_2
_TrendColor2_1 : TODO: Trend Color 2_1
_TrendColor2_2 : TODO: Trend Color 2_2
_ShowFibonacci1 : TODO: Fibonacci1 Display
_FibIndex1 : TODO: Fibonacci1 Index No.
_FibFrontMargin1 : TODO: Fibonacci1 Front margin
_FibBackMargin1 : TODO: Fibonacci1 Back Margin
_FibTransparent1 : TODO: Fibonacci1 Transmittance
_ShowFibonacci2 : TODO: Fibonacci2 Display
_FibIndex2 : TODO: Fibonacci2 Index No.
_FibFrontMargin2 : TODO: Fibonacci2 Front margin
_FibBackMargin2 : TODO: Fibonacci2 Back Margin
_FibTransparent2 : TODO: Fibonacci2 Transmittance
_ShowInfoTable1 : TODO: InfoTable1 Display
_TablePosition1 : TODO: InfoTable1 position
_ShowInfoTable2 : TODO: InfoTable2 Display
_TablePosition2 : TODO: InfoTable2 position
Returns: TODO: 無し
Webhook Starter Kit [HullBuster]
Introduction
This is an open source strategy which provides a framework for webhook enabled projects. It is designed to work out-of-the-box on any instrument triggering on an intraday bar interval. This is a full featured script with an emphasis on actual trading at a brokerage through the TradingView alert mechanism and without requiring browser plugins.
The source code is written in a self documenting style with clearly defined sections. The sections “communicate” with each other through state variables making it easy for the strategy to evolve and improve. This is an excellent place for Pine Language beginners to start their strategy building journey. The script exhibits many Pine Language features which will certainly ad power to your script building abilities.
This script employs a basic trend follow strategy utilizing a forward pyramiding technique. Trend detection is implemented through the use of two higher time frame series. The market entry setup is a Simple Moving Average crossover. Positions exit by passing through conditional take profit logic. The script creates ten indicators including a Zscore oscillator to measure support and resistance levels. The indicator parameters are exposed through 47 strategy inputs segregated into seven sections. All of the inputs are equipped with detailed tool tips to help you get started.
To improve the transition from simulation to execution, strategy.entry and strategy.exit calls show enhanced message text with embedded keywords that are combined with the TradingView placeholders at alert time. Thereby, enabling a single JSON message to generate multiple execution events. This is genius stuff from the Pine Language development team. Really excellent work!
This document provides a sample alert message that can be applied to this script with relatively little modification. Without altering the code, the strategy inputs can alter the behavior to generate thousands of orders or simply a few dozen. It can be applied to crypto, stocks or forex instruments. A good way to look at this script is as a webhook lab that can aid in the development of your own endpoint processor, impress your co-workers and have hours of fun.
By no means is a webhook required or even necessary to benefit from this script. The setups, exits, trend detection, pyramids and DCA algorithms can be easily replaced with more sophisticated versions. The modular design of the script logic allows you to incrementally learn and advance this script into a functional trading system that you can be proud of.
Design
This is a trend following strategy that enters long above the trend line and short below. There are five trend lines that are visible by default but can be turned off in Section 7. Identified, in frequency order, as follows:
1. - EMA in the chart time frame. Intended to track price pressure. Configured in Section 3.
2. - ALMA in the higher time frame specified in Section 2 Signal Line Period.
3. - Linear Regression in the higher time frame specified in Section 2 Signal Line Period.
4. - Linear Regression in the higher time frame specified in Section 2 Signal Line Period.
5. - DEMA in the higher time frame specified in Section 2 Trend Line Period.
The Blue, Green and Orange lines are signal lines are on the same time frame. The time frame selected should be at least five times greater than the chart time frame. The Purple line represents the trend line for which prices above the line suggest a rising market and prices below a falling market. The time frame selected for the trend should be at least five times greater than the signal lines.
Three oscillators are created as follows:
1. Stochastic - In the chart time frame. Used to enter forward pyramids.
2. Stochastic - In the Trend period. Used to detect exit conditions.
3. Zscore - In the Signal period. Used to detect exit conditions.
The Stochastics are configured identically other than the time frame. The period is set in Section 2.
Two Simple Moving Averages provide the trade entry conditions in the form of a crossover. Crossing up is a long entry and down is a short. This is in fact the same setup you get when you select a basic strategy from the Pine editor. The crossovers are configured in Section 3. You can see where the crosses are occurring by enabling Show Entry Regions in Section 7.
The script has the capacity for pyramids and DCA. Forward pyramids are enabled by setting the Pyramid properties tab with a non zero value. In this case add on trades will enter the market on dips above the position open price. This process will continue until the trade exits. Downward pyramids are available in Crypto and Range mode only. In this case add on trades are placed below the entry price in the drawdown space until the stop is hit. To enable downward pyramids set the Pyramid Minimum Span In Section 1 to a non zero value.
This implementation of Dollar Cost Averaging (DCA) triggers off consecutive losses. Each loss in a run increments a sequence number. The position size is increased as a multiple of this sequence. When the position eventually closes at a profit the sequence is reset. DCA is enabled by setting the Maximum DCA Increments In Section 1 to a non zero value.
It should be noted that the pyramid and DCA features are implemented using a rudimentary design and as such do not perform with the precision of my invite only scripts. They are intended as a feature to stress test your webhook endpoint. As is, you will need to buttress the logic for it to be part of an automated trading system. It is for this reason that I did not apply a Martingale algorithm to this pyramid implementation. But, hey, it’s an open source script so there is plenty of room for learning and your own experimentation.
How does it work
The overall behavior of the script is governed by the Trading Mode selection in Section 1. It is the very first input so you should think about what behavior you intend for this strategy at the onset of the configuration. As previously discussed, this script is designed to be a trend follower. The trend being defined as where the purple line is predominately heading. In BiDir mode, SMA crossovers above the purple line will open long positions and crosses below the line will open short. If pyramiding is enabled add on trades will accumulate on dips above the entry price. The value applied to the Minimum Profit input in Section 1 establishes the threshold for a profitable exit. This is not a hard number exit. The conditional exit logic must be satisfied in order to permit the trade to close. This is where the effort put into the indicator calibration is realized. There are four ways the trade can exit at a profit:
1. Natural exit. When the blue line crosses the green line the trade will close. For a long position the blue line must cross under the green line (downward). For a short the blue must cross over the green (upward).
2. Alma / Linear Regression event. The distance the blue line is from the green and the relative speed the cross is experiencing determines this event. The activation thresholds are set in Section 6 and relies on the period and length set in Section 2. A long position will exit on an upward thrust which exceeds the activation threshold. A short will exit on a downward thrust.
3. Exponential event. The distance the yellow line is from the blue and the relative speed the cross is experiencing determines this event. The activation thresholds are set in Section 3 and relies on the period and length set in the same section.
4. Stochastic event. The purple line stochastic is used to measure overbought and over sold levels with regard to position exits. Signal line positions combined with a reading over 80 signals a long profit exit. Similarly, readings below 20 signal a short profit exit.
Another, optional, way to exit a position is by Bale Out. You can enable this feature in Section 1. This is a handy way to reduce the risk when carrying a large pyramid stack. Instead of waiting for the entire position to recover we exit early (bale out) as soon as the profit value has doubled.
There are lots of ways to implement a bale out but the method I used here provides a succinct example. Feel free to improve on it if you like. To see where the Bale Outs occur, enable Show Bale Outs in Section 7. Red labels are rendered below each exit point on the chart.
There are seven selectable Trading Modes available from the drop down in Section 1:
1. Long - Uses the strategy.risk.allow_entry_in to execute long only trades. You will still see shorts on the chart.
2. Short - Uses the strategy.risk.allow_entry_in to execute short only trades. You will still see long trades on the chart.
3. BiDir - This mode is for margin trading with a stop. If a long position was initiated above the trend line and the price has now fallen below the trend, the position will be reversed after the stop is hit. Forward pyramiding is available in this mode if you set the Pyramiding value in the Properties tab. DCA can also be activated.
4. Flip Flop - This is a bidirectional trading mode that automatically reverses on a trend line crossover. This is distinctively different from BiDir since you will get a reversal even without a stop which is advantageous in non-margin trading.
5. Crypto - This mode is for crypto trading where you are buying the coins outright. In this case you likely want to accumulate coins on a crash. Especially, when all the news outlets are talking about the end of Bitcoin and you see nice deep valleys on the chart. Certainly, under these conditions, the market will be well below the purple line. No margin so you can’t go short. Downward pyramids are enabled for Crypto mode when two conditions are met. First the Pyramiding value in the Properties tab must be non zero. Second the Pyramid Minimum Span in Section 1 must be non zero.
6. Range - This is a counter trend trading mode. Longs are entered below the purple trend line and shorts above. Useful when you want to test your webhook in a market where the trend line is bisecting the signal line series. Remember that this strategy is a trend follower. It’s going to get chopped out in a range bound market. By turning on the Range mode you will at least see profitable trades while stuck in the range. However, when the market eventually picks a direction, this mode will sustain losses. This range trading mode is a rudimentary implementation that will need a lot of improvement if you want to create a reliable switch hitter (trend/range combo).
7. No Trade. Useful when setting up the trend lines and the entry and exit is not important.
Once in the trade, long or short, the script tests the exit condition on every bar. If not a profitable exit then it checks if a pyramid is required. As mentioned earlier, the entry setups are quite primitive. Although they can easily be replaced by more sophisticated algorithms, what I really wanted to show is the diminished role of the position entry in the overall life of the trade. Professional traders spend much more time on the management of the trade beyond the market entry. While your trade entry is important, you can get in almost anywhere and still land a profitable exit.
If DCA is enabled, the size of the position will increase in response to consecutive losses. The number of times the position can increase is limited by the number set in Maximum DCA Increments of Section 1. Once the position breaks the losing streak the trade size will return the default quantity set in the Properties tab. It should be noted that the Initial Capital amount set in the Properties tab does not affect the simulation in the same way as a real account. In reality, running out of money will certainly halt trading. In fact, your account would be frozen long before the last penny was committed to a trade. On the other hand, TradingView will keep running the simulation until the current bar even if your funds have been technically depleted.
Entry and exit use the strategy.entry and strategy.exit calls respectfully. The alert_message parameter has special keywords that the endpoint expects to properly calculate position size and message sequence. The alert message will embed these keywords in the JSON object through the {{strategy.order.alert_message}} placeholder. You should use whatever keywords are expected from the endpoint you intend to webhook in to.
Webhook Integration
The TradingView alerts dialog provides a way to connect your script to an external system which could actually execute your trade. This is a fantastic feature that enables you to separate the data feed and technical analysis from the execution and reporting systems. Using this feature it is possible to create a fully automated trading system entirely on the cloud. Of course, there is some work to get it all going in a reliable fashion. Being a strategy type script place holders such as {{strategy.position_size}} can be embedded in the alert message text. There are more than 10 variables which can write internal script values into the message for delivery to the specified endpoint.
Entry and exit use the strategy.entry and strategy.exit calls respectfully. The alert_message parameter has special keywords that my endpoint expects to properly calculate position size and message sequence. The alert message will embed these keywords in the JSON object through the {{strategy.order.alert_message}} placeholder. You should use whatever keywords are expected from the endpoint you intend to webhook in to.
Here is an excerpt of the fields I use in my webhook signal:
"broker_id": "kraken",
"account_id": "XXX XXXX XXXX XXXX",
"symbol_id": "XMRUSD",
"action": "{{strategy.order.action}}",
"strategy": "{{strategy.order.id}}",
"lots": "{{strategy.order.contracts}}",
"price": "{{strategy.order.price}}",
"comment": "{{strategy.order.alert_message}}",
"timestamp": "{{time}}"
Though TradingView does a great job in dispatching your alert this feature does come with a few idiosyncrasies. Namely, a single transaction call in your script may cause multiple transmissions to the endpoint. If you are using placeholders each message describes part of the transaction sequence. A good example is closing a pyramid stack. Although the script makes a single strategy.close() call, the endpoint actually receives a close message for each pyramid trade. The broker, on the other hand, only requires a single close. The incongruity of this situation is exacerbated by the possibility of messages being received out of sequence. Depending on the type of order designated in the message, a close or a reversal. This could have a disastrous effect on your live account. This broker simulator has no idea what is actually going on at your real account. Its just doing the job of running the simulation and sending out the computed results. If your TradingView simulation falls out of alignment with the actual trading account lots of really bad things could happen. Like your script thinks your are currently long but the account is actually short. Reversals from this point forward will always be wrong with no one the wiser. Human intervention will be required to restore congruence. But how does anyone find out this is occurring? In closed systems engineering this is known as entropy. In practice your webhook logic should be robust enough to detect these conditions. Be generous with the placeholder usage and give the webhook code plenty of information to compare states. Both issuer and receiver. Don’t blindly commit incoming signals without verifying system integrity.
Setup
The following steps provide a very brief set of instructions that will get you started on your first configuration. After you’ve gone through the process a couple of times, you won’t need these anymore. It’s really a simple script after all. I have several example configurations that I used to create the performance charts shown. I can share them with you if you like. Of course, if you’ve modified the code then these steps are probably obsolete.
There are 47 inputs divided into seven sections. For the most part, the configuration process is designed to flow from top to bottom. Handy, tool tips are available on every field to help get you through the initial setup.
Step 1. Input the Base Currency and Order Size in the Properties tab. Set the Pyramiding value to zero.
Step 2. Select the Trading Mode you intend to test with from the drop down in Section 1. I usually select No Trade until I’ve setup all of the trend lines, profit and stop levels.
Step 3. Put in your Minimum Profit and Stop Loss in the first section. This is in pips or currency basis points (chart right side scale). Remember that the profit is taken as a conditional exit not a fixed limit. The actual profit taken will almost always be greater than the amount specified. The stop loss, on the other hand, is indeed a hard number which is executed by the TradingView broker simulator when the threshold is breached.
Step 4. Apply the appropriate value to the Tick Scalar field in Section 1. This value is used to remove the pipette from the price. You can enable the Summary Report in Section 7 to see the TradingView minimum tick size of the current chart.
Step 5. Apply the appropriate Price Normalizer value in Section 1. This value is used to normalize the instrument price for differential calculations. Basically, we want to increase the magnitude to significant digits to make the numbers more meaningful in comparisons. Though I have used many normalization techniques, I have always found this method to provide a simple and lightweight solution for less demanding applications. Most of the time the default value will be sufficient. The Tick Scalar and Price Normalizer value work together within a single calculation so changing either will affect all delta result values.
Step 6. Turn on the trend line plots in Section 7. Then configure Section 2. Try to get the plots to show you what’s really happening not what you want to happen. The most important is the purple trend line. Select an interval and length that seem to identify where prices tend to go during non-consolidation periods. Remember that a natural exit is when the blue crosses the green line.
Step 7. Enable Show Event Regions in Section 7. Then adjust Section 6. Blue background fills are spikes and red fills are plunging prices. These measurements should be hard to come by so you should see relatively few fills on the chart if you’ve set this up as intended. Section 6 includes the Zscore oscillator the state of which combines with the signal lines to detect statistically significant price movement. The Zscore is a zero based calculation with positive and negative magnitude readings. You want to input a reasonably large number slightly below the maximum amplitude seen on the chart. Both rise and fall inputs are entered as a positive real number. You can easily use my code to create a separate indicator if you want to see it in action. The default value is sufficient for most configurations.
Step 8. Turn off Show Event Regions and enable Show Entry Regions in Section 7. Then adjust Section 3. This section contains two parts. The entry setup crossovers and EMA events. Adjust the crossovers first. That is the Fast Cross Length and Slow Cross Length. The frequency of your trades will be shown as blue and red fills. There should be a lot. Then turn off Show Event Regions and enable Display EMA Peaks. Adjust all the fields that have the word EMA. This is actually the yellow line on the chart. The blue and red fills should show much less than the crossovers but more than event fills shown in Step 7.
Step 9. Change the Trading Mode to BiDir if you selected No Trades previously. Look on the chart and see where the trades are occurring. Make adjustments to the Minimum Profit and Stop Offset in Section 1 if necessary. Wider profits and stops reduce the trade frequency.
Step 10. Go to Section 4 and 5 and make fine tuning adjustments to the long and short side.
Example Settings
To reproduce the performance shown on the chart please use the following configuration: (Bitcoin on the Kraken exchange)
1. Select XBTUSD Kraken as the chart symbol.
2. On the properties tab set the Order Size to: 0.01 Bitcoin
3. On the properties tab set the Pyramiding to: 12
4. In Section 1: Select “Crypto” for the Trading Model
5. In Section 1: Input 2000 for the Minimum Profit
6. In Section 1: Input 0 for the Stop Offset (No Stop)
7. In Section 1: Input 10 for the Tick Scalar
8. In Section 1: Input 1000 for the Price Normalizer
9. In Section 1: Input 2000 for the Pyramid Minimum Span
10. In Section 1: Check mark the Position Bale Out
11. In Section 2: Input 60 for the Signal Line Period
12. In Section 2: Input 1440 for the Trend Line Period
13. In Section 2: Input 5 for the Fast Alma Length
14. In Section 2: Input 22 for the Fast LinReg Length
15. In Section 2: Input 100 for the Slow LinReg Length
16. In Section 2: Input 90 for the Trend Line Length
17. In Section 2: Input 14 Stochastic Length
18. In Section 3: Input 9 Fast Cross Length
19. In Section 3: Input 24 Slow Cross Length
20. In Section 3: Input 8 Fast EMA Length
21. In Section 3: Input 10 Fast EMA Rise NetChg
22. In Section 3: Input 1 Fast EMA Rise ROC
23. In Section 3: Input 10 Fast EMA Fall NetChg
24. In Section 3: Input 1 Fast EMA Fall ROC
25. In Section 4: Check mark the Long Natural Exit
26. In Section 4: Check mark the Long Signal Exit
27. In Section 4: Check mark the Long Price Event Exit
28. In Section 4: Check mark the Long Stochastic Exit
29. In Section 5: Check mark the Short Natural Exit
30. In Section 5: Check mark the Short Signal Exit
31. In Section 5: Check mark the Short Price Event Exit
32. In Section 5: Check mark the Short Stochastic Exit
33. In Section 6: Input 120 Rise Event NetChg
34. In Section 6: Input 1 Rise Event ROC
35. In Section 6: Input 5 Min Above Zero ZScore
36. In Section 6: Input 120 Fall Event NetChg
37. In Section 6: Input 1 Fall Event ROC
38. In Section 6: Input 5 Min Below Zero ZScore
In this configuration we are trading in long only mode and have enabled downward pyramiding. The purple trend line is based on the day (1440) period. The length is set at 90 days so it’s going to take a while for the trend line to alter course should this symbol decide to node dive for a prolonged amount of time. Your trades will still go long under those circumstances. Since downward accumulation is enabled, your position size will grow on the way down.
The performance example is Bitcoin so we assume the trader is buying coins outright. That being the case we don’t need a stop since we will never receive a margin call. New buy signals will be generated when the price exceeds the magnitude and speed defined by the Event Net Change and Rate of Change.
Feel free to PM me with any questions related to this script. Thank you and happy trading!
CFTC RULE 4.41
These results are based on simulated or hypothetical performance results that have certain inherent limitations. Unlike the results shown in an actual performance record, these results do not represent actual trading. Also, because these trades have not actually been executed, these results may have under-or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity. Simulated or hypothetical trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will or is likely to achieve profits or losses similar to these being shown.
Financials on Chart█ OVERVIEW
This indicator displays your choice of up to 9 fundamentals on your chart.
█ FEATURES
You can configure the following attributes of the display:
• Its position on your chart.
• Automatic or custom height and width of rows.
• The size and color of text.
• The default background color (you can override it with a custom color for individual values).
• Conversion of values expressed in USD to one of the major currencies. Financials are normally expressed in quote currency.
Conversion to other currencies is only done when the symbol's quote currency is USD.
• Choose if the currency used for the financials is displayed. Note that some financials are calculated values that are not expressed in currency units.
No currency will be displayed for these values.
• Abbreviate large values.
For each value, you may:
• Pick one of the 222 financials available in Pine, or one of five values calculated from the financials (Market Cap, Earnings Yield, P/B Ratio, P/E Ratio and Price-To-Sales Ratio).
• Choose a period (see the "i" icon near the first value's fields in the script's inputs for a list of exceptions).
• Specify the value's precision.
• Change the legend displayed with the value.
• Adjust the text's size.
• Use a custom background.
█ LIMITATIONS
When changing the indicator's inputs, allow a few seconds for the change to be reflected in the display.
If your chart displays a symbol for which the configured financials cannot be fetched, an error will occur.
Not all periods are available for all fundamentals or for all markets. What financial data is available in Pine? will give you an overview of the available periods for each value. The page also contains the formulas used for the five values we calculate from the financials. This page shows the typical reporting frequency for different countries .
█ FINANCIALS
See What is Financial Data? and Why does Financial Data differ from other sources? for more information on the data used by this indicator.
This lists all the financials. Clicking on one will bring up more information about it:
CALCULATED
Market Capitalization
Earnings Yield
Price Book Ratio
Price Earnings Ratio
Price-To-Sales Ratio
INCOME STATEMENTS
After tax other income/expense
Average basic shares outstanding
Other COGS
Cost of goods
Deprecation and amortization
Diluted net income available to common stockholders
Diluted shares outstanding
Dilution adjustment
Discontinued operations
Basic EPS
Diluted EPS
EBIT
EBITDA
Equity in earnings
Gross profit
Taxes
Interest capitalized
Interest expense on debt
Non-controlling/minority interest
Net income before discontinued operations
Net income
Non-operating income, excl. interest expenses
Interest expense, net of interest capitalized
Non-operating interest income
Operating income
Operating expenses (excl. COGS)
Miscellaneous non-operating expense
Other operating expenses, total
Preferred dividends
Pretax equity in earnings
Pretax income
Research & development
Selling/general/admin expenses, other
Selling/general/admin expenses, total
Non-operating income, total
Total operating expenses
Total revenue
Unusual income/expense
BALANCE SHEET
Accounts payable
Accounts receivable - trade, net
Accrued payroll
Accumulated depreciation, total
Additional paid-in capital/Capital surplus
Tangible book value per share
Book value per share
Capitalized lease obligations
Capital and operating lease obligations
Cash & equivalents
Cash and short term investments
Common equity, total
Common stock par/Carrying value
Current portion of LT debt and capital leases
Deferred income, current
Deferred income, non-current
Deferred tax assets
Deferred tax liabilities
Dividends payable
Goodwill, net
Income tax payable
Net intangible assets
Inventories - finished goods
Inventories - progress payments & other
Inventories - raw materials
Inventories - work in progress
Investments in unconsolidated subsidiaries
Long term debt excl. lease liabilities
Long term debt
Long term investments
Note receivable - long term
Other long term assets, total
Minority interest
Notes payable
Operating lease liabilities
Other common equity
Other current assets, total
Other current liabilities
Other intangibles, net
Other investments
Other liabilities, total
Other receivables
Other short term debt
Paid in capital
Gross property/plant/equipment
Net property/plant/equipment
Preferred stock, carrying value
Prepaid expenses
Provision for risks & charge
Retained earnings
Short term debt excl. current portion of LT debt
Short term debt
Short term investments
Shareholders' equity
Total assets
Total current assets
Total current liabilities
Total debt
Total equity
Total inventory
Total liabilities
Total liabilities & shareholders' equities
Total non-current assets
Total non-current liabilities
Total receivables, net
Treasury stock - common
CASHFLOW
Amortization
Capital expenditures - fixed assets
Capital expenditures
Capital expenditures - other assets
Cash from financing activities
Cash from investing activities
Cash from operating activities
Deferred taxes (cash flow)
Depreciation & amortization (cash flow)
Change in accounts payable
Change in accounts receivable
Change in accrued expenses
Change in inventories
Change in other assets/liabilities
Change in taxes payable
Changes in working capital
Common dividends paid
Depreciation/depletion
Free cash flow
Funds from operations
Issuance/retirement of debt, net
Issuance/retirement of long term debt
Issuance/retirement of other debt
Issuance/retirement of short term debt
Issuance/retirement of stock, net
Net income (cash flow)
Non-cash items
Other financing cash flow items, total
Financing activities - other sources
Financing activities - other uses
Other investing cash flow items, total
Investing activities - other sources
Investing activities - other uses
Preferred dividends paid
Purchase/acquisition of business
Purchase of investments
Repurchase of common & preferred stock
Purchase/sale of business, net
Purchase/sale of investments, net
Reduction of long term debt
Sale of common & preferred stock
Sale of fixed assets & businesses
Sale/maturity of investments
Issuance of long term debt
Total cash dividends paid
STATISTICS
Accruals
Altman Z-score
Asset turnover
Beneish M-score
Buyback yield %
Cash conversion cycle
Cash to debt ratio
COGS to revenue ratio
Current ratio
Days sales outstanding
Days inventory
Days payable
Debt to assets ratio
Debt to EBITDA ratio
Debt to equity ratio
Debt to revenue ratio
Dividend payout ratio %
Dividend yield %
Dividends per share - common stock primary issue
EPS estimates
EPS basic one year growth
EPS diluted one year growth
EBITDA margin %
Effective interest rate on debt %
Enterprise value to EBITDA ratio
Enterprise value
Equity to assets ratio
Enterprise value to EBIT ratio
Enterprise value to revenue ratio
Float shares outstanding
Free cash flow margin %
Fulmer H factor
Goodwill to assets ratio
Graham's number
Gross margin %
Gross profit to assets ratio
Interest coverage
Inventory to revenue ratio
Inventory turnover
KZ index
Long term debt to total assets ratio
Net current asset value per share
Net income per employee
Net margin %
Number of employees
Operating earnings yield %
Operating margin %
PEG ratio
Piotroski F-score
Price earnings ratio forward
Price sales ratio forward
Price to free cash flow ratio
Price to tangible book ratio
Quality ratio
Quick ratio
Research & development to revenue ratio
Return on assets %
Return on equity adjusted to book value %
Return on equity %
Return on invested capital %
Return on tangible assets %
Return on tangible equity %
Revenue one year growth
Revenue per employee
Revenue estimates
Shares buyback ratio %
Sloan ratio %
Springate score
Sustainable growth rate
Tangible common equity ratio
Tobin's Q (approximate)
Total common shares outstanding
Zmijewski score
█ NOTES
This script uses the Pine financial() function to fetch the values it displays.
Look first. Then leap.
InariN CloudSInariN CloudS (INCS) is my custom model of InariN.
I usually use INCS in 300 ticks (other software) and 5 minutes charts for day trading.
Please read script "InariN simple" for basic usage.
I share background and fundamental ideas of day trading and INCS here.
I start with the practical conclusion and then explain INCS.
Maybe you'll notice that most indicators are unnecessary at the end of this text.
Anyway I compile fundamental ideas that I wanted to know as a beginner.
(I'll update to finish this text, please wait for some time.)
///Premise of trading///
Market's purpose...facilitating trading
Trader's purpose...making money
Market is stronger than trader and trader need adjust to market.
However trader have controllable side.
Market's control...Trend, Volatility
Trader's control...Money management, Making Risk:Reward, Choosing and exercising trading strategy
///Simple rule (Conclusion)///
I made simple rule "Just Do It Now" to check essential ideas on every trade.
Traders can use thousands of indicators but only use three choices "Buy, Sell and No trade".
If you have bad result, you had better suspect not your indicators but your three choices at first.
(This is one of the best advice I have ever heard by N jijii.)
Setup 9.1 by Larry Williams Setup 9.1 by Larry Williams.
The indicator will give text signal and change the color of the signal candle, being based exclusively on the setup 9.1
----------//---------------
PT-BR
Setup 9.1 do Larry Williams.
O indicador irá dar sinal de texto e alterar a cor do candle de sinal, se baseando exclusivamente no setup 9.1
Multi Bar OHLC Compare Panel (Floating Grid)Multi Bar OHLC Compare Panel by RagingRocketBull 2019
version 1.0
This indicator lets you compare OHLCV values from several specified bars. Bars can be dynamic/persistent.
You can also use it as an alternate OHLC panel if you don't like small font of the native TradingView panel.
It uses Pinescript v4 to output data dynamically as string labels in a horiz/vertical grid.
Features:
- Floating Panel with customizable horiz/vertical layout and grid spacing
- Support for up to 5 OHLC bars (highlighted with markers)
- Outputs Bar #/index, OHLCV, Bar Change Value/%, Exchange/Ticker, Timeframe, Timestamp strings
- Dynamic (fixed offset)/Persistent bars (fixed time)
- Show/Hide parts of strings
- Full output string customization, including text size, date/time format and delimiters
- 2 Anchor points for panel offset: cur bar high or range high
- Bar Change can change color
Usage:
- specify at least 1 bar index as OHLC source
- select anchor point to position the panel
- select horiz/vertical grid layout
- adjust horiz/vertical spacing
- customize output strings as needed
Notes:
- this indicator uses Pinescript v3 Compatibity Framework
- both bars 1,2 are required for log scale adjustment to work
- you can't attach the panel to screen's top/bottom and must use offset/anchor because, unlike plotshape, string labels don't support yloc=yloc.top/bottom, only yloc.above/belowbar
- you can't precisely align strings in a grid because there's no label.get_width/height to calculate mid/left points, only get_x/y/text. Alignment will break depending on string length, zoom and change color option on/off
- bar change is rendered as a separate label when change color is enabled (2 panels total) and merged into the main panel when disabled (single panel)
- you can't change the order of strings as playing with the natural order of things isn't the best of ideas
- you can modify the script to compare up to 50 OHLC bars, but do you need that much power? Of course, you do.
- you can't set color/style for string labels in Style UI, so a few extra settings were added.
- bar index is limited to 5000 for free accounts (10000 for paid), will show an error when exceeded, also when it exceeds the total number of bars in history
- in persistent bars mode all bars with index > 0 are considered persistent, bar 0 always remains a dynamic bar
- persistent bars' offset is reset: in replay mode on exit or when price reaches cur bar, or when panel layout is changed from h to v in both replay/realtime modes
- initial pos of each persistent bar relative to the first realtime bar anchor doesn't change during session - new persistent bars introduced during session are attached to the most recent cur bar anchor
P.S. Everything is proceeding as I have foreseen
Vol-Pace Projected-ATR-ADX-Alert-MAThe VolSC indicator analyzes stock volume trends with a focus on the Pace metric, which projects today's volume as a percentage of the 30-day average, highlighting unusual activity (e.g., over 200% turns bright green with alerts). The phantom projection bar, a wide green histogram to the right of the last bar, visually represents this projected volume on daily charts only, aiding quick identification of potential volume surges without cluttering intraday or weekly views. Additional features include ADX strength, ATR averages, and customizable table display for comprehensive insights.
Key Features:
* Primary Indicator: Volume with ADX (Average Directional Index) text.
* Pacing and Alerts: Calculates the volume pace for the day. Features an unusual volume alert with an adjustable threshold (e.g., 200%).
* Volume Projection: Projects a visual "Phantom Volume" for the day, offset to the right of the actual volume bar.
* ATR Indicator: Displays the 2x ATR (Average True Range) value as text.
* Volume Average: Displays the ADV (Average Daily Volume) Moving Average as text.
* Customization: Most settings are adjustable.
Stoch + RSI DashboardIndicator Description
MTF Stochastic + RSI Dashboard FLEX with STRONG Alerts
A compact, multi-timeframe dashboard that shows Stochastic %K/%D, RSI and signal states across user-defined timeframes. Columns can be toggled on/off to keep the panel as small as you need. Signal texts and colors are fully customizable. The table can be placed in any chart corner, and the background color & opacity are adjustable for perfect readability.
What it shows
• For each selected timeframe: %K, %D, a signal cell (Bullish/Bearish/Strong), RSI value, and RSI state (Overbought/Oversold/Neutral).
• Timeframes are displayed as friendly labels (e.g., 60 → 1h, W → 1w, 3D → 3d).
Signals & logic
• Bullish/Bearish when %K and %D show a sufficient gap (or an optional confirmed cross).
• Strong Bullish when both %K and %D are below the “Strong Bullish max” threshold.
• Strong Bearish when both %K and %D are above the “Strong Bearish min” threshold.
• Optional confirmation: RSI < 30 for Strong Bullish, RSI > 70 for Strong Bearish.
Alerts
• Global alerts for any selected timeframes when a STRONG BULLISH or STRONG BEARISH event occurs.
Key options
• Column visibility toggles (TF, %K, %D, Signal, RSI, RSI Status).
• Custom signal texts & colors.
• Dashboard position: top-left / top-right / bottom-left / bottom-right.
• Table background color + opacity (0 = opaque, 100 = fully transparent).
• Sensitivity (minimum %K–%D gap) and optional “cross-only” mode.
• Customizable timeframes for display and for alerts.
Default settings
• Stochastic: K=5, D=3, SmoothK=3
• RSI length: 14
• Decimals: 1
• Strong Bullish max: 20
• Strong Bearish min: 80
• Default TFs & alerts: 3m, 15m, 1h, 3h, 6h, 12h, 1d, 3d, 1w
Volume Spike Alert & Overlay"Volume Spike Alert & Overlay" highlights unusually high trading volume on a chart. It calculates whether the current volume exceeds a user-defined percentage above the historical average and triggers an alert if it does. The information is also displayed in a customizable on-screen table.
What It Does
Monitors volume for each bar and compares it to an average over a user-defined lookback period.
Supports multiple smoothing methods (SMA, EMA, WMA, RMA) for calculating the average volume.
Triggers an alert when current volume exceeds the threshold percentage above the average.
Displays a table on the chart with:
Current Volume
Average Volume
Threshold Percentage
Optional empty row for spacing/formatting
How It Works
User Inputs:
lookbackPeriods: Number of bars used to calculate the average volume.
thresholdPercent: % above the average that triggers a volume spike alert.
smoothingType: Type of moving average used for volume calculation.
textColor, bgColor: Formatting for the display table.
tablePositionInput: Where the table appears on the chart (e.g., Bottom Right).
Toggles for showing/hiding parts of the table.
Volume Calculations:
Calculates current bar's volume.
Calculates average volume using the selected smoothing method.
Computes the threshold: avgVol * (1 + thresholdPercent / 100).
Compares current volume to threshold.
Table Display:
Dynamically creates a table with volume stats.
Adds rows based on user preferences.
Alerts:
alertcondition fires when currentVol crosses above the calculated threshold.
Message: "Volume Threshold Exceeded"
Usage Examples
Example 1: Spotting High Activity
Apply the script to a stock like AAPL on a 5-minute chart.
Set lookbackPeriods to 20 and thresholdPercent to 30.
Use EMA for more reactive volume tracking.
When volume spikes more than 30% above the 20-period EMA, an alert triggers.
Example 2: Day Trading Filter
For scalpers, apply it to a 1-minute crypto chart (e.g., BTC/USDT).
Set thresholdPercent to 50 to catch only strong surges.
Position the table at the top left and reduce visible info for a clean layout.
Example 3: Long-Term Context
On a daily chart, use SMA and set lookbackPeriods to 50.
Helps identify breakout moves supported by strong volume.
How this is different from Trading View's Volume indicator:
The standard volume plot from trading view allows users to set a alert when the average line is crossed, but it does not allow you to set a custom percentage at which to trigger an alert. This indicator will allow you to set any percentage you wish to monitor and above that percentage threshold will trigger your alert.
===== ORIGINAL DESCRIPTION =====
Volume Spike Alert & Overlay
This indicator will display the following as an overlay on your chart:
Current volume
Average Volume
Threshold for Alert
Description:
This indicator will display the current bar volume based on the chart time frame,
display the average volume based on selected conditions,
allow user selectable threshold over the average volume to trigger an alert.
Options:
Average lookback period
Smoothing type
Alert Threshold %
Enable / Disable Each Value
Change Text Color
Change Background Color
Change Table location
Add/Remove extra row for placement in top corner
Usage Example:
I use this indicator to alert when the current volume exceeds the average volume by a specified percentage to alert to volume spikes.
Set the threshold to 25% in the settings
Create an alert by clicking on the 3 dots on the right of the indicator title on the chart
When the threshold is exceeded the alert will trigger
Intrabar DistributionThe Intrabar Distribution publication is an extension of the Intrabar BoxPlot publication. Besides a boxplot, it showcases price and volume distribution using intrabar Lower Timeframe (LTF) values (close) which can be displayed on the chart or in a separate pane.
🔶 USAGE
Intrabar Distribution has several features, users can display:
Recent candle for comparison against the other features
Boxplot of recent candle
Price distribution (optionally displayed as a curve)
Volume distribution
🔹 Recent candle / Boxplot
The middle 50% intrabar close values (Interquartile range, or IQR) are shown as a box, where the upper limit is percentile 75 (p75), and the lower limit is percentile 25 (p25). The dashed lines show the addition/subtraction of 1.5*IQR. All values out of range are considered outliers. They are displayed as white dots within the IQR*1.5 range or white X's when beyond the IQR*3 range (extreme outliers).
By showing the middle 50% intrabar values through a box, we can more easily see where the intrabar activity is mainly situated.
Note in the example above an upward-directed candle with a negative volume delta, displayed as a red box and dot (see further).
As seen in the following example, compared against the recent candle (grey candle at the left), most of the intrabar activity lies just beneath the opening price.
Note that results will be more accurate when more data is available, which can be done by making the difference between the current timeframe and the intrabar timeframe large enough.
🔹 Price / Volume distribution
The price and volume distribution can be helpful for highlighting areas of interest.
Here, we can see two areas where intrabar closing prices are mainly positioned.
The following example shows three successive bars. The recent bar is displayed on the left side, together with the volume distribution. The boxplot and price distribution are displayed on the right.
You can see the difference between volume and price distribution.
At the first bar, most price activity is at the top, while most of the volume was generated at the bottom; in other words, the price got briefly in the bottom region, with high volume before it returned.
At the second bar, price and volume are relatively equally distributed, which fits for indecisiveness.
The third bar shows more volume at a higher region; most intrabar closing prices are above the closing price.
Following example shows the same with 'Curve shaped' enabled (Settings: 'Price Distribution')
When 'Curve shaped' is enabled, lines/labels are shown with the standard deviation distance.
A blue 'guide line' can be enabled for easier interpretation.
🔹 Volume Delta
When there is a discrepancy between the delta volume and direction of the candle, this will be displayed as follows:
Red candle: when the sum of the volume of green intrabars is higher than the sum of the volume of red intrabars, the 'mean dot' will be coloured green.
Green candle: when the sum of the volume of red intrabars is higher than the sum of the volume of green intrabars, the 'mean dot' will be coloured red.
🔶 DETAILS
The intrabar values are sorted and split in parts/sections. The number of values in each section is displayed as a white line
The same principle applies to volume distribution, where the sum of volume per section is displayed as an orange area.
The boxplot displays several price values
Last close price
Highest / lowest intrabar close price
Median
p25 / p75
🔹 LTF settings
When 'Auto' is enabled (Settings, LTF), the LTF will be the nearest possible x times smaller TF than the current TF. When 'Premium' is disabled, the minimum TF will always be 1 minute to ensure TradingView plans lower than Premium don't get an error.
Examples with current Daily TF (when Premium is enabled):
500 : 3 minute LTF
1500 (default): 1 minute LTF
5000: 30 seconds LTF (1 minute if Premium is disabled)
🔶 SETTINGS
Location: Chart / Pane (when pane is opted, move the indicator to a separate pane as well)
Parts: divides the intrabar close values into parts/sections
Offset: offsets every drawing at once
Width: width of drawings, only applicable on "location: chart"
Label size: size of price labels
🔹 LTF
LTF: LTF setting
Auto + multiple: Adjusts the initial set LTF
Premium: Enable when your TradingView plan is Premium or higher
🔹 Current Bar
Display toggle + color setting
Offset: offsets only the 'Current Bar' drawing
🔹 Intrabar Boxplot
Display toggle + Colors, dependable on different circumstances.
Up: Price goes up, with more bullish than bearish intrabar volume.
Up-: Price goes up, with more bearish than bullish intrabar volume.
Down: Price goes down, with more bearish than bullish intrabar volume.
Down+: Price goes down, with more bullish than bearish intrabar volume.
Offset: offsets only the 'Boxplot' drawing
🔹 Price distribution
Display toggle + Color.
Curve Shaped
Guide Lines: Display 2 blue lines
Display Price: Show price of 'x' standard deviation
Offset: offsets only the 'Price distribution' drawing
Label size: size of price labels (standard deviation)
🔹 Volume distribution
Display toggle + Color.
Offset: offsets only the 'Volume distribution' drawing
🔹 Table
Show TF: Show intrabar Timeframe.
Textcolor
Size Table: Text Size
nPOC Levels by Tyler### Explanation of the Pine Script
This Pine Script identifies and displays weekly naked Points of Control (nPOCs) on a TradingView chart. An nPOC represents a Point of Control (POC) from a previous week that has not been revisited by price action in subsequent weeks. These nPOCs are extended to the right as horizontal lines, indicating potential support or resistance levels.
#### Script Overview
1. **Indicator Declaration:**
```pinescript
//@version=5
indicator("Weekly nPOCs", overlay=true)
```
- The script is defined as a version 5 Pine Script.
- The `indicator` function sets the script's name ("Weekly nPOCs") and specifies that the indicator should be overlaid on the price chart (`overlay=true`).
2. **Function to Calculate POC:**
```pinescript
f_poc(_hl2, _vol) =>
var float vol_profile = na
if (na(vol_profile))
vol_profile := array.new_float(100, 0.0)
_bin_size = (high - low) / 100
for i = 0 to 99
if _hl2 >= low + i * _bin_size and _hl2 < low + (i + 1) * _bin_size
array.set(vol_profile, i, array.get(vol_profile, i) + _vol)
max_volume = array.max(vol_profile)
poc_index = array.indexof(vol_profile, max_volume)
poc_price = low + poc_index * _bin_size + _bin_size / 2
poc_price
```
- The function `f_poc` calculates the Point of Control (POC) for a given period.
- It takes two parameters: `_hl2` (the average of the high and low prices) and `_vol` (volume).
- A volume profile array (`vol_profile`) is initialized to store volume data across different price bins.
- The price range between the high and low is divided into 100 bins (`_bin_size`).
- The function iterates over each bin, accumulating the volumes for prices within each bin.
- The bin with the maximum volume is identified as the POC (`poc_price`).
3. **Variables to Store Weekly Data:**
```pinescript
var float poc = na
var float prev_poc = na
var line poc_lines = na
if na(poc_lines)
poc_lines := array.new_line(0)
```
- `poc` stores the current week's POC.
- `prev_poc` stores the previous week's POC.
- `poc_lines` is an array to store lines representing nPOCs. The array is initialized if it is `na` (not initialized).
4. **Calculate Weekly POC:**
```pinescript
is_new_week = ta.change(time('W')) != 0
if (is_new_week)
prev_poc := poc
poc := f_poc(hl2, volume)
if not na(prev_poc)
line new_poc_line = line.new(x1=bar_index, y1=prev_poc, x2=bar_index + 100, y2=prev_poc, color=color.red, width=2)
label.new(x=bar_index, y=prev_poc, text="nPOC", style=label.style_label_down, color=color.red, textcolor=color.white)
array.push(poc_lines, new_poc_line)
```
- `is_new_week` checks if the current bar is the start of a new week using the `ta.change(time('W'))` function.
- If it's a new week, the previous week's POC is stored in `prev_poc`, and the current week's POC is calculated using `f_poc`.
- If `prev_poc` is not `na`, a new line (`new_poc_line`) representing the nPOC is created, extending it to the right (for 100 bars).
- A label is created at the `prev_poc` level, marking it as "nPOC".
- The new line is added to the `poc_lines` array.
5. **Remove Old Lines:**
```pinescript
if array.size(poc_lines) > 52
line.delete(array.shift(poc_lines))
```
- This section ensures that only the last 52 weeks of nPOCs are kept to avoid cluttering the chart.
- If the `poc_lines` array contains more than 52 lines, the oldest line is deleted using `array.shift`.
6. **Plot the Current Week's POC as a Reference:**
```pinescript
plot(poc, title="Current Weekly POC", color=color.blue, linewidth=2, style=plot.style_line)
```
- The current week's POC is plotted as a blue line on the chart for reference.
#### Summary
This script calculates and identifies weekly Points of Control (POCs) and marks them as nPOCs if they remain untouched by subsequent price action. These nPOCs are displayed as horizontal lines extending to the right, providing traders with potential support or resistance levels. The script also manages the number of lines plotted to maintain a clear and uncluttered chart.
itradesize /\ Silver Bullet x Macro x KillzoneThis indicator shows the best way to annotate ICT Killzones, Silver Bullet and Macro times on the chart. With the help of a new pane, it will not distract your chart and will not cause any distractions to your eye, or brain but you can see when will they happen.
The indicator also draws everything beforehand when a proper new day starts.
You can customize them how you want to show up.
Collapsed or full view?
You can hide any of them and keep only the ones you would like to.
All the colors can be customized, texts & sizes or just use shortened texts and you are also able to hide those drawings which are older than the actual day.
You should minimize the pane where the script has been automatically drawn to therefore you will have the best experience and not show any distractions.
The script automatically shows the time-based boxes, based on the New York timezone.
Killzone Time windows ( for indices ):
London KZ 02:00 - 05:00
New York AM KZ 07:00 - 10:00
New York PM KZ 13:30 - 16:00
Silver Bullet times:
03:00 - 04:00
10:00 - 11:00
14:00 - 15:00
Macro times:
02:33 - 03:00
04:03 - 04:30
08:50 - 0910
09:50 - 10:10
10:50 - 11:10
11:50 - 12:50
ZigzagLiteLibrary "ZigzagLite"
Lighter version of the Zigzag Library. Without indicators and sub-component divisions
method getPrices(pivots)
Gets the array of prices from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot prices
method getBars(pivots)
Gets the array of bars from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot bar indices
method getPoints(pivots)
Gets the array of chart.point from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot points
method getPoints(this)
Namespace types: Zigzag
Parameters:
this (Zigzag)
method calculate(this, ohlc, ltfHighTime, ltfLowTime)
Calculate zigzag based on input values and indicator values
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
ohlc (float ) : Array containing OHLC values. Can also have custom values for which zigzag to be calculated
ltfHighTime (int) : Used for multi timeframe zigzags when called within request.security. Default value is current timeframe open time.
ltfLowTime (int) : Used for multi timeframe zigzags when called within request.security. Default value is current timeframe open time.
Returns: current Zigzag object
method calculate(this)
Calculate zigzag based on properties embedded within Zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: current Zigzag object
method nextlevel(this)
Namespace types: Zigzag
Parameters:
this (Zigzag)
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing ) : array
Returns: void
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawingPL
Parameters:
this (ZigzagDrawingPL ) : array
Returns: void
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
Returns: ZigzagDrawing object
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawingPL object without trying to calculate
Namespace types: ZigzagDrawingPL
Parameters:
this (ZigzagDrawingPL) : ZigzagDrawingPL object
Returns: ZigzagDrawingPL object
method drawfresh(this, ohlc)
draws fresh zigzag based on properties embedded in ZigzagDrawing object
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
Returns: ZigzagDrawing object
method drawcontinuous(this, ohlc)
draws zigzag based on the zigzagmatrix input
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
Returns:
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high (series float) : High price of candle forming the pivot
_low (series float) : Low price of candle forming the pivot
length (series int) : Pivot length
pHighBar (series int) : represents number of bar back the pivot High occurred.
pLowBar (series int) : represents number of bar back the pivot Low occurred.
pHigh (series float) : Pivot High Price
pLow (series float) : Pivot Low Price
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point (chart.point) : pivot point coordinates
dir (series int) : direction of the pivot. Valid values are 1, -1, 2, -2
level (series int) : is used for multi level zigzags. For single level, it will always be 0
ratio (series float) : Price Ratio based on previous two pivots
sizeRatio (series float)
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot (series bool) : true if the calculation resulted in new pivot
doublePivot (series bool) : true if the calculation resulted in two pivots on same bar
updateLastPivot (series bool) : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length (series int) : Zigzag length. Default value is 5
numberOfPivots (series int) : max number of pivots to hold in the calculation. Default value is 20
offset (series int) : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level (series int) : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots (Pivot ) : array which holds the last n pivots calculated.
flags (ZigzagFlags) : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine (series line) : Line joining two pivots
zigzagLabel (series label) : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor (series color) : Zigzag line color. Default is color.blue
lineWidth (series int) : Zigzag line width. Default is 1
lineStyle (series string) : Zigzag line style. Default is line.style_solid.
showLabel (series bool) : If set, the drawing will show labels on each pivot. Default is false
textColor (series color) : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects (series int) : Max number of zigzag lines to display. Default is 300
xloc (series string) : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
curved (series bool) : Boolean field to print curved zigzag - used only with polyline implementation
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
drawings (ZigzagObject ) : array which contains lines and labels of zigzag drawing.
ZigzagDrawingPL
Object which holds complete zigzag drawing objects and properties - polyline version
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
zigzagLabels (label )
zigzagLine (series polyline) : polyline object of zigzag lines
ZigzagLibrary "Zigzag"
Zigzag related user defined types. Depends on DrawingTypes library for basic types
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Pivot object to string representation
Namespace types: Pivot
Parameters:
this (Pivot) : ZigzagTypes/Pivot
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Pivot
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts Array of Pivot objects to string representation
Namespace types: Pivot
Parameters:
this (Pivot ) : Pivot object array
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of Pivot object array
method tostring(this)
Converts ZigzagFlags object to string representation
Namespace types: ZigzagFlags
Parameters:
this (ZigzagFlags) : ZigzagFlags object
Returns: string representation of ZigzagFlags
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Zigzag object to string representation
Namespace types: Zigzag
Parameters:
this (Zigzag) : ZigzagTypes/Zigzagobject
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Zigzag
method calculate(this, ohlc, indicators, indicatorNames)
Calculate zigzag based on input values and indicator values
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
ohlc (float ) : Array containing OHLC values. Can also have custom values for which zigzag to be calculated
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: current Zigzag object
method calculate(this)
Calculate zigzag based on properties embedded within Zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: current Zigzag object
method nextlevel(this)
Calculate Next Level Zigzag based on the current calculated zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: Next Level Zigzag object
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing ) : array
Returns: void
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
Returns: ZigzagDrawing object
method drawfresh(this, ohlc, indicators, indicatorNames)
draws fresh zigzag based on properties embedded in ZigzagDrawing object
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: ZigzagDrawing object
method drawcontinuous(this, ohlc, indicators, indicatorNames)
draws zigzag based on the zigzagmatrix input
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns:
method getPrices(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
method getBars(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
Indicator
Indicator is collection of indicator values applied on high, low and close
Fields:
indicatorHigh (series float) : Indicator Value applied on High
indicatorLow (series float) : Indicator Value applied on Low
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high (series float) : High price of candle forming the pivot
_low (series float) : Low price of candle forming the pivot
length (series int) : Pivot length
pHighBar (series int) : represents number of bar back the pivot High occurred.
pLowBar (series int) : represents number of bar back the pivot Low occurred.
pHigh (series float) : Pivot High Price
pLow (series float) : Pivot Low Price
indicators (Indicator ) : Array of Indicators - allows to add multiple
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point (chart.point) : pivot point coordinates
dir (series int) : direction of the pivot. Valid values are 1, -1, 2, -2
level (series int) : is used for multi level zigzags. For single level, it will always be 0
componentIndex (series int) : is the lower level zigzag array index for given pivot. Used only in multi level Zigzag Pivots
subComponents (series int) : is the number of sub waves per each zigzag wave. Only applicable for multi level zigzags
microComponents (series int) : is the number of base zigzag components in a zigzag wave
ratio (series float) : Price Ratio based on previous two pivots
sizeRatio (series float)
subPivots (Pivot )
indicatorNames (string ) : Names of the indicators applied on zigzag
indicatorValues (float ) : Values of the indicators applied on zigzag
indicatorRatios (float ) : Ratios of the indicators applied on zigzag based on previous 2 pivots
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot (series bool) : true if the calculation resulted in new pivot
doublePivot (series bool) : true if the calculation resulted in two pivots on same bar
updateLastPivot (series bool) : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length (series int) : Zigzag length. Default value is 5
numberOfPivots (series int) : max number of pivots to hold in the calculation. Default value is 20
offset (series int) : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level (series int) : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots (Pivot ) : array which holds the last n pivots calculated.
flags (ZigzagFlags) : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine (series line) : Line joining two pivots
zigzagLabel (series label) : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor (series color) : Zigzag line color. Default is color.blue
lineWidth (series int) : Zigzag line width. Default is 1
lineStyle (series string) : Zigzag line style. Default is line.style_solid.
showLabel (series bool) : If set, the drawing will show labels on each pivot. Default is false
textColor (series color) : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects (series int) : Max number of zigzag lines to display. Default is 300
xloc (series string) : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
drawings (ZigzagObject ) : array which contains lines and labels of zigzag drawing.
ZigzagTypesLibrary "ZigzagTypes"
Zigzag related user defined types. Depends on DrawingTypes library for basic types
Indicator
Indicator is collection of indicator values applied on high, low and close
Fields:
indicatorHigh : Indicator Value applied on High
indicatorLow : Indicator Value applied on Low
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high : High price of candle forming the pivot
_low : Low price of candle forming the pivot
length : Pivot length
pHighBar : represents number of bar back the pivot High occurred.
pLowBar : represents number of bar back the pivot Low occurred.
pHigh : Pivot High Price
pLow : Pivot Low Price
indicators : Array of Indicators - allows to add multiple
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point : pivot point coordinates
dir : direction of the pivot. Valid values are 1, -1, 2, -2
level : is used for multi level zigzags. For single level, it will always be 0
ratio : Price Ratio based on previous two pivots
indicatorNames : Names of the indicators applied on zigzag
indicatorValues : Values of the indicators applied on zigzag
indicatorRatios : Ratios of the indicators applied on zigzag based on previous 2 pivots
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot : true if the calculation resulted in new pivot
doublePivot : true if the calculation resulted in two pivots on same bar
updateLastPivot : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length : Zigzag length. Default value is 5
numberOfPivots : max number of pivots to hold in the calculation. Default value is 20
offset : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots : array which holds the last n pivots calculated.
flags : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine : Line joining two pivots
zigzagLabel : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor : Zigzag line color. Default is color.blue
lineWidth : Zigzag line width. Default is 1
lineStyle : Zigzag line style. Default is line.style_solid.
showLabel : If set, the drawing will show labels on each pivot. Default is false
textColor : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects : Max number of zigzag lines to display. Default is 300
xloc : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
properties : ZigzagProperties object which is used for setting the display styles of zigzag
drawings : array which contains lines and labels of zigzag drawing.
zigzag : Zigzag object which holds the calculations.
Michael's Custom Watermark🔷 MICHAEL'S CUSTOM WATERMARK INDICATOR
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 OVERVIEW
A comprehensive chart watermark overlay that displays essential fundamental and technical information for stocks in a clean, customizable table format. Perfect for traders who want quick access to key metrics without cluttering their charts.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ KEY FEATURES
📊 Fundamental Data Display — Shows Industry, Sector, Market Cap, and P/E Ratio
📅 Earnings Information — Displays next earnings date with countdown timer
📈 ATR Volatility Indicator — 14-day ATR with color-coded visual alerts (🔴🟡🟢)
🎨 Auto Theme Detection — Automatically adjusts text color based on chart background
⚙️ Fully Customizable — Position, colors, size, and displayed metrics all adjustable
🏢 GICS Sector Mapping — Heuristic-based sector classification aligned with industry standards
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 WHAT MAKES THIS INDICATOR UNIQUE?
Unlike basic watermarks, this indicator provides:
Real-time fundamental data integration
Smart theme-aware color adaptation for both light and dark charts
Configurable volatility alerts using ATR thresholds
Earnings countdown feature to never miss important dates
Optimized display that only shows relevant data for the current symbol type
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 HOW TO USE
1. BASIC SETUP
Add the indicator to your chart. By default, it displays in the top-left corner with all features enabled.
2. POSITIONING
Vertical Location: Top, Middle, or Bottom
Horizontal Location: Left, Center, or Right
Vertical Offset: Fine-tune position with 0-50 pixel offset from top
3. CUSTOMIZATION OPTIONS
TEXT APPEARANCE:
Auto Text Color — Enable to automatically adapt text color to your chart theme
Manual Color — Set a fixed text color if auto-color is disabled
Text Size — Choose from Huge, Large, Normal, or Small
Theme Colors — Customize text color for light and dark backgrounds separately
DATA DISPLAY TOGGLES:
Show Industry & Sector — Display heuristic-based GICS-aligned sector and industry classification
Show Market Cap — View market capitalization in T/B/M format
Show P/E Ratio — Display Price-to-Earnings ratio (stocks only)
Show ATR (14-Day) — Display Average True Range with percentage and visual indicator
Show Next Earnings — Display upcoming earnings information
Show Earnings Countdown — Show days remaining until next earnings (requires earnings display)
4. ATR VOLATILITY ALERTS
Configure custom thresholds to monitor volatility:
Red Threshold — ATR percentage that triggers red alert 🔴 (default: 6%)
Yellow Threshold — ATR percentage that triggers yellow alert 🟡 (default: 3%)
Green — Shows automatically when ATR is below yellow threshold 🟢
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📐 UNDERSTANDING THE DISPLAY
🏢 SECTOR & INDUSTRY
Shows the GICS sector classification followed by the specific industry. The indicator uses heuristic-based mapping to align TradingView sectors with standard GICS classifications. Note that this mapping is based on keyword detection and industry analysis, so while generally accurate, it may not perfectly match official GICS classifications in all cases.
💰 MARKET CAP
Displays market capitalization using standard abbreviations:
T = Trillion
B = Billion
M = Million
📊 P/E RATIO
Shows the trailing twelve-month Price-to-Earnings ratio. Only displayed for stocks when enabled. Shows "N/A" if data is unavailable.
📈 ATR (14-DAY)
Displays the 14-period Average True Range in both absolute value and percentage terms, with a color-coded indicator:
🔴 Red: High volatility (above red threshold)
🟡 Yellow: Moderate volatility (between yellow and red thresholds)
🟢 Green: Low volatility (below yellow threshold)
📅 EARNINGS
Shows earnings information in three formats:
"X days remaining" — When countdown is enabled and earnings date is known
"Upcoming" — When date is in the future but countdown is disabled
"Recently Reported" — When earnings just occurred
"N/A" — When no earnings data is available
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ TECHNICAL DETAILS
SUPPORTED INSTRUMENTS:
Optimized for stocks with full fundamental data
Works with other instruments (crypto, forex, futures) but only displays applicable metrics
Automatically suppresses irrelevant data (e.g., P/E for non-stocks)
PERFORMANCE:
Lightweight overlay with minimal resource usage
Updates only on last bar for efficiency
No historical recalculation needed
COMPATIBILITY:
Pine Script v6
Works on all timeframes
Compatible with all chart types
Auto-adapts to theme changes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 TIPS & BEST PRACTICES
Enable Auto Text Color for seamless theme switching between light and dark modes
Adjust vertical offset to avoid overlap with price action in high-volatility periods
Use ATR thresholds appropriate to your trading style and asset class
Disable features you don't use to keep the watermark clean and focused
Position in corners to maximize chart viewing space
Use smaller text size for multi-panel layouts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 TROUBLESHOOTING
"N/A" SHOWING FOR P/E RATIO:
This is normal for non-stock instruments
May occur for stocks with negative earnings
Check if fundamental data is available for the symbol
EARNINGS SHOWING "N/A":
Earnings data may not be available for all stocks
Check TradingView's data coverage for your symbol
TEXT COLOR NOT VISIBLE:
Enable Auto Text Color feature
Manually set text color to contrast with your chart background
Adjust custom light/dark text colors in settings
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ DISCLAIMER
This indicator is for informational purposes only. The fundamental data displayed is sourced from TradingView's data providers. Always verify critical information before making trading decisions. Past performance is not indicative of future results.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
If you find this indicator helpful, please give it a boost 🚀 and share your feedback in the comments!
Version: 1.0
Pine Script Version: v6
Created by: Michael
Adaptive Volume‐Demand‐Index (AVDI)Demand Index (according to James Sibbet) – Short Description
The Demand Index (DI) was developed by James Sibbet to measure real “buying” vs. “selling” strength (Demand vs. Supply) using price and volume data. It is not a standalone trading signal, but rather a filter and trend confirmer that should always be used together with chart structure and additional indicators.
---
\ 1. Calculation Basis\
1. Volume Normalization
$$
\text{normVol}_t
= \frac{\text{Volume}_t}{\mathrm{EMA}(\text{Volume},\,n_{\text{Vol}})_t}
\quad(\text{e.g., }n_{\text{Vol}} = 13)
$$
This smooths out extremely high volume spikes and compares them to the average (≈ 1 means “average volume”).
2. Price Factor
$$
\text{priceFactor}_t
= \frac{\text{Close}_t - \text{Open}_t}{\text{Open}_t}.
$$
Positive values for bullish bars, negative for bearish bars.
3. Component per Bar
$$
\text{component}_t
= \text{normVol}_t \times \text{priceFactor}_t.
$$
If volume is above average (> 1) and the price rises slightly, this yields a noticeably positive value; conversely if the price falls.
4. Raw DI (Rolling Sum)
Over a window of \$w\$ bars (e.g., 20):
$$
\text{RawDI}_t
= \sum_{i=0}^{w-1} \text{component}_{\,t-i}.
$$
Alternatively, recursively for \$t \ge w\$:
$$
\text{RawDI}_t
= \text{RawDI}_{t-1}
+ \text{component}_t
- \text{component}_{\,t-w}.
$$
5. Optional EMA Smoothing
An EMA over RawDI (e.g., \$n\_{\text{DI}} = 50\$) reduces short-term fluctuations and highlights medium-term trends:
$$
\text{EMA\_DI}_t
= \mathrm{EMA}(\text{RawDI},\,n_{\text{DI}})_t.
$$
6.Zero Line
Handy guideline:
RawDI > 0: Accumulated buying power dominates.
RawDI < 0: Accumulated selling power dominates.
2. Interpretation & Application
Crossing Zero
RawDI above zero → Indication of increasing buying pressure (potential long signal).
RawDI below zero → Indication of increasing selling pressure (potential short signal).
Not to be used alone for entry—always confirm with price action.
RawDI vs. EMA_DI
RawDI > EMA\_DI → Acceleration of demand.
RawDI < EMA\_DI → Weakening of demand.
Divergences
Price makes a new high, RawDI does not make a higher high → potential weakness in the uptrend.
Price makes a new low, RawDI does not make a lower low → potential exhaustion of the downtrend.
3. Typical Signals (for Beginners)
\ 1. Long Setup\
RawDI crosses zero from below,
RawDI > EMA\_DI (acceleration),
Price closes above a short-term swing high or resistance.
Stop-Loss: just below the last swing low, Take-Profit/Trailing: on reversal signals or fixed R\:R.
2. Short Setup
RawDI crosses zero from above,
RawDI < EMA\_DI (increased selling pressure),
Price closes below a short-term swing low or support.
Stop-Loss: just above the last swing high.
---
4. Notes and Parameters
Recommended Values (Beginners):
Volume EMA (n₍Vol₎) = 13
RawDI window (w) = 20
EMA over DI (n₍DI₎) = 50 (medium-term) or 1 (no smoothing)
Attention:\
NEVER use in isolation. Always in combination with price action analysis (trendlines, support/resistance, candlestick patterns).
Especially during volatile news phases, RawDI can fluctuate strongly → EMA\_DI helps to avoid false signals.
---
Conclusion The Demand Index by James Sibbet is a powerful filter to assess price movements by their volume backing. It shows whether a rally is truly driven by demand or merely a short-term volume anomaly. In combination with classic chart analysis and risk management, it helps to identify robust entry points and potential trend reversals earlier.
ADR% Extension Levels from SMA 50I created this indicator inspired by RealSimpleAriel (a swing trader I recommend following on X) who does not buy stocks extended beyond 4 ADR% from the 50 SMA and uses extensions from the 50 SMA at 7-8-9-10-11-12-13 ADR% to take profits with a 20% position trimming.
RealSimpleAriel's strategy (as I understood it):
-> Focuses on leading stocks from leading groups and industries, i.e., those that have grown the most in the last 1-3-6 months (see on Finviz groups and then select sector-industry).
-> Targets stocks with the best technical setup for a breakout, above the 200 SMA in a bear market and above both the 50 SMA and 200 SMA in a bull market, selecting those with growing Earnings and Sales.
-> Buys stocks on breakout with a stop loss set at the day's low of the breakout and ensures they are not extended beyond 4 ADR% from the 50 SMA.
-> 3-5 day momentum burst: After a breakout, takes profits by selling 1/2 or 1/3 of the position after a 3-5 day upward move.
-> 20% trimming on extension from the 50 SMA: At 7 ADR% (ADR% calculated over 20 days) extension from the 50 SMA, takes profits by selling 20% of the remaining position. Continues to trim 20% of the remaining position based on the stock price extension from the 50 SMA, calculated using the 20-period ADR%, thus trimming 20% at 8-9-10-11 ADR% extension from the 50 SMA. Upon reaching 12-13 ADR% extension from the 50 SMA, considers the stock overextended, closes the remaining position, and evaluates a short.
-> Trailing stop with ascending SMA: Uses a chosen SMA (10, 20, or 50) as the definitive stop loss for the position, depending on the stock's movement speed (preferring larger SMAs for slower-moving stocks or for long-term theses). If the stock's closing price falls below the chosen SMA, the entire position is closed.
In summary:
-->Buy a breakout using the day's low of the breakout as the stop loss (this stop loss is the most critical).
--> Do not buy stocks extended beyond 4 ADR% from the 50 SMA.
--> Sell 1/2 or 1/3 of the position after 3-5 days of upward movement.
--> Trim 20% of the position at each 7-8-9-10-11-12-13 ADR% extension from the 50 SMA.
--> Close the entire position if the breakout fails and the day's low of the breakout is reached.
--> Close the entire position if the price, during the rise, falls below a chosen SMA (10, 20, or 50, depending on your preference).
--> Definitively close the position if it reaches 12-13 ADR% extension from the 50 SMA.
I used Grok from X to create this indicator. I am not a programmer, but based on the ADR% I use, it works.
Below is Grok from X's description of the indicator:
Script Description
The script is a custom indicator for TradingView that displays extension levels based on ADR% relative to the 50-period Simple Moving Average (SMA). Below is a detailed description of its features, structure, and behavior:
1. Purpose of the Indicator
Name: "ADR% Extension Levels from SMA 50".
Objective: Draw horizontal blue lines above and below the 50-period SMA, corresponding to specific ADR% multiples (4, 7, 8, 9, 10, 11, 12, 13). These levels represent potential price extension zones based on the average daily percentage volatility.
Overlay: The indicator is overlaid on the price chart (overlay=true), so the lines and SMA appear directly on the price graph.
2. Configurable Inputs
The indicator allows users to customize parameters through TradingView settings:
SMA Length (smaLength):
Default: 50 periods.
Description: Specifies the number of periods for calculating the Simple Moving Average (SMA). The 50-period SMA serves as the reference point for extension levels.
Constraint: Minimum 1 period.
ADR% Length (adrLength):
Default: 20 periods.
Description: Specifies the number of days to calculate the moving average of the daily high/low ratio, used to determine ADR%.
Constraint: Minimum 1 period.
Scale Factor (scaleFactor):
Default: 1.0.
Description: An optional multiplier to adjust the distance of extension levels from the SMA. Useful if levels are too close or too far due to an overly small or large ADR%.
Constraint: Minimum 0.1, increments of 0.1.
Tooltip: "Adjust if levels are too close or far from SMA".
3. Main Calculations
50-period SMA:
Calculated with ta.sma(close, smaLength) using the closing price (close).
Serves as the central line around which extension levels are drawn.
ADR% (Average Daily Range Percentage):
Formula: 100 * (ta.sma(dhigh / dlow, adrLength) - 1).
Details:
dhigh and dlow are the daily high and low prices, obtained via request.security(syminfo.tickerid, "D", high/low) to ensure data is daily-based, regardless of the chart's timeframe.
The dhigh / dlow ratio represents the daily percentage change.
The simple moving average (ta.sma) of this ratio over 20 days (adrLength) is subtracted by 1 and multiplied by 100 to obtain ADR% as a percentage.
The result is multiplied by scaleFactor for manual adjustments.
Extension Levels:
Defined as ADR% multiples: 4, 7, 8, 9, 10, 11, 12, 13.
Stored in an array (levels) for easy iteration.
For each level, prices above and below the SMA are calculated as:
Above: sma50 * (1 + (level * adrPercent / 100))
Below: sma50 * (1 - (level * adrPercent / 100))
These represent price levels corresponding to a percentage change from the SMA equal to level * ADR%.
4. Visualization
Horizontal Blue Lines:
For each level (4, 7, 8, 9, 10, 11, 12, 13 ADR%), two lines are drawn:
One above the SMA (e.g., +4 ADR%).
One below the SMA (e.g., -4 ADR%).
Color: Blue (color.blue).
Style: Solid (style=line.style_solid).
Management:
Each level has dedicated variables for upper and lower lines (e.g., upperLine1, lowerLine1 for 4 ADR%).
Previous lines are deleted with line.delete before drawing new ones to avoid overlaps.
Lines are updated at each bar with line.new(bar_index , level, bar_index, level), covering the range from the previous bar to the current one.
Labels:
Displayed only on the last bar (barstate.islast) to avoid clutter.
For each level, two labels:
Above: E.g., "4 ADR%", positioned above the upper line (style=label.style_label_down).
Below: E.g., "-4 ADR%", positioned below the lower line (style=label.style_label_up).
Color: Blue background, white text.
50-period SMA:
Drawn as a gray line (color.gray) for visual reference.
Diagnostics:
ADR% Plot: ADR% is plotted in the status line (orange, histogram style) to verify the value.
ADR% Label: A label on the last bar near the SMA shows the exact ADR% value (e.g., "ADR%: 2.34%"), with a gray background and white text.
5. Behavior
Dynamic Updating:
Lines update with each new bar to reflect new SMA 50 and ADR% values.
Since ADR% uses daily data ("D"), it remains constant within the same day but changes day-to-day.
Visibility Across All Bars:
Lines are drawn on every bar, not just the last one, ensuring visibility on historical data as well.
Adaptability:
The scaleFactor allows level adjustments if ADR% is too small (e.g., for low-volatility symbols) or too large (e.g., for cryptocurrencies).
Compatibility:
Works on any timeframe since ADR% is calculated from daily data.
Suitable for symbols with varying volatility (e.g., stocks, forex, cryptocurrencies).
6. Intended Use
Technical Analysis: Extension levels represent significant price zones based on average daily volatility. They can be used to:
Identify potential price targets (e.g., take profit at +7 ADR%).
Assess support/resistance zones (e.g., -4 ADR% as support).
Measure price extension relative to the 50 SMA.
Trading: Useful for strategies based on breakouts or mean reversion, where ADR% levels indicate reversal or continuation points.
Debugging: Labels and ADR% plot help verify that values align with the symbol’s volatility.
7. Limitations
Dependence on Daily Data: ADR% is based on daily dhigh/dlow, so it may not reflect intraday volatility on short timeframes (e.g., 1 minute).
Extreme ADR% Values: For low-volatility symbols (e.g., bonds) or high-volatility symbols (e.g., meme stocks), ADR% may require adjustments via scaleFactor.
Graphical Load: Drawing 16 lines (8 upper, 8 lower) on every bar may slow the chart for very long historical periods, though line management is optimized.
ADR% Formula: The formula 100 * (sma(dhigh/dlow, Length) - 1) may produce different values compared to other ADR% definitions (e.g., (high - low) / close * 100), so users should be aware of the context.
8. Visual Example
On a chart of a stock like TSLA (daily timeframe):
The 50 SMA is a gray line tracking the average trend.
Assuming an ADR% of 3%:
At +4 ADR% (12%), a blue line appears at sma50 * 1.12.
At -4 ADR% (-12%), a blue line appears at sma50 * 0.88.
Other lines appear at ±7, ±8, ±9, ±10, ±11, ±12, ±13 ADR%.
On the last bar, labels show "4 ADR%", "-4 ADR%", etc., and a gray label shows "ADR%: 3.00%".
ADR% is visible in the status line as an orange histogram.
9. Code: Technical Structure
Language: Pine Script @version=5.
Inputs: Three configurable parameters (smaLength, adrLength, scaleFactor).
Calculations:
SMA: ta.sma(close, smaLength).
ADR%: 100 * (ta.sma(dhigh / dlow, adrLength) - 1) * scaleFactor.
Levels: sma50 * (1 ± (level * adrPercent / 100)).
Graphics:
Lines: Created with line.new, deleted with line.delete to avoid overlaps.
Labels: Created with label.new only on the last bar.
Plots: plot(sma50) for the SMA, plot(adrPercent) for debugging.
Optimization: Uses dedicated variables for each line (e.g., upperLine1, lowerLine1) for clear management and to respect TradingView’s graphical object limits.
10. Possible Improvements
Option to show lines only on the last bar: Would reduce visual clutter.
Customizable line styles: Allow users to choose color or style (e.g., dashed).
Alert for anomalous ADR%: A message if ADR% is too small or large.
Dynamic levels: Allow users to specify ADR% multiples via input.
Optimization for short timeframes: Adapt ADR% for intraday timeframes.
Conclusion
The script creates a visual indicator that helps traders identify price extension levels based on daily volatility (ADR%) relative to the 50 SMA. It is robust, configurable, and includes debugging tools (ADR% plot and labels) to verify values. The ADR% formula based on dhigh/dlow
Global M2 Index Percentage### **Global M2 Index Percentage**
**Description:**
The **Global M2 Index Percentage** is a custom indicator designed to track and visualize the global money supply (M2) in a normalized percentage format. It aggregates M2 data from major economies (e.g., the US, EU, China, Japan, and the UK) and adjusts for exchange rates to provide a comprehensive view of global liquidity. This indicator helps traders and investors understand the broader macroeconomic environment, identify trends in money supply, and make informed decisions based on global liquidity conditions.
---
### **How It Works:**
1. **Data Aggregation**:
- The indicator collects M2 data from key economies and adjusts it using exchange rates to calculate a global M2 value.
- The formula for global M2 is:
\
2. **Normalization**:
- The global M2 value is normalized into a percentage (0% to 100%) based on its range over a user-defined period (default: 13 weeks).
- The formula for normalization is:
\
3. **Visualization**:
- The indicator plots the M2 Index as a line chart.
- Key reference levels are highlighted:
- **10% (Red Line)**: Oversold level (low liquidity).
- **50% (Black Line)**: Neutral level.
- **80% (Green Line)**: Overbought level (high liquidity).
---
### **How to Use the Indicator:**
#### **1. Understanding the M2 Index:**
- **Below 10%**: Indicates extremely low liquidity, which may signal economic contraction or tight monetary policy.
- **Above 80%**: Indicates high liquidity, which may signal loose monetary policy or potential inflationary pressures.
- **Between 10% and 80%**: Represents a neutral to moderate liquidity environment.
#### **2. Trading Strategies:**
- **Long-Term Investing**:
- Use the M2 Index to assess global liquidity trends.
- **High M2 Index (e.g., >80%)**: Consider investing in risk assets (stocks, commodities) as liquidity supports growth.
- **Low M2 Index (e.g., <10%)**: Shift to defensive assets (bonds, gold) as liquidity tightens.
- **Short-Term Trading**:
- Combine the M2 Index with technical indicators (e.g., RSI, MACD) for timing entries and exits.
- **M2 Index Rising + RSI Oversold**: Potential buying opportunity.
- **M2 Index Falling + RSI Overbought**: Potential selling opportunity.
#### **3. Macroeconomic Analysis**:
- Use the M2 Index to monitor the impact of central bank policies (e.g., quantitative easing, rate hikes).
- Correlate the M2 Index with inflation data (CPI, PPI) to anticipate inflationary or deflationary trends.
---
### **Key Features:**
- **Customizable Timeframe**: Adjust the lookback period (e.g., 13 weeks, 26 weeks) to suit your trading style.
- **Multi-Economy Data**: Aggregates M2 data from the US, EU, China, Japan, and the UK for a global perspective.
- **Normalized Output**: Converts raw M2 data into an easy-to-interpret percentage format.
- **Reference Levels**: Includes key levels (10%, 50%, 80%) for quick analysis.
---
### **Example Use Case:**
- **Scenario**: The M2 Index rises from 49% to 62% over two weeks.
- **Interpretation**: Global liquidity is increasing, potentially due to central bank stimulus.
- **Action**:
- **Long-Term**: Increase exposure to equities and commodities.
- **Short-Term**: Look for buying opportunities in oversold assets (e.g., RSI < 30).
---
### **Why Use the Global M2 Index Percentage?**
- **Macro Insights**: Understand the broader economic environment and its impact on financial markets.
- **Risk Management**: Identify periods of high or low liquidity to adjust your portfolio accordingly.
- **Enhanced Timing**: Combine with technical analysis for better entry and exit points.
---
### **Conclusion:**
The **Global M2 Index Percentage** is a powerful tool for traders and investors seeking to incorporate macroeconomic data into their strategies. By tracking global liquidity trends, this indicator helps you make informed decisions, whether you're trading short-term or planning long-term investments. Add it to your TradingView charts today and gain a deeper understanding of the global money supply!
---
**Disclaimer**: This indicator is for informational purposes only and should not be considered financial advice. Always conduct your own research and consult with a professional before making investment decisions.
Visible and Anchored OTE chart [SYNC & TRADE]Thanks for the start @twingall
Visible and Anchored OTE chart
Indicator for visualizing price levels and optimal trading zones (OTE - Optimal Trading Entry) using Fibonacci levels.
Main features
Visualization of price ranges using two OTE zones:
OTE 70% (79-62 Fibonacci levels)
OTE 30% (21-38 Fibonacci levels)
Setting up time periods:
Ability to use a custom date range
Option to work with a higher time frame
Flexible display settings:
Choose between using candle bodies or the full range for binding
Customizable appearance of OTE boxes
Customizable text labels
Additional levels:
Middle line (50.5%)
Optional levels of 29.5%, 70.5% and 88%
Customizable Fibonacci extensions
Indicator settings
Main parameters
Use Custom Dates - enable a custom date range
Start Date/End Date - set a time range
Use Higher Timeframe - use a higher time frame
Higher Timeframe - select a higher timeframe
Setting up OTE zones
Show Fib Box - displaying OTE zones
Enable Fib Box 79-62 - enabling OTE zone 70%
Enable Fib Box 21-38 - enabling OTE zone 30%
Show Text - displaying text labels in zones
Visual design
Text Size - text size (tiny/small/medium/large)
Text Color - text color
Text Alignment - text alignment
Line Thickness - line thickness (1-4)
Line Style - line style (Solid/Dashed/Dotted)
Fibonacci levels
High/Low Lines - displaying extreme levels
Midline - displaying the middle line (50.5%)
Show 29.5 Line - additional level 29.5%
Show 70.5 Line - additional level 70.5%
Show 88 Line - additional level 88%
Extensions Fibonacci
There are 6 customizable extension levels available:
Ext#1 (default 1.0)
Ext#2 (default 1.27)
Ext#3 (default 1.62)
Ext#4 (default 2.0)
Ext#5 (default 2.62)
Ext#6 (default 3.62)
For each level, you can configure:
On/Off
Color
Meaning
Alerts
The indicator provides the following types of alerts:
Entering/Exiting OTE Zones:
Entering 70% OTE Zone
Exiting 70% OTE Zone
Entering 30% OTE Zone
Exiting 30% OTE Zone
Crossing Additional Levels:
Crossing 29.5% Level
Crossing 70.5% Level
Crossing 88% Level
Reaching Extension Levels Fibonacci:
Alerts for each configured extension level
Support for both positive and negative extensions
Usage
Add the indicator to the chart
Configure the required display parameters
Set alerts if necessary
Use OTE zones to identify potential entry points into the market
Notes
The indicator automatically updates when the visible area of the chart changes
When using a custom date range, make sure the selected period contains data
For correct operation with a higher time frame, make sure that historical data is available
Visible and Anchored OTE chart
Индикатор для визуализации ценовых уровней и зон оптимальной торговли (OTE - Optimal Trading Entry) с использованием уровней Фибоначчи.
Основные возможности
Визуализация ценовых диапазонов с помощью двух OTE зон:
OTE 70% (79-62 уровни Фибоначчи)
OTE 30% (21-38 уровни Фибоначчи)
Настройка временных периодов:
Возможность использования пользовательского диапазона дат
Опция работы с высшим таймфреймом
Гибкая настройка отображения:
Выбор между использованием тел свечей или полного диапазона для привязки
Настраиваемый внешний вид боксов OTE
Настраиваемые текстовые метки
Дополнительные уровни:
Средняя линия (50.5%)
Опциональные уровни 29.5%, 70.5% и 88%
Настраиваемые расширения Фибоначчи
Настройка индикатора
Основные параметры
Use Custom Dates - включение пользовательского диапазона дат
Start Date/End Date - установка временного диапазона
Use Higher Timeframe - использование высшего таймфрейма
Higher Timeframe - выбор высшего таймфрейма
Настройка OTE зон
Show Fib Box - отображение зон OTE
Enable Fib Box 79-62 - включение зоны OTE 70%
Enable Fib Box 21-38 - включение зоны OTE 30%
Show Text - отображение текстовых меток в зонах
Визуальное оформление
Text Size - размер текста (tiny/small/medium/large)
Text Color - цвет текста
Text Alignment - выравнивание текста
Line Thickness - толщина линий (1-4)
Line Style - стиль линий (Solid/Dashed/Dotted)
Уровни Фибоначчи
High/Low Lines - отображение крайних уровней
Midline - отображение средней линии (50.5%)
Show 29.5 Line - дополнительный уровень 29.5%
Show 70.5 Line - дополнительный уровень 70.5%
Show 88 Line - дополнительный уровень 88%
Расширения Фибоначчи
Доступно 6 настраиваемых уровней расширения:
Ext#1 (по умолчанию 1.0)
Ext#2 (по умолчанию 1.27)
Ext#3 (по умолчанию 1.62)
Ext#4 (по умолчанию 2.0)
Ext#5 (по умолчанию 2.62)
Ext#6 (по умолчанию 3.62)
Для каждого уровня можно настроить:
Включение/выключение
Цвет
Значение
Оповещения
Индикатор предоставляет следующие типы оповещений:
Вход/выход из зон OTE:
Вход в зону OTE 70%
Выход из зоны OTE 70%
Вход в зону OTE 30%
Выход из зоны OTE 30%
Пересечение дополнительных уровней:
Пересечение уровня 29.5%
Пересечение уровня 70.5%
Пересечение уровня 88%
Достижение уровней расширения Фибоначчи:
Оповещения для каждого настроенного уровня расширения
Поддержка как положительных, так и отрицательных расширений
Использование
Добавьте индикатор на график
Настройте необходимые параметры отображения
При необходимости установите оповещения
Используйте зоны OTE для определения потенциальных точек входа в рынок
Примечания
Индикатор автоматически обновляется при изменении видимой области графика
При использовании пользовательского диапазона дат убедитесь, что выбранный период содержит данные
Для корректной работы с высшим таймфреймом убедитесь в доступности исторических данных
CSVParser█ OVERVIEW
The library contains functions for parsing and importing complex CSV configurations (with a special simple syntax) into a special hierarchical object (of type objProps ) as follows:
Functions:
parseConfig() - reads CSV text into an objProps object.
toT() - displays the contents of an objProps object in a table form, which allows to check the CSV text for syntax errors.
getPropAr() - returns objProps.arS array for child object with `prop` key in mpObj map (or na if not found)
This library is handy in allowing users to store presets for the scripts and switch between them (see, e.g., my HTF moving averages script where users can switch between several preset configuations of 24 MA's across 5 timeframes).
█ HOW THE SCRIPT WORKS.
The script works as follows:
all values read from config text are stored as strings
Nested brackets in config text create a named nested objects of objProps0, ... , objProps9 types.
objProps objects of each level have the following fields:
- array arS for storing values without names (e.g. "12, 23" will be imported into a string array arS as )
- map mpS for storing items with names (e.g. "tf = 60, length = 21" will be imported as <"tf", "60"> and <"length", "21"> pairs into mpS )
- map mpObj for storing nested objects (e.g. "TF1(tf=60, length(21,50,100))" creates a <"TF1, objProps0 object> pair in mpObj map property of the top level object (objProps) , "tf=60" is stored as <"tf", "60"> key-value pair in mpS map property of a next level object (objProps0) and "length (...)" creates a <"length", objProps1> pair in objProps0.mpObj map while length values are stored in objProps1.arS array as strings. Every opening bracket creates a next level objProps object.
If objects or properties with duplicate names are encountered only the latest is imported
(e.g. for "TF1(length(12,22)), TF1(tf=240)" only "TF1(tf=240)" will be imported
Line breaks are not regarded as part of syntax (i.e. values are imported with line breaks, you can supply
symbols "(" , ")" , "," and "=" are special characters and cannot be used within property values (with the exception of a quoted text as a value of a property as explained below)
named properties can have quoted text as their value. In that case special characters within quotation marks are regarded as normal characters. Text between "=" and opening quotation mark as well as text following the closing quotation mark and until next property value is ignored. E.g. "quote = ignored "The quote" also ignored" will be imported as <"quote", "The quote">. Quotation marks within quotes must be excaped with "\" .
if a key names happens to be a multi-line then only first line containing non-space characters (trimmed from spaces) is taken as a key.
")," or ") ," and similar do not create an empty ("") array item while ",," does. (",)" creates an "" array item)
█ CSV CONFIGURATION SYNTAX
Unnamed values: just list them comma separated and they will be imported into arS of the object of the current level.
Named values: use "=" sign as follows: "property1=value1, property2 = value2"
Value of several objects: Use brackets after the name of the object ant list all object properties within the brackets (including its child objects if necessary). E.g. "TF1(tf =60, length(21,200), TF2(tf=240, length(50,200)"
Named and unnamed values as well as objects can go in any order. E.g. "12, tf=60, 21" will be imported as follows: "12", "21" will go to arS array and <"tf", "60"> will go to mpS maP of objProps (the top level object).
You can play around and test your config text using demo in this library, just edit your text in script settings and see how it is parsed into objProps objects.
█ USAGE RECOMMENDATIONS AND SAMPLE USE
I suggest the following approach:
- create functions for your UDT which can set properties by name.
- create enumerator functions which iterates through all the property names (supplied as a const string array) and imports their values into the object
█ SAMPLE USE
A sample use of this library can be seen in my Multi-timeframe 24 moving averages + BB+SAR+Supertrend+VWAP script where settings for the MAs across many timeframes are imported from CSV configurations (presets).
█ FULL LIST OF FUNCTIONS AND PROPERTIES
nzs(_s, nz)
Like nz() but for strings. Returns `nz` arg (default = "") if _s is na.
Parameters:
_s (string)
nz (string)
method init(this)
Initializes objProps obj (creates child maps and arrays)
Namespace types: objProps
Parameters:
this (objProps)
method toT(this, nz)
Outputs objProps to string matrices for further display using autotable().
Namespace types: objProps, objProps1, ..., objProps9
Parameters:
this (objProps/objProps1/..../objProps9)
nz (string)
Returns: A tuple - value, merge and color matrix (autotable() parameters)
method parseConfig(this, s)
Reads config text into objProps (unnamed values into arS, named into mpS, sub-levels into mpObj)
Namespace types: objProps
Parameters:
this (objProps)
s (string)
method getPropArS(this, prop)
Returns a string array of values for a given property name `prop`. Looks for a key `prop` in objProps.mpObj
if finds pair returns obj.arS, otherwise returns na. Returns a reference to the original, not a copy.
Namespace types: objProps, objProps1, ..., objProps8
Parameters:
this (objProps/objProps1/..../objProps8)
prop (string)
method getPropVal(this, prop, id)
Checks if there is an array of values for property `prop` and returns its `id`'s element or na if not found
Namespace types: objProps, objProps1, ..., objProps8
Parameters:
this (objProps/objProps1/..../objProps8) : objProps object containing array of property values in a child objProp object corresponding to propertty name.
prop (string) : (string) Name of the property
id (int) : (int) Id of the element to be returned from the array pf property values
objProps9 type
Object for storing values read from CSV relating to a particular object or property name.
Fields:
mpS (map) : (map() Stores property values as pairs
arS (array) : (string ) Array of values
objProps, objProps0, ... objProps8 types
Object for storing values read from CSV relating to a particular object or property name.
Fields:
mpS (map) : (map() Stores property values as pairs
arS (array) : (string ) Array of values
mpObj (map) : (map() Stores objProps objects containing properties's data as pairs
analytics_tablesLibrary "analytics_tables"
📝 Description
This library provides the implementation of several performance-related statistics and metrics, presented in the form of tables.
The metrics shown in the afforementioned tables where developed during the past years of my in-depth analalysis of various strategies in an atempt to reason about the performance of each strategy.
The visualization and some statistics where inspired by the existing implementations of the "Seasonality" script, and the performance matrix implementations of @QuantNomad and @ZenAndTheArtOfTrading scripts.
While this library is meant to be used by my strategy framework "Template Trailing Strategy (Backtester)" script, I wrapped it in a library hoping this can be usefull for other community strategy scripts that will be released in the future.
🤔 How to Guide
To use the functionality this library provides in your script you have to import it first!
Copy the import statement of the latest release by pressing the copy button below and then paste it into your script. Give a short name to this library so you can refer to it later on. The import statement should look like this:
import jason5480/analytics_tables/1 as ant
There are three types of tables provided by this library in the initial release. The stats table the metrics table and the seasonality table.
Each one shows different kinds of performance statistics.
The table UDT shall be initialized once using the `init()` method.
They can be updated using the `update()` method where the updated data UDT object shall be passed.
The data UDT can also initialized and get updated on demend depending on the use case
A code example for the StatsTable is the following:
var ant.StatsData statsData = ant.StatsData.new()
statsData.update(SideStats.new(), SideStats.new(), 0)
if (barstate.islastconfirmedhistory or (barstate.isrealtime and barstate.isconfirmed))
var statsTable = ant.StatsTable.new().init(ant.getTablePos('TOP', 'RIGHT'))
statsTable.update(statsData)
A code example for the MetricsTable is the following:
var ant.StatsData statsData = ant.StatsData.new()
statsData.update(ant.SideStats.new(), ant.SideStats.new(), 0)
if (barstate.islastconfirmedhistory or (barstate.isrealtime and barstate.isconfirmed))
var metricsTable = ant.MetricsTable.new().init(ant.getTablePos('BOTTOM', 'RIGHT'))
metricsTable.update(statsData, 10)
A code example for the SeasonalityTable is the following:
var ant.SeasonalData seasonalData = ant.SeasonalData.new().init(Seasonality.monthOfYear)
seasonalData.update()
if (barstate.islastconfirmedhistory or (barstate.isrealtime and barstate.isconfirmed))
var seasonalTable = ant.SeasonalTable.new().init(seasonalData, ant.getTablePos('BOTTOM', 'LEFT'))
seasonalTable.update(seasonalData)
🏋️♂️ Please refer to the "EXAMPLE" regions of the script for more advanced and up to date code examples!
Special thanks to @Mrcrbw for the proposal to develop this library and @DCNeu for the constructive feedback 🏆.
getTablePos(ypos, xpos)
Get table position compatible string
Parameters:
ypos (simple string) : The position on y axise
xpos (simple string) : The position on x axise
Returns: The position to be passed to the table
method init(this, pos, height, width, positiveTxtColor, negativeTxtColor, neutralTxtColor, positiveBgColor, negativeBgColor, neutralBgColor)
Initialize the stats table object with the given colors in the given position
Namespace types: StatsTable
Parameters:
this (StatsTable) : The stats table object
pos (simple string) : The table position string
height (simple float) : The height of the table as a percentage of the charts height. By default, 0 auto-adjusts the height based on the text inside the cells
width (simple float) : The width of the table as a percentage of the charts height. By default, 0 auto-adjusts the width based on the text inside the cells
positiveTxtColor (simple color) : The text color when positive
negativeTxtColor (simple color) : The text color when negative
neutralTxtColor (simple color) : The text color when neutral
positiveBgColor (simple color) : The background color with transparency when positive
negativeBgColor (simple color) : The background color with transparency when negative
neutralBgColor (simple color) : The background color with transparency when neutral
method init(this, pos, height, width, neutralBgColor)
Initialize the metrics table object with the given colors in the given position
Namespace types: MetricsTable
Parameters:
this (MetricsTable) : The metrics table object
pos (simple string) : The table position string
height (simple float) : The height of the table as a percentage of the charts height. By default, 0 auto-adjusts the height based on the text inside the cells
width (simple float) : The width of the table as a percentage of the charts width. By default, 0 auto-adjusts the width based on the text inside the cells
neutralBgColor (simple color) : The background color with transparency when neutral
method init(this, seas)
Initialize the seasonal data
Namespace types: SeasonalData
Parameters:
this (SeasonalData) : The seasonal data object
seas (simple Seasonality) : The seasonality of the matrix data
method init(this, data, pos, maxNumOfYears, height, width, extended, neutralTxtColor, neutralBgColor)
Initialize the seasonal table object with the given colors in the given position
Namespace types: SeasonalTable
Parameters:
this (SeasonalTable) : The seasonal table object
data (SeasonalData) : The seasonality data of the table
pos (simple string) : The table position string
maxNumOfYears (simple int) : The maximum number of years that fit into the table
height (simple float) : The height of the table as a percentage of the charts height. By default, 0 auto-adjusts the height based on the text inside the cells
width (simple float) : The width of the table as a percentage of the charts width. By default, 0 auto-adjusts the width based on the text inside the cells
extended (simple bool) : The seasonal table with extended columns for performance
neutralTxtColor (simple color) : The text color when neutral
neutralBgColor (simple color) : The background color with transparency when neutral
method update(this, wins, losses, numOfInconclusiveExits)
Update the strategy info data of the strategy
Namespace types: StatsData
Parameters:
this (StatsData) : The strategy statistics object
wins (SideStats)
losses (SideStats)
numOfInconclusiveExits (int) : The number of inconclusive trades
method update(this, stats, positiveTxtColor, negativeTxtColor, negativeBgColor, neutralBgColor)
Update the stats table object with the given data
Namespace types: StatsTable
Parameters:
this (StatsTable) : The stats table object
stats (StatsData) : The stats data to update the table
positiveTxtColor (simple color) : The text color when positive
negativeTxtColor (simple color) : The text color when negative
negativeBgColor (simple color) : The background color with transparency when negative
neutralBgColor (simple color) : The background color with transparency when neutral
method update(this, stats, buyAndHoldPerc, positiveTxtColor, negativeTxtColor, positiveBgColor, negativeBgColor)
Update the metrics table object with the given data
Namespace types: MetricsTable
Parameters:
this (MetricsTable) : The metrics table object
stats (StatsData) : The stats data to update the table
buyAndHoldPerc (float) : The buy and hold percetage
positiveTxtColor (simple color) : The text color when positive
negativeTxtColor (simple color) : The text color when negative
positiveBgColor (simple color) : The background color with transparency when positive
negativeBgColor (simple color) : The background color with transparency when negative
method update(this)
Update the seasonal data based on the season and eon timeframe
Namespace types: SeasonalData
Parameters:
this (SeasonalData) : The seasonal data object
method update(this, data, positiveTxtColor, negativeTxtColor, neutralTxtColor, positiveBgColor, negativeBgColor, neutralBgColor, timeBgColor)
Update the seasonal table object with the given data
Namespace types: SeasonalTable
Parameters:
this (SeasonalTable) : The seasonal table object
data (SeasonalData) : The seasonal cell data to update the table
positiveTxtColor (simple color) : The text color when positive
negativeTxtColor (simple color) : The text color when negative
neutralTxtColor (simple color) : The text color when neutral
positiveBgColor (simple color) : The background color with transparency when positive
negativeBgColor (simple color) : The background color with transparency when negative
neutralBgColor (simple color) : The background color with transparency when neutral
timeBgColor (simple color) : The background color of the time gradient
SideStats
Object that represents the strategy statistics data of one side win or lose
Fields:
numOf (series int)
sumFreeProfit (series float)
freeProfitStDev (series float)
sumProfit (series float)
profitStDev (series float)
sumGain (series float)
gainStDev (series float)
avgQuantityPerc (series float)
avgCapitalRiskPerc (series float)
avgTPExecutedCount (series float)
avgRiskRewardRatio (series float)
maxStreak (series int)
StatsTable
Object that represents the stats table
Fields:
table (series table) : The actual table
rows (series int) : The number of rows of the table
columns (series int) : The number of columns of the table
StatsData
Object that represents the statistics data of the strategy
Fields:
wins (SideStats)
losses (SideStats)
numOfInconclusiveExits (series int)
avgFreeProfitStr (series string)
freeProfitStDevStr (series string)
lossFreeProfitStDevStr (series string)
avgProfitStr (series string)
profitStDevStr (series string)
lossProfitStDevStr (series string)
avgQuantityStr (series string)
MetricsTable
Object that represents the metrics table
Fields:
table (series table) : The actual table
rows (series int) : The number of rows of the table
columns (series int) : The number of columns of the table
SeasonalData
Object that represents the seasonal table dynamic data
Fields:
seasonality (series Seasonality)
eonToMatrixRow (map)
numOfEons (series int)
mostRecentMatrixRow (series int)
balances (matrix)
returnPercs (matrix)
maxDDs (matrix)
eonReturnPercs (array)
eonCAGRs (array)
eonMaxDDs (array)
SeasonalTable
Object that represents the seasonal table
Fields:
table (series table) : The actual table
headRows (series int) : The number of head rows of the table
headColumns (series int) : The number of head columns of the table
eonRows (series int) : The number of eon rows of the table
seasonColumns (series int) : The number of season columns of the table
statsRows (series int)
statsColumns (series int) : The number of stats columns of the table
rows (series int) : The number of rows of the table
columns (series int) : The number of columns of the table
extended (series bool) : Whether the table has additional performance statistics






















