RSI 30 CROSSScript will give the RSI 30 40 and 70 level for present price of the stock , when the price cross the green line RSI value will be 70 , blue line RSI value will be 40 and red line RSI value will be 30 . Helps to put entry and exit based on RSI strategy.
RED line give price for RSI 30
BLUE line give price for RSI 40
GREEN line give price for RSI 70
BLACK line give SMA 200
Strategy
Stock price should above 200 MA
price should touch RSI 30 RED line and bounce back.
Entry will be the high of candle lies on RSI 40 BLUE line.
Stop loss will be the RSI 30 price(RED line ) during entry.
Target will be the RSI 70 price ( GREEEN line) during entry.
You can take half profit at RSI 70 and trail stop loss on RSI 70 till it cross.
This will help you to find the Price for stock, when it cross RSI value 30 , 40 and 70 to place entry exit and target based on the trade strategy will follow RSI.
If you want to entry, when stock cross RSI 30 or 40 from below . You can place a stop loss limit buy order at price range .
If you want to exit, When stock cross RSI 70 . you place stock loss at green line price.
In den Scripts nach "entry" suchen
Forex Scalping 1min Bollinger Bands, RSI and ADX Trading SystemThis is a Forex Scalping Trading Sytem based on the Bollinger Bands.
Its suited for major pairs, with lowest possible comission (below 1 pip) and with timeframes ranging between 1-15 min.
Indicators:
Bollinger bands
ADX
RSI
Rules for entry:
Long Entry: price to move below the upper Bollinger Bands RSI raise above the 30 line and ADX<32 at the same time.
Short Entry: price to move above the upper Bollinger Bands, RSI raise below the 70 line and ADX<32 at the same time.
Rules for exit
Profit Exit: 3 options: 1, exit position when the price touches the middle band, 2) when the price touches the opposite band, X pips target profit.
Loss Exit: X pips loss
Bollinger Band with RSI
Using combination bollinger band and RSI indicator as guide to predict price volatility and the best entry point. The strategy logic is pretty straightforward where we're interested with close price that touches the lower bollinger band ; there are only two scenarios that will happened after the price reaches the lower band; the price might rebound from the lower bollinger band or drop lower and continue downtrend. To confirm the price movement, we use a second indicator which is the RSI to further investigate the price trend. For example, if the price reaches the lower bollinger band but the RSI value is not in the oversold region, we can conclude that the price will go lower and continue downtrend. If the RSI value is in the oversold region, we can use this price area as our entry point.
Stop loss is necessary to avoid losing too much capital if the RSI value lingers too long in the oversold region.
Best take profit area is when the price rebound above the middle bollinger band area/upper bollinger band or when the RSI reaches overbought region; whichever comes first.
Long entry:
RSI < 30 & close price < lower bollinger band
Exit entry:
RSI > 70
Default stop loss: -25%
Swing/Daytrading strategy with reversal option
Hello, today I bring a swing reversal strategy that work on all financial markets.
It uses timeframes starting from 1h, the bigger the better.
Its very dangerous because it has no stop loss, neither a take profit. Our exit condition is based on the reversal on the entry .
For entry we have 2 types : normal and reversal
Lets say we want to go long , for that we check the last CLOSE of a candle with the previos HIGH. If its higher than that, and at the same time CLOSE is bigger than the moving average, we have a long entry.
For short we have CLOSE with the previous LOW. If its lower than that and at the same time is lower than moving average, we have a short entry.
For moving average we use T3 MA
For reversal what I do, is , I take the short condition and I apply it to long, and for long I apply the short condition.
On many cases I found out it work amazingly.
I forgot to add: it also has a time entry system, so we use the best hours/sessions for entries .
Exit a trade: lets say we enter short, when we find a long condition, we close short and enter into long. Viceversa for long.
If you have any questions, let me know.
Enjoy it :)
Ruckard TradingLatinoThis strategy tries to mimic TradingLatino strategy.
The current implementation is beta.
Si hablas castellano o espanyol por favor consulta MENSAJE EN CASTELLANO más abajo.
It's aimed at BTCUSDT pair and 4h timeframe.
STRATEGY DEFAULT SETTINGS EXPLANATION
max_bars_back=5000 : This is a random number of bars so that the strategy test lasts for one or two years
calc_on_order_fills=false : To wait for the 4h closing is too much. Try to check if it's worth entering a position after closing one. I finally decided not to recheck if it's worth entering after an order is closed. So it is false.
calc_on_every_tick=false
pyramiding=0 : We only want one entry allowed in the same direction. And we don't want the order to scale by error.
initial_capital=1000 : These are 1000 USDT. By using 1% maximum loss per trade and 7% as a default stop loss by using 1000 USDT at 12000 USDT per BTC price you would entry with around 142 USDT which are converted into: 0.010 BTC . The maximum number of decimal for contracts on this BTCUSDT market is 3 decimals. E.g. the minimum might be: 0.001 BTC . So, this minimal 1000 amount ensures us not to entry with less than 0.001 entries which might have happened when using 100 USDT as an initial capital.
slippage=1 : Binance BTCUSDT mintick is: 0.01. Binance slippage: 0.1 % (Let's assume). TV has an integer slippage. It does not have a percentage based slippage. If we assume a 1000 initial capital, the recommended equity is 142 which at 11996 USDT per BTC price means: 0.011 BTC. The 0.1% slippage of: 0.011 BTC would be: 0.000011 . This is way smaller than the mintick. So our slippage is going to be 1. E.g. 1 (slippage) * 0.01 (mintick)
commission_type=strategy.commission.percent and commission_value=0.1 : According to: binance . com / en / fee / schedule in VIP 0 level both maker and taker fees are: 0.1 %.
BACKGROUND
Jaime Merino is a well known Youtuber focused on crypto trading
His channel TradingLatino
features monday to friday videos where he explains his strategy.
JAIME MERINO STANCE ON BOTS
Jaime Merino stance on bots (taken from memory out of a 2020 June video from him):
'~
You know. They can program you a bot and it might work.
But, there are some special situations that the bot would not be able to handle.
And, I, as a human, I would handle it. And the bot wouldn't do it.
~'
My long term target with this strategy script is add as many
special situations as I can to the script
so that it can match Jaime Merino behaviour even in non normal circumstances.
My alternate target is learn Pine script
and enjoy programming with it.
WARNING
This script might be bigger than other TradingView scripts.
However, please, do not be confused because the current status is beta.
This script has not been tested with real money.
This is NOT an official strategy from Jaime Merino.
This is NOT an official strategy from TradingLatino . net .
HOW IT WORKS
It basically uses ADX slope and LazyBear's Squeeze Momentum Indicator
to make its buy and sell decisions.
Fast paced EMA being bigger than slow paced EMA
(on higher timeframe) advices going long.
Fast paced EMA being smaller than slow paced EMA
(on higher timeframe) advices going short.
It finally add many substrats that TradingLatino uses.
SETTINGS
__ SETTINGS - Basics
____ SETTINGS - Basics - ADX
(ADX) Smoothing {14}
(ADX) DI Length {14}
(ADX) key level {23}
____ SETTINGS - Basics - LazyBear Squeeze Momentum
(SQZMOM) BB Length {20}
(SQZMOM) BB MultFactor {2.0}
(SQZMOM) KC Length {20}
(SQZMOM) KC MultFactor {1.5}
(SQZMOM) Use TrueRange (KC) {True}
____ SETTINGS - Basics - EMAs
(EMAS) EMA10 - Length {10}
(EMAS) EMA10 - Source {close}
(EMAS) EMA55 - Length {55}
(EMAS) EMA55 - Source {close}
____ SETTINGS - Volume Profile
Lowest and highest VPoC from last three days
is used to know if an entry has a support
VPVR of last 100 4h bars
is also taken into account
(VP) Use number of bars (not VP timeframe): Uses 'Number of bars {100}' setting instead of 'Volume Profile timeframe' setting for calculating session VPoC
(VP) Show tick difference from current price {False}: BETA . Might be useful for actions some day.
(VP) Number of bars {100}: If 'Use number of bars (not VP timeframe)' is turned on this setting is used to calculate session VPoC.
(VP) Volume Profile timeframe {1 day}: If 'Use number of bars (not VP timeframe)' is turned off this setting is used to calculate session VPoC.
(VP) Row width multiplier {0.6}: Adjust how the extra Volume Profile bars are shown in the chart.
(VP) Resistances prices number of decimal digits : Round Volume Profile bars label numbers so that they don't have so many decimals.
(VP) Number of bars for bottom VPOC {18}: 18 bars equals 3 days in suggested timeframe of 4 hours. It's used to calculate lowest session VPoC from previous three days. It's also used as a top VPOC for sells.
(VP) Ignore VPOC bottom advice on long {False}: If turned on it ignores bottom VPOC (or top VPOC on sells) when evaluating if a buy entry is worth it.
(VP) Number of bars for VPVR VPOC {100}: Number of bars to calculate the VPVR VPoC. We use 100 as Jaime once used. When the price bounces back to the EMA55 it might just bounce to this VPVR VPoC if its price it's lower than the EMA55 (Sells have inverse algorithm).
____ SETTINGS - ADX Slope
ADX Slope
help us to understand if ADX
has a positive slope, negative slope
or it is rather still.
(ADXSLOPE) ADX cut {23}: If ADX value is greater than this cut (23) then ADX has strength
(ADXSLOPE) ADX minimum steepness entry {45}: ADX slope needs to be 45 degrees to be considered as a positive one.
(ADXSLOPE) ADX minimum steepness exit {45}: ADX slope needs to be -45 degrees to be considered as a negative one.
(ADXSLOPE) ADX steepness periods {3}: In order to avoid false detection the slope is calculated along 3 periods.
____ SETTINGS - Next to EMA55
(NEXTEMA55) EMA10 to EMA55 bounce back percentage {80}: EMA10 might bounce back to EMA55 or maybe to 80% of its complete way to EMA55
(NEXTEMA55) Next to EMA55 percentage {15}: How much next to the EMA55 you need to be to consider it's going to bounce back upwards again.
____ SETTINGS - Stop Loss and Take Profit
You can set a default stop loss or a default take profit.
(STOPTAKE) Stop Loss % {7.0}
(STOPTAKE) Take Profit % {2.0}
____ SETTINGS - Trailing Take Profit
You can customize the default trailing take profit values
(TRAILING) Trailing Take Profit (%) {1.0}: Trailing take profit offset in percentage
(TRAILING) Trailing Take Profit Trigger (%) {2.0}: When 2.0% of benefit is reached then activate the trailing take profit.
____ SETTINGS - MAIN TURN ON/OFF OPTIONS
(EMAS) Ignore advice based on emas {false}.
(EMAS) Ignore advice based on emas (On closing long signal) {False}: Ignore advice based on emas but only when deciding to close a buy entry.
(SQZMOM) Ignore advice based on SQZMOM {false}: Ignores advice based on SQZMOM indicator.
(ADXSLOPE) Ignore advice based on ADX positive slope {false}
(ADXSLOPE) Ignore advice based on ADX cut (23) {true}
(STOPTAKE) Take Profit? {false}: Enables simple Take Profit.
(STOPTAKE) Stop Loss? {True}: Enables simple Stop Loss.
(TRAILING) Enable Trailing Take Profit (%) {True}: Enables Trailing Take Profit.
____ SETTINGS - Strategy mode
(STRAT) Type Strategy: 'Long and Short', 'Long Only' or 'Short Only'. Default: 'Long and Short'.
____ SETTINGS - Risk Management
(RISKM) Risk Management Type: 'Safe', 'Somewhat safe compound' or 'Unsafe compound'. ' Safe ': Calculations are always done with the initial capital (1000) in mind. The maximum losses per trade/day/week/month are taken into account. ' Somewhat safe compound ': Calculations are done with initial capital (1000) or a higher capital if it increases. The maximum losses per trade/day/week/month are taken into account. ' Unsafe compound ': In each order all the current capital is gambled and only the default stop loss per order is taken into account. That means that the maximum losses per trade/day/week/month are not taken into account. Default : 'Somewhat safe compound'.
(RISKM) Maximum loss per trade % {1.0}.
(RISKM) Maximum loss per day % {6.0}.
(RISKM) Maximum loss per week % {8.0}.
(RISKM) Maximum loss per month % {10.0}.
____ SETTINGS - Decimals
(DECIMAL) Maximum number of decimal for contracts {3}: How small (3 decimals means 0.001) an entry position might be in your exchange.
EXTRA 1 - PRICE IS IN RANGE indicator
(PRANGE) Print price is in range {False}: Enable a bottom label that indicates if the price is in range or not.
(PRANGE) Price range periods {5}: How many previous periods are used to calculate the medians
(PRANGE) Price range maximum desviation (%) {0.6} ( > 0 ): Maximum positive desviation for range detection
(PRANGE) Price range minimum desviation (%) {0.6} ( > 0 ): Mininum negative desviation for range detection
EXTRA 2 - SQUEEZE MOMENTUM Desviation indicator
(SQZDIVER) Show degrees {False}: Show degrees of each Squeeze Momentum Divergence lines to the x-axis.
(SQZDIVER) Show desviation labels {False}: Whether to show or not desviation labels for the Squeeze Momentum Divergences.
(SQZDIVER) Show desviation lines {False}: Whether to show or not desviation lines for the Squeeze Momentum Divergences.
EXTRA 3 - VOLUME PROFILE indicator
WARNING: This indicator works not on current bar but on previous bar. So in the worst case it might be VP from 4 hours ago. Don't worry, inside the strategy calculus the correct values are used. It's just that I cannot show the most recent one in the chart.
(VP) Print recent profile {False}: Show Volume Profile indicator
(VP) Avoid label price overlaps {False}: Avoid label prices to overlap on the chart.
EXTRA 4 - ZIGNALY SUPPORT
(ZIG) Zignaly Alert Type {Email}: 'Email', 'Webhook'. ' Email ': Prepare alert_message variable content to be compatible with zignaly expected email content format. ' Webhook ': Prepare alert_message variable content to be compatible with zignaly expected json content format.
EXTRA 5 - DEBUG
(DEBUG) Enable debug on order comments {False}: If set to true it prepares the order message to match the alert_message variable. It makes easier to debug what would have been sent by email or webhook on each of the times an order is triggered.
HOW TO USE THIS STRATEGY
BOT MODE: This is the default setting.
PROPER VOLUME PROFILE VIEWING: Click on this strategy settings. Properties tab. Make sure Recalculate 'each time the order was run' is turned off.
NEWBIE USER: (Check PROPER VOLUME PROFILE VIEWING above!) You might want to turn on the 'Print recent profile {False}' setting. Alternatively you can use my alternate realtime study: 'Resistances and supports based on simplified Volume Profile' but, be aware, it might consume one indicator.
ADVANCED USER 1: Turn on the 'Print price is in range {False}' setting and help us to debug this subindicator. Also help us to figure out how to include this value in the strategy.
ADVANCED USER 2: Turn on the all the (SQZDIVER) settings and help us to figure out how to include this value in the strategy.
ADVANCED USER 3: (Check PROPER VOLUME PROFILE VIEWING above!) Turn on the 'Print recent profile {False}' setting and report any problem with it.
JAIME MERINO: Just use the indicator as it comes by default. It should only show BUY signals, SELL signals and their associated closing signals. From time to time you might want to check 'ADVANCED USER 2' instructions to check that there's actually a divergence. Check also 'ADVANCED USER 1' instructions for your amusement.
EXTRA ADVICE
It's advised that you use this strategy in addition to these two other indicators:
* Squeeze Momentum Indicator
* ADX
so that your chart matches as close as possible to TradingLatino chart.
ZIGNALY INTEGRATION
This strategy supports Zignaly email integration by default. It also supports Zignaly Webhook integration.
ZIGNALY INTEGRATION - Email integration example
What you would write in your alert message:
||{{strategy.order.alert_message}}||key=MYSECRETKEY||
ZIGNALY INTEGRATION - Webhook integration example
What you would write in your alert message:
{ {{strategy.order.alert_message}} , "key" : "MYSECRETKEY" }
CREDITS
I have reused and adapted some code from
'Directional Movement Index + ADX & Keylevel Support' study
which it's from TradingView console user.
I have reused and adapted some code from
'3ema' study
which it's from TradingView hunganhnguyen1193 user.
I have reused and adapted some code from
'Squeeze Momentum Indicator ' study
which it's from TradingView LazyBear user.
I have reused and adapted some code from
'Strategy Tester EMA-SMA-RSI-MACD' study
which it's from TradingView fikira user.
I have reused and adapted some code from
'Support Resistance MTF' study
which it's from TradingView LonesomeTheBlue user.
I have reused and adapted some code from
'TF Segmented Linear Regression' study
which it's from TradingView alexgrover user.
I have reused and adapted some code from
"Poor man's volume profile" study
which it's from TradingView IldarAkhmetgaleev user.
FEEDBACK
Please check the strategy source code for more detailed information
where, among others, I explain all of the substrats
and if they are implemented or not.
Q1. Did I understand wrong any of the Jaime substrats (which I have implemented)?
Q2. The strategy yields quite profit when we should long (EMA10 from 1d timeframe is higher than EMA55 from 1d timeframe.
Why the strategy yields much less profit when we should short (EMA10 from 1d timeframe is lower than EMA55 from 1d timeframe)?
Any idea if you need to do something else rather than just reverse what Jaime does when longing?
FREQUENTLY ASKED QUESTIONS
FAQ1. Why are you giving this strategy for free?
TradingLatino and his fellow enthusiasts taught me this strategy. Now I'm giving back to them.
FAQ2. Seriously! Why are you giving this strategy for free?
I'm confident his strategy might be improved a lot. By keeping it to myself I would avoid other people contributions to improve it.
Now that everyone can contribute this is a win-win.
FAQ3. How can I connect this strategy to my Exchange account?
It seems that you can attach alerts to strategies.
You might want to combine it with a paying account which enable Webhook URLs to work.
I don't know how all of this works right now so I cannot give you advice on it.
You will have to do your own research on this subject. But, be careful. Automating trades, if not done properly,
might end on you automating losses.
FAQ4. I have just found that this strategy by default gives more than 3.97% of 'maximum series of losses'. That's unacceptable according to my risk management policy.
You might want to reduce default stop loss setting from 7% to something like 5% till you are ok with the 'maximum series of losses'.
FAQ5. Where can I learn more about your work on this strategy?
Check the source code. You might find unused strategies. Either because there's not a substantial increases on earnings. Or maybe because they have not been implemented yet.
FAQ6. How much leverage is applied in this strategy?
No leverage.
FAQ7. Any difference with original Jaime Merino strategy?
Most of the times Jaime defines an stop loss at the price entry. That's not the case here. The default stop loss is 7% (but, don't be confused it only means losing 1% of your investment thanks to risk management). There's also a trailing take profit that triggers at 2% profit with a 1% trailing.
FAQ8. Why this strategy return is so small?
The strategy should be improved a lot. And, well, backtesting in this platform is not guaranteed to return theoric results comparable to real-life returns. That's why I'm personally forward testing this strategy to verify it.
MENSAJE EN CASTELLANO
En primer lugar se agradece feedback para mejorar la estrategia.
Si eres un usuario avanzado y quieres colaborar en mejorar el script no dudes en comentar abajo.
Ten en cuenta que aunque toda esta descripción tenga que estar en inglés no es obligatorio que el comentario esté en inglés.
CHISTE - CASTELLANO
¡Pero Jaime!
¡400.000!
¡Tu da mun!
Two Take Profits and Two Stop LossThis script is for research purposes only. I am not a financial advisor.
Entry Condition
This strategy is based on two take profit targets, two stop loss, and scaling out strategy. The entry rule is very simple. Whenever the EMA crossover WMA, the long trade is taken and vice versa.
Take Profit and Stop Loss
The first take profit is set at 20 pips above the long entry and the second take profit is set at 40 pips above the long entry. Meanwhile, the first stop loss is set at 20 pips below the long entry and the second stop loss is set at the long entry.
Money Management
When the first take profit is achieved, half of the position is closed and the first stop loss is moved to the entry-level. The rest of the position is open to achieve either second take profit or second stop loss.
There are three outcomes when using this strategy. Let's say you enter the trade with 200 lot size and you are risking 2% of your equity.
1. The first outcome is when the price hits stop loss, you lose the entire 2%.
2. The second outcome is when the price hits the first take profit and you close half of your position. Meaning that you have gained 1%. Then you let the trade running and eventually it hits the second stop loss. Remember your first stop loss has changed to the second stop loss when the first take profit is achieved. The total loss is 0% because the price is at your entry-level. You have gained the earlier 1% and then lost 0%. At this point, you are at 1% gained.
3. The third outcome is similar to the second out but instead of hitting the second stop loss, the trade is running to your favor and hits the second take profit.
Therefore, you gained 1% from the first take profit and you gained another 2% for the second take profit. Your total gained is 3%
Summary
The reason behind this strategy is to minimize risk. with normal strategy, you only have two outcomes which are either win or loss. With this strategy, you have three outcomes which win 3%, win 1%, or loss 2%.
This is my similar strategy but with single stop loss
Two Take Profit StrategyThis script is for research purposes only. I am not a financial advisor.
Entry Condition
This strategy is based on two take profit targets and scaling out strategy. The entry rule is very simple. Whenever the EMA crossover WMA, the long trade is taken and vice versa.
Take Profit and Stop Loss
The first take profit is set at 20 pips above the long entry and the second take profit is set at 40 pips above the long entry. Meanwhile, the stop loss is set at 20 pips below the long entry.
Money Management
When the first take profit is achieved, half of the position is closed. The rest of the position is open to achieve either second take profit or stop loss.
There are three outcomes when using this strategy. Let's say you enter the trade with 200 lot size and you are risking 2% of your equity.
1. The first outcome is when the price hits stop loss, you lose the entire 2%.
2. The second outcome is when the price hits the first take profit and you close half of your position. Meaning that you have gained 1%. Then you let the trade running and eventually it hits stop loss. The total loss is 0% because the remaining lot size which is 200/2=100 times by 20pips is 1%. You have gained the earlier 1% and then loss 1%. At this point, you are at break even.
3. The third outcome is similar to the second out but instead of hiring stop loss, the trade is running to your favor and hits the second take profit.
Therefore, you gained 1% from the first take profit and you gained another 2% for the second take profit. Your total gained is 3%
Summary
The reason behind this strategy is to minimize risk. with normal strategy, you only have two outcomes which are either win or loss. With this strategy, you have three outcomes which are win, loss or break even.
ATR Stop LinesATR Stop Lines
Plots dynamic stop-loss levels on the price chart based on ATR (Average True Range). Optionally adjusts stop distance based on volatility regime.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 WHAT IT DOES
Green line — Long stop (Close − ATR × multiplier)
Red line — Short stop (Close + ATR × multiplier)
Lines move with price and volatility. When regime-adjust is enabled, stop distance widens in high volatility and tightens in low volatility.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📐 REGIME-ADJUSTED MULTIPLIERS
When enabled, the multiplier auto-adjusts based on the ATR percentile:
LOW (< 25th pctl) — 1.0× ATR — Tight stops, small moves expected
NORMAL (25–50th pctl) — 1.5× ATR — Standard distance
HIGH (50–75th pctl) — 2.0× ATR — Wider to avoid noise
EXTREME (> 75th pctl) — 2.5× ATR — Widest, or skip the trade
Disable regime-adjust to use a fixed multiplier for all conditions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 HOW TO USE
Entry: Note stop line level when entering a trade. Set stop-loss at or beyond that level.
Trailing: Move stop to new line level as price advances in your favor.
Sizing: Wider stop = smaller position to maintain constant risk.
Example:
BTC Daily, ATR = \$2,000, Regime = HIGH (2.0×)
Entry: \$50,000 → Long stop: \$46,000 / Short stop: \$54,000
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 STATUS LABEL
VOL — Current regime (LOW / NORMAL / HIGH / EXTREME)
ATR — Raw ATR value in price units
Mult — Active multiplier
Stop Dist — Current stop distance in price units
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ SETTINGS
ATR Settings:
ATR Length (default: 14)
Percentile Lookback (default: 100)
Timeframe:
Use Fixed Timeframe — Lock to specific TF
Fixed Timeframe (default: D)
Stop Settings:
Regime-Adjusted Multiplier — Toggle auto-adjust on/off
Base ATR Multiplier — Used when regime-adjust is off
LOW/NORMAL/HIGH/EXTREME Multipliers — Customize per regime
Display:
Show Long Stop / Show Short Stop
Show Status Label
Long/Short Stop Colors
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔔 ALERTS
Vol → EXTREME
Vol → LOW
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 COMPANION INDICATOR
Use with ATR Volatility Regime (separate pane) for full context:
Pane indicator → percentile visualization, zone backgrounds
This indicator → actionable stop levels on price chart
Both use identical ATR/percentile logic and stay in sync.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 NOTES
Works on any timeframe
Stops are dynamic — recalculate each bar
Not a signal generator — use with your own entry logic
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏷️ TAGS
ATR, stop-loss, volatility, risk-management, position-sizing, trailing-stop, swing-trading
Gold Profit Target SystemGOLD PROFIT TARGET SYSTEM
Track Real Profits, Exit With Confidence
Best on Daily or Weekly - copy and mod as you see fit. Have fun!
WHAT THIS INDICATOR DOES:
This indicator tracks your gold position from entry and shows color-coded profit targets as the price rises. Instead of guessing when to exit, you see exact profit levels in real-time: 1%, 2%, 3%, 4%, 5%, 10%, 15%, 20%, 25%, and 25%+.
Simple concept: BUY on the signal, SELL at YOUR chosen profit level.
HOW IT WORKS - 3 SIMPLE STEPS:
STEP 1: Wait for BUY Signal
• Green triangle (▲) appears below the composite line
• Triggered when inverse assets (DXY, rates, etc.) show strong correlation and are falling
• Entry price is automatically recorded
• Position tracking begins
STEP 2: Watch Profit Targets Appear
• As gold rises, color-coded symbols appear above the composite line
• Each symbol represents a profit milestone
• The info table shows your current profit
• You decide when to exit based on YOUR target
STEP 3: Exit at Your Chosen Level
• Conservative? Exit at 5-10%
• Moderate? Exit at 10-15%
• Aggressive? Hold for 20%+
• The indicator just shows the levels - YOU make the call
THE COMPOSITE LINE - WHAT IT MEANS:
The main line is a weighted composite of inverse-correlated assets:
• DXY (US Dollar Index)
• Real Interest Rates (10Y TIPS)
• US 10-Year Treasury Yield
• US 2-Year Treasury Yield
• Bitcoin (optional)
• Copper (optional)
Line Position:
• Below -30 (Bright Green): Very strong inverse correlation - excellent BUY conditions
• Below 0 (Green): Inverse correlation present - moderate BUY conditions
• Above 0 (Red): Inverse assets rising - neutral to bearish
• Above 30 (Bright Red): Strong inverse rally - bearish for gold
What Causes BUY Signals:
When the composite line is negative (inverse assets falling) AND shows strong correlation (>0.3), this suggests gold is likely to rise. The indicator records your entry and begins tracking profits.
COLOR-CODED PROFIT TARGETS:
EARLY PROFITS (Green Circles):
• 1% - Very Light Green (#c8e6c9) - First confirmation
• 2% - Light Green (#a5d6a7) - Building profit
• 3% - Green (#81c784) - Good profit
• 4% - Medium Green (#66bb6a) - Strong profit
• 5% - Dark Green (#4caf50) - Solid profit!
EXCELLENT PROFIT (Yellow Diamond):
• 10% - Yellow (#ffd54f) - Double digits, excellent trade!
OUTSTANDING PROFIT (Orange Diamonds):
• 15% - Orange (#ffb74d) - Exceptional profit, consider partial exit
EXCEPTIONAL PROFIT (Red Diamonds):
• 20% - Light Red (#ff8a65) - Rare territory, strong exit consideration
• 25% - Red (#f44336) - Extraordinary profit, very rare!
PEAK PROFIT (Purple Star):
• 25%+ - Purple (#9c27b0) - Once in a blue moon! The home run trade!
STOP LOSS (Red X):
• Default -5% - Protection against losses
• Position auto-resets if stop is hit
THE PROFIT BAR (Histogram):
Below the composite line, you'll see a colored histogram when in position:
Bar Color = Your Current Profit Tier
• Light green bar = 1-2% profit
• Green bar = 3-5% profit
• Yellow bar = 10% profit
• Orange bar = 15% profit
• Red bar = 20-25% profit
• Purple bar = 25%+ profit
• Red negative bar = Currently at a loss
Bar Height = Current Profit %
The taller the bar, the larger your profit. Negative bars extend downward when you're at a loss.
THE INFORMATION TABLE:
The table (top-right by default) shows everything at a glance:
Position: ✓ IN (green) or ✗ OUT (gray)
Shows whether you're currently holding a position
Entry Price: Your recorded buy price
Example: 2,100.50
Current Price: Gold's current price
Example: 2,142.75
Current P/L: YOUR PROFIT %
This is the most important metric - shows exactly how much you're up (or down)
Color matches your current profit tier
Example: +2.01% in light green
Profit Tier: Current milestone reached
Shows which profit level you've hit: "1%", "2%", "5%", "10%", etc.
Next Target: The next profit level to watch
Tells you what milestone is coming up next
Bars Held: How long you've been in the trade
Helps track holding time
Composite: Current correlation strength
Shows the underlying composite correlation value
REFERENCE LINES:
Zero Line (Gray):
The center line. Above = bearish for gold, Below = bullish for gold
Strong Bull Line (Green dashed at -30):
When composite crosses below -30, very strong BUY conditions
Strong Bear Line (Red dashed at +30):
When composite crosses above +30, strong bearish conditions
BACKGROUND SHADING:
Very Light Green Background:
You're in profit (position open and above entry price)
Very Light Red Background:
You're at a loss (position open and below entry price)
No Background:
No position currently open
SYMBOLS ON CHART:
▲ Green Triangle Below Line: BUY SIGNAL
Enter long position here. Entry price recorded.
● Small Green Circles Above Line: 1-5% Profits
Early profit targets. Light green to dark green progression.
◆ Diamonds Above Line: 10-25% Profits
Major profit milestones. Yellow → Orange → Red progression.
★ Purple Star Above Line: 25%+ Profit
The holy grail! Peak profit achieved.
✖ Red X Below Line: STOP LOSS HIT
Trade went against you. Position resets (if auto-reset enabled).
PROFIT-TAKING STRATEGIES:
Strategy 1: Fixed Target (Simple)
Pick one target (e.g., 10%) and always exit there.
Best for: Beginners, disciplined traders
Strategy 2: Scaled Exit (Advanced)
Exit in portions:
• 5% profit → Sell 25%
• 10% profit → Sell 25% (50% total out)
• 15% profit → Sell 25% (75% total out)
• 20%+ profit → Let final 25% ride
Best for: Risk management, maximizing upside
Strategy 3: Trailing Stop
• Hit 10%? Set stop at 5%
• Hit 15%? Set stop at 10%
• Lock in profits while letting winners run
Best for: Trend followers, bull markets
Strategy 4: Adaptive
• Strong uptrend → wait for 15-20%
• Choppy market → exit at 5-10%
• Weakening trend → exit at any profit
Best for: Experienced traders
SETTINGS YOU CAN CUSTOMIZE:
Profit Target Levels:
Change any profit % to match your strategy
• Conservative: Lower targets (0.5%, 1%, 2%, 3%, 5%)
• Aggressive: Higher targets (2%, 5%, 10%, 20%, 30%)
Assets to Include:
• Enable/disable Bitcoin
• Enable/disable Copper
• Toggle which inverse assets to track
Display Options:
• Show all targets or just current tier
• Show/hide profit bar
• Show/hide composite line
• Move table position
Stop Loss:
• Set your risk tolerance (default 5%)
• Enable/disable auto-reset on stop loss
Correlation Periods:
• Adjust for your timeframe
• Hourly: 14/30/60
• Daily: 20/50/100
• Weekly: 10/20/50
ALERTS AVAILABLE:
Set alerts for any profit milestone:
Critical Alerts:
• "BUY Signal" - Entry notification
• "5% Profit Target" - First major milestone
• "10% Profit Target" - Decision point
• "Stop Loss Hit" - Risk protection
Optional Alerts:
• 1%, 2%, 3%, 4% - Early confirmations
• 15%, 20%, 25% - Major milestones
• Individual levels for your strategy
BEST TIMEFRAMES:
Daily Chart (Recommended):
Best for swing traders holding 3-10 days
Use default settings (20/50/100 periods)
Target 5-15% profits
4-Hour Chart:
Good for active swing traders
Adjust periods to 14/30/60
Target 3-10% profits
Hourly Chart:
For day traders and scalpers
Use shorter periods (14/30/60)
Target 1-5% profits
Adjust profit levels lower (0.5%, 1%, 2%, 3%)
WHY THIS INDICATOR IS DIFFERENT:
Most indicators tell you WHEN to enter.
This one tells you WHEN TO EXIT with profit.
Most indicators use vague signals.
This one shows EXACT profit percentages.
Most indicators leave exit decisions to you.
This one gives CLEAR, COLOR-CODED milestones.
Most indicators don't track your P/L.
This one shows your profit in text you can't miss.
QUICK START GUIDE:
1. Add indicator to gold chart (XAUUSD, GLD, GC1!)
2. Wait for green triangle (▲) BUY signal
3. Watch your profit grow in the table
4. Exit when you hit YOUR target (5%, 10%, 15%, etc.)
5. Repeat
That's it. Simple. Effective. Profitable.
IMPORTANT NOTES:
• This is for LONG positions only - not for shorting gold
• Position tracking begins only after a BUY signal
• The indicator shows levels - YOU decide when to exit
• Always use stop losses (default 5% is reasonable)
• Past performance doesn't guarantee future results
• Not financial advice - use for educational purposes
PRO TIPS:
Tip 1: Don't get greedy - 10-15% is an excellent profit for most trades
Tip 2: Purple stars (25%+) are RARE - don't wait for them on every trade
Tip 3: The profit bar color change is your visual cue - green→yellow→orange→red
Tip 4: Combine with resistance levels - "10% profit + resistance = exit"
Tip 5: Set alerts for YOUR target level so you never miss it
Tip 6: The giant P/L number in the table removes emotion from decisions
EXAMPLE TRADE:
Day 1: ▲ BUY signal at $2,100
Table shows: Position ✓ IN | Entry: 2,100
Day 2: Current P/L: +1.8%
First green circle appears (1% target hit)
Table tier: "1%"
Day 4: Current P/L: +5.2%
Dark green circle appears (5% target hit)
Profit bar is dark green
Decision point: Exit 50% here?
Day 7: Current P/L: +10.5%
Yellow diamond appears (10% target hit!)
Table shows: +10.5% in yellow text
Decision point: Exit remaining 50%?
Result: Average exit ~7.5% over 7 days. Excellent swing trade!
WORKS ON:
• Gold Spot (XAUUSD)
• Gold Futures (GC1!)
• Gold ETFs (GLD, IAU)
• Any gold instrument
Inverse Assets Tracked:
• DXY (US Dollar Index)
• Real Interest Rates (TIPS)
• US Treasury Yields (2Y, 10Y)
• Bitcoin (optional)
• Copper (optional)
THE BOTTOM LINE:
Stop guessing when to take profits.
Start SEEING your profit levels in real-time.
The indicator shows you the targets.
YOU choose when to cash out.
That's YOUR edge.
Developed for traders who want clear, actionable profit targets instead of vague signals.
Scalp Precision Matrix [BullByte]SCALP PRECISION MATRIX (SPM)
OVERVIEW
Scalp Precision Matrix (SPM) is a comprehensive decision-support framework designed specifically for scalpers and short-term traders. This indicator synthesizes five distinct analytical layers into a unified system that helps identify high-quality setups while avoiding common pitfalls that trap traders.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE CORE PROBLEM THIS INDICATOR ADDRESSES
Scalping demands rapid decision-making while simultaneously processing multiple data points. Traders constantly ask themselves: Is momentum still alive? Am I entering near a potential reversal zone? Is this the right session to trade? What is my actual risk-to-reward? Most traders either overwhelm themselves with too many separate indicators (creating analysis paralysis) or use too few (missing crucial context).
SPM was developed to consolidate these essential checks into one cohesive framework. Rather than overlaying disconnected indicators, each component in SPM directly informs and adjusts the others, creating an integrated analytical system.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHY THESE SPECIFIC COMPONENTS AND HOW THEY WORK TOGETHER
The five analytical layers in SPM are not arbitrarily combined. Each addresses a specific question in the scalping decision process, and together they form a logical workflow:
LAYER 1: MOMENTUM FUEL GAUGE
This answers the question: "Does the current move still have energy?"
After any impulse move (a significant directional price movement), momentum naturally decays over time. The Fuel Gauge estimates remaining momentum by analyzing four factors:
Body Strength (30% weight): Compares recent candle body sizes against the historical average. Strong momentum produces candles with large bodies relative to their wicks. The calculation takes the 3-bar average body size divided by the 20-bar average body size, then scales it to a 0-100 range.
Wick Rejection (25% weight): Measures the wick-to-body ratio. When wicks are large relative to bodies, it suggests rejection and weakening momentum. A ratio of 2.0 or higher (wicks twice the body size) scores low; smaller ratios score higher.
Volume Consistency (20% weight): Compares recent 3-bar average volume against the lookback period average. Sustained moves require consistent volume support. Volume dropping off suggests the move may be losing participation.
Time Decay (25% weight): Tracks how many bars have passed since the last detected impulse. Momentum naturally fades over time. The typical impulse duration is adjusted based on the current volatility regime.
These components are weighted and combined, then smoothed with a 3-period EMA to reduce noise. The result is a 0-100% gauge where:
- Above 70% = Strong momentum (green)
- 40-70% = Moderate momentum (amber)
- Below 40% = Weak momentum (red)
- Below 20% = Exhausted (triggers EXIT warning)
The Fuel Gauge also estimates how many bars of momentum remain based on the current burn rate.
IMPORTANT DISCLAIMER : The Fuel Gauge is NOT order flow, volume profile, or depth of market data. It is a technical proxy calculated entirely from standard OHLCV (Open, High, Low, Close, Volume) data. The term "Fuel" is used metaphorically to represent estimated remaining momentum energy.
LAYER 2: TRAP ZONE DETECTION
This answers the question: "Am I walking into a potential reversal area?"
Price tends to reverse at levels where it has reversed before. SPM identifies these zones by detecting clusters of historical swing points:
How it works:
1. The indicator detects swing highs and swing lows using the Swing Detection Length setting (default 5 bars on each side required to confirm a pivot).
2. Recent swing points are stored (up to 10 of each type).
3. For each potential zone, the algorithm counts how many swing points cluster within a tolerance of 0.5 ATR.
4. Zones with 2 or more clustered swing points, positioned between 0.3 and 4.0 ATR from current price, are marked as Trap Zones.
5. A Confluence Score is calculated based on cluster density and proximity to current price.
The percentage displayed (e.g., "TRAP 85%") is a CONFLUENCE SCORE, not a probability. Higher percentages mean more swing points cluster at that level and price is closer to it. This indicates stronger historical significance, not a prediction of future reversal.
CRITICAL DISCLAIMER : Trap Zones are NOT institutional order flow, liquidity pools, smart money footprints, or any proprietary data feed. They are calculated purely from historical swing point clustering using standard technical analysis. The term "trap" describes how price action has historically reversed at these levels, potentially trapping traders who enter prematurely. This is pattern recognition, not market structure data.
LAYER 3: VELOCITY ANALYSIS
This answers the question: "Is price moving favorably right now?"
Velocity measures how fast price is currently moving compared to its recent average:
Calculation:
- Current velocity = Absolute price change from previous bar divided by ATR
- Average velocity = Simple moving average of velocity over the lookback period
- Velocity ratio = Current velocity divided by average velocity
Classification:
- FAST (ratio above 1.5 ): Price is moving significantly faster than normal. Good for momentum continuation plays.
- NORMAL (ratio 0.5 to 1.5) : Typical price movement speed.
- SLOW (ratio below 0.5 ): Price is moving sluggishly. Often indicates ranging or choppy conditions where scalping becomes difficult.
The velocity score contributes 18% to the overall quality score calculation.
LAYER 4: SESSION AWARENESS
This answers the question: "Is this a good time to trade?"
Different trading sessions have different characteristics. SPM automatically detects which major session is active and adjusts its quality assessment:
Session Times (all in UTC):
- A sia Session : 00:00 - 08:00 UTC
- London Session : 08:00 - 16:00 UTC
- New York Session : 13:00 - 21:00 UTC
- London/NY Overlap : 13:00 - 16:00 UTC
- Off-Peak : Outside major sessions
Session Quality Weighting:
- Overlap : 100 points (highest liquidity, best movement)
- London : 85 points
- New York : 80 points
- Asia : 50 points (tends to range more)
- Off-Peak : 30 points (lower liquidity, more false signals)
The session score contributes 17% to the overall quality calculation. Signals are also filtered to prevent firing during off-peak hours.
Note : These are fixed UTC times and may not perfectly match your broker's session boundaries. Use them as general guidance rather than precise timing.
LAYER 5: VOLATILITY REGIME ADAPTATION
This answers the question: "How should I adjust for current market conditions?"
SPM compares current volatility (14-period ATR) against historical volatility (50-period ATR) to categorize the market:
HIGH Volatility (ratio above 1.3): Current ATR is 30%+ above normal. SPM widens thresholds to filter noise and extends target projections.
NORMAL Volatility (ratio 0.7 to 1.3): Typical conditions. Standard parameters apply.
LOW Volatility (ratio below 0.7): Current ATR is 30%+ below normal. SPM tightens thresholds for sensitivity and reduces target expectations. The market state may show AVOID during prolonged low volatility.
This adaptation prevents false signals during erratic markets and missed signals during quiet markets.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE SYNERGY: WHY THIS COMBINATION MATTERS
These five layers are not independent indicators placed on one chart. They form an interconnected system:
- A signal only fires when momentum exists (Fuel above 40%), price is away from danger zones (Trap Zones factored into quality score), movement is favorable (Velocity contributes to score), timing is appropriate (Session is not off-peak), and volatility is accounted for (thresholds adapt to regime).
- The Trap Zones directly influence Entry Zone placement. Entry zones are positioned beyond trap zones to avoid getting caught in reversals.
- Target projections automatically adjust to avoid placing take-profit levels inside detected trap zones.
- The Fuel Gauge affects which signal tier fires. Insufficient fuel prevents all signals.
- Session quality is weighted into the overall score, reducing signal quality during less favorable trading hours.
This integration is the core originality of SPM. Each component makes the others more useful than they would be in isolation.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW THE QUALITY SCORE IS CALCULATED
The Quality Score (0-100) synthesizes all layers into a single number for each direction (long and short):
For Long Quality Score:
- Fuel Component (28% weight) : Full fuel value if impulse direction is bullish; 60% of fuel value otherwise
- Trap Avoidance (22% weight) : 75 points if no trap zone below; otherwise 100 minus the trap confluence score (minimum 20)
- Velocity Component (18% weight) : Direct velocity score
- Session Component (17% weight) : Current session quality score
- Trend Alignment (15% bonus) : Adds 12 points if price is above the 20-period SMA
For Short Quality Score:
- Same structure but reversed (bearish impulse direction, trap zone above, price below SMA)
The direction with the higher score becomes the current Bias. A 12-point difference is required to switch bias, preventing flip-flopping in neutral conditions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SIGNAL TYPES AND WHAT THEY MEAN
SPM generates four types of signals, each with specific visual representation:
PRIME SIGNALS (Cyan Diamond)
These represent the highest quality confluence. Requirements:
- Quality score crosses above the Prime threshold (default 80)
- Bias aligns with signal direction
- Fuel is sufficient (above 40%)
- Session is active (not off-peak)
- Cooldown period has passed
Prime signals appear as cyan-colored diamond shapes. Long signals appear below the bar; short signals appear above.
STANDARD SIGNALS (Green Triangle Up / Red Triangle Down)
These represent good quality setups. Requirements:
- Quality score crosses above the Standard threshold (default 75) but below Prime
- Same bias, fuel, and cooldown requirements as Prime
Standard signals appear as small triangles in green (long) or red (short).
CAUTION SIGNALS (Small Faded Circle)
These represent minimum threshold setups. Requirements:
- Quality score crosses above the Caution threshold (default 65) but below Standard
- Same additional requirements
Caution signals appear as small, faded circles. These suggest the setup exists but with weaker confluence. Consider these only when broader market context supports them, or skip them entirely during uncertain conditions.
EXHAUSTION SIGNAL (Purple X with "EXIT" text)
This warning appears when the Fuel Gauge drops below 20% from above, indicating momentum has depleted. This is not a trade signal but a warning to:
- Consider exiting existing positions
- Avoid entering new trades in the current direction
- Wait for new momentum to develop
All signals use CONFIRMED bar data only (referencing the previous closed bar) to prevent repainting. Once a signal appears, it will never disappear or change position on historical bars.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
READING THE CHART ELEMENTS
TRAP ZONES (Red Dashed Box with "TRAP XX%" Label)
These mark price levels where multiple historical swing points cluster. The red dashed box shows the zone boundaries. The percentage is the confluence score indicating cluster strength and proximity.
How to use: When price approaches a trap zone, be cautious about entering in that direction. If your bias is LONG and there's a strong trap zone above, consider taking partial profits before price reaches it or adjusting your target below it.
ENTRY ZONES (Green Solid Box with "ENTRY" Label)
These show suggested entry areas based on the current bias direction. For LONG bias, the entry zone appears below the trap zone (buying the dip beyond support). For SHORT bias, it appears above the trap zone (selling the rally beyond resistance).
How to use: Rather than entering at current price, consider placing limit orders within the entry zone. This positions you beyond where typical trap reversals occur.
TARGET ZONES (Blue Dotted Box with "TARGET" Label)
These project potential take-profit areas based on ATR multiples, adjusted for:
- Current volatility regime (wider in high volatility, tighter in low)
- Impulse direction (larger targets when aligned with impulse)
- Nearby trap zones (targets adjust to avoid placing TP inside trap zones)
How to use: These are suggestions, not guarantees. Consider taking partial profits before the target or using trailing stops once price moves favorably.
STOP LEVEL (Orange Dashed Line with "STOP" Label)
This shows suggested stop-loss placement, calculated as 0.8 ATR beyond the trap zone (or 2.0 ATR from current price if no trap zone exists).
How to use: This provides a reference for risk calculation. The dashboard R:R ratio is calculated using this stop level.
Chart Example: Scalp Precision Matrix displays real-time market analysis through dynamic zones and quality scores. ENTRY/TARGET/STOP zones show potential price levels based on current market structure - they appear continuously as reference points, NOT as trade instructions. Actual trade signals (diamonds, triangles, circles) fire only when multiple conditions align: quality score thresholds are crossed, fuel gauge is sufficient, session is active, and cooldown period has passed. The zones help you understand market context; the signals tell you when to act.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
UNDERSTANDING THE DASHBOARD (Top Right Panel)
The main dashboard provides comprehensive market context:
Row 1 - Header:
- "SPM " : Indicator name
- Market State : Current overall condition
Market States Explained:
- PRIME : Excellent conditions. Quality score meets prime threshold, session is active. Best opportunities.
- READY : Good conditions. Quality score meets standard threshold. Solid setups available.
- WAIT : Mixed conditions. Some factors favorable, others not. Patience recommended.
- AVOID : Poor conditions. Off-peak session or very low volatility. High risk of false signals.
- EXIT : Fuel exhausted. Momentum depleted. Consider closing positions or waiting.
Row 2-3 - Quality Bars:
- " UP ########## " : Visual meter for long quality (each # = 10 points, . = empty)
- " DN ########## " : Visual meter for short quality
- The number on the right shows the exact quality score
Row 4 - Bias:
- Shows current directional lean: LONG, SHORT, or NEUTRAL
- Color-coded: Green for long, red for short, gray for neutral
Rows 5-7 (Full Mode Only) - Trade Levels:
- Entry : Suggested entry price for current bias direction
- Stop : Suggested stop-loss price
- Target : Projected take-profit price
Row 8 - Risk:Reward Ratio:
- Format : "1:X.X" where X.X is the reward multiple
- Color-coded : Green if 2:1 or better, amber if 1.5:1 to 2:1, red if below 1.5:1
Row 9 - Fuel:
- Shows percentage and estimated bars remaining in parentheses
- Example : "72% (8)" means 72% fuel with approximately 8 bars remaining
- Color-coded : Green above 70%, amber 40-70%, red below 40%
Row 10-11 (Full Mode Only) - Market Conditions:
- Vol : Current volatility regime (HIGH/NORMAL/LOW)
- Speed : Current velocity zone (FAST/NORMAL/SLOW)
Row 12 - Session:
- Shows active trading session
- Color-coded by session type
Row 13 (Full Mode Only) - Remaining:
- Time remaining in current session (hours and minutes)
Row 14 (Conditional) - Trap Warning:
- Appears when a significant trap zone exists in your bias direction
- Shows direction (ABOVE/BELOW) and confluence percentage
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
UNDERSTANDING THE QUICK PANEL (Bottom Left)
The Quick Panel provides essential information at a glance without looking away from price action:
Row 1: Current Bias and Quality Score (large text for quick reading)
Row 2: Market State
Row 3: Fuel Percentage
Row 4: Estimated Bars Remaining
Row 5: Risk:Reward Ratio
Row 6: Current Session
Both panels can be repositioned using the settings, and each can be toggled on/off independently.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS EXPLAINED
CORE SETTINGS:
Analysis Lookback (Default: 20)
Number of bars used for statistical calculations including average volume and average body size. Higher values create smoother but slower-reacting analysis. Lower values are more responsive but may include more noise.
Swing Detection Length (Default: 5)
Bars required on each side to confirm a swing high or low. A setting of 5 means a swing high must have 5 lower highs on each side. Lower values detect more swings (more trap zones, more sensitivity). Higher values find only major pivots (fewer but more significant zones).
Impulse Sensitivity (Default: 1.5)
Multiplier for ATR when detecting impulse moves. Lower values (like 1.0) detect smaller price movements as impulses, refreshing the fuel gauge more frequently. Higher values (like 2.5) require larger moves, making impulse detection less frequent but more significant.
SIGNAL SETTINGS:
Prime/Standard/Caution Thresholds (Defaults: 80/75/65)
These control the quality score required for each signal tier. You can adjust these based on your preference:
- More conservative : Raise thresholds (e.g., 85/80/70) for fewer but higher-quality signals
- More aggressive : Lower thresholds (e.g., 75/70/60) for more signals with slightly lower quality
Signal Cooldown (Default: 8 bars)
Minimum bars between signals to prevent signal spam. After any signal fires, no new signals can appear until this many bars pass. Increase for fewer signals in choppy markets; decrease if you want faster signal refresh.
Show Prime/Standard/Caution/Exhaustion Signals
Toggle each signal type on or off based on your preference.
ZONE DISPLAY:
Show Trap Zones / Entry Zones / Target Zones / Stop Levels
Toggle each zone type on or off. Turning off zones you don't use reduces chart clutter.
Zone Transparency (Default: 88)
Controls how transparent zone boxes appear. Higher values (closer to 95) make zones barely visible; lower values (closer to 75) make them more prominent.
Zone History (Default: 25 bars)
How far back zone boxes extend on the chart. Purely visual preference.
BACKGROUND:
Background Mode (Options: Off, Subtle, Normal)
Controls whether and how intensely the chart background is colored. Subtle is barely noticeable; Normal is more visible; Off disables background coloring entirely.
Background Type (Options: Bias, Fuel)
- Bias : Colors background based on current directional lean (green for long, red for short)
- Fuel : Colors background based on momentum level (green for high fuel, amber for moderate, red for low)
DASHBOARD / QUICK PANEL:
Show Dashboard / Show Quick Panel
Toggle each panel on or off.
Compact Mode
When enabled, the main dashboard shows only essential rows (quality bars, bias, R:R, fuel, session) without entry/stop/target levels, volatility, velocity, or time remaining.
Position Settings
Choose where each panel appears on your chart from six options: Top Right, Top Left, Bottom Right, Bottom Left, Middle Right, Middle Left.
ALERTS:
Alert Prime Signals / Standard Signals / Fuel Exhaustion
Enable or disable TradingView alerts for each condition. When enabled, you can set up alerts in TradingView that will notify you when these conditions occur.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
RECOMMENDED TIMEFRAMES AND USAGE
OPTIMAL TIMEFRAMES:
- 1-minute to 5-minute : Best for active scalping with quick entries and exits
- 5-minute to 15-minute : Balanced scalping with slightly more confirmation
- 15-minute to 1-hour : Short-term swing entries, fewer but more significant signals
Zone visualizations only appear on intraday timeframes to prevent chart clutter on higher timeframes.
BEST PRACTICES:
1. Trade primarily during LONDON, NEW YORK, or OVERLAP sessions. The indicator weights these sessions higher for good reason - liquidity and movement are typically better.
2. Prioritize PRIME signals. These represent the highest confluence and have proven most reliable. Use STANDARD signals as secondary opportunities. Treat CAUTION signals with extra scrutiny.
3. Respect the Fuel Gauge. Avoid entering new positions when fuel is below 40%. When the EXIT signal appears, seriously consider closing or reducing positions.
4. Pay attention to TRAP warnings. When the dashboard shows a trap zone in your bias direction, be cautious about holding through that level.
5. Verify R:R before entry. The dashboard shows the risk-to-reward ratio. Ensure it meets your minimum requirements (many traders require at least 1.5:1 or 2:1).
6. When state shows AVOID or EXIT, step back. These conditions typically produce poor results.
7. Combine with your own analysis. SPM is a decision-support tool, not a standalone system. Use it alongside your understanding of market structure, news events, and overall context.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRACTICAL EXAMPLE
Scenario : You're watching a 5-minute chart during London session. A cyan diamond (Prime Long signal) appears below the bar.
Before entering, you check the dashboard:
- State shows "PRIME" - conditions are favorable
- Fuel shows "72% (8)" - plenty of momentum remaining (approximately 8 bars)
- R:R shows "1:2.3" - acceptable risk-to-reward ratio
- Session shows "LONDON" - active session with good liquidity
- No TRAP warning in dashboard - no immediate resistance cluster in your way
- Entry zone visible on chart at a lower price level
- Stop and Target zones clearly marked
With this confluence of factors, you have context for a more informed decision. The signal indicates quality, the fuel suggests momentum remains, the R:R is favorable, and no immediate trap threatens your trade.
However, you also notice the target zone sits just below where a trap zone would be if there were one. This is by design - SPM adjusts targets to avoid placing them inside reversal zones.
This multi-factor confirmation delivered in a single glance is what SPM provides.
Chart Example :This chart demonstrates how the Scalp Precision Matrix identifies key market transitions. After a strong bullish impulse (cyan PRIME signal at ~08:30), price reached a historical reversal cluster (TRAP ZONE at 92,300). The indicator detected momentum exhaustion (purple EXIT signal) as fuel dropped below 20%, warning traders to exit longs. Now showing a SHORT bias with entry/stop/target zones clearly marked. The 92% trap zone confluence indicates a strong cluster of previous swing highs where price historically reversed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DATA WINDOW VALUES
For detailed analysis and strategy development, SPM exports the following values to TradingView's Data Window (visible when you hover over the chart with the indicator selected):
- Long Quality Score (0-100)
- Short Quality Score (0-100)
- Fuel Gauge (0-100%)
- Risk:Reward Ratio
These values can be useful for understanding how the indicator behaves over time and for developing your own insights about when it works best for your trading style.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NON-REPAINTING CONFIRMATION
All signals in SPM are generated using CONFIRMED bar data only. The signal logic references the previous closed bar's values ( and in Pine Script terms). This means:
- Signals appear at the OPEN of the new bar (after the previous bar closes)
- Signals will NEVER disappear once they appear
- Signals will NEVER change position on historical bars
- What you see in backtesting is what you would have seen in real-time
The dashboard and zones update in real-time to provide current market context, but the trading signals themselves are non-repainting.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IMPORTANT DISCLAIMERS
TERMINOLOGY CLARIFICATION:
This indicator uses terms that might imply access to data it does not have. To be completely transparent:
- "Trap Zones" are calculated from historical swing point clustering. They are NOT institutional liquidity pools, order blocks, smart money footprints, or any form of order flow data. The term "trap" is metaphorical, describing how price has historically reversed at these levels.
- "Fuel Gauge" is a technical momentum proxy. It is NOT order flow, volume profile, depth of market, or bid/ask data. It estimates momentum remaining based entirely on standard OHLCV price and volume data.
- "Quality Scores" are weighted combinations of the technical factors described above. A high score indicates multiple conditions align favorably according to the indicator's logic. It does NOT predict or guarantee trade success.
- The percentages shown on trap zones are CONFLUENCE SCORES measuring cluster density and proximity. They are NOT probability predictions of reversal.
TRADING RISK WARNING:
Trading involves substantial risk of loss and is not suitable for all investors. This indicator is a technical analysis tool designed to assist with decision-making. It does not constitute financial advice, trading advice, or any other sort of advice. Past performance of any signal or pattern does not guarantee future results. Markets are inherently unpredictable.
Always use proper risk management. Define your risk before entering any trade. Never risk more than you can afford to lose. Consider consulting with a licensed financial advisor before making trading decisions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ORIGINALITY STATEMENT - NOT A MASHUP
Scalp Precision Matrix is an original work that combines several analytical concepts into a purpose-built scalping framework. While individual components like ATR calculations, pivot detection, session timing, and trend alignment exist in various forms elsewhere, the specific implementation here represents original synthesis:
- The Fuel Gauge decay model with its four-component weighted calculation
- The Trap Zone cluster detection with confluence scoring
- The multi-factor quality scoring system that integrates all layers
- The trap-aware entry and target zone placement logic
- The volatility regime adaptation across all components
- The session weighting is integrated into the quality assessment
The indicator does not simply overlay separate indicators on one chart. It creates interconnected layers where each component informs and adjusts the others. This integration is the core originality of SPM.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
For best results, combine SPM with your own market understanding and always practice proper risk management.
-BullByte
Breaker Blocks Finder | Gold | ProjectSyndicateProjectSyndicate Breaker Blocks Finder
📊 Overview
The ProjectSyndicate Breaker Blocks Finder (PS BB Finder) is a professional-grade Pine Script indicator designed to detect and display Bullish and Bearish Breaker Blocks based on Smart Money Concepts (SMC) methodology. This indicator is specifically optimized for XAUUSD (Gold) trading but works reliably across all symbols and timeframes.
Key Features
✅ Non-Repainting: Breaker blocks never change position after formation
✅ Multi-Timeframe Support: Optimized for M5, M10, M15, M20, M30, and H1
✅ Highly Customizable: 10+ user-configurable settings
✅ Visual Clarity: Color-coded boxes and labels for easy identification
✅ Performance Optimized: Handles 1000+ candles without lag
✅ Cross-Symbol Compatible: Works on Forex, Crypto, Stocks, Indices, and Commodities
✅ Displacement Detection: Uses ATR-based displacement to filter false signals
🎯 What are Breaker Blocks?
A Breaker Block is a failed order block that becomes a new support or resistance zone after being invalidated by price. It represents a market structure shift where institutional traders (smart money) have flipped their position.
Bullish Breaker Block
A Bullish Breaker Block forms when:
1 A bearish order block (resistance zone) exists
2 Price breaks ABOVE this zone with strong displacement
3 The former resistance zone now becomes SUPPORT
4 Price may retest this zone before continuing higher
Visual: Green box with "BB ▲" label
Bearish Breaker Block
A Bearish Breaker Block forms when:
5 A bullish order block (support zone) exists
6 Price breaks BELOW this zone with strong displacement
7 The former support zone now becomes RESISTANCE
8 Price may retest this zone before continuing lower
Visual: Red box with "BB ▼" label
⚙️ Default Settings
Setting Default Range Description
Lookback Period 1000 100-5000 Number of historical candles to analyze
Max Breaker Blocks 5 1-50 Maximum number of breaker blocks to display
Swing Detection Length 10 2-20 Bars on each side to confirm swing high/low. Higher = more significant swings
Use Displacement Filter true true/false Enable to filter breaker blocks by displacement size
Displacement Multiplier 2.0 0.5-5.0 Minimum move size as multiple of ATR. Higher = stricter detection
Invalidation Method Close Close/Wick Close = Conservative (candle must close beyond zone)Wick = Aggressive (wick touch is enough)
📈 Recommended Timeframes & Settings
This indicator is optimized for the following timeframes. Use these settings as a starting point.
Lower Timeframes (M5, M10, M15, M20)
These settings are designed to capture faster price movements and are the default settings for the indicator.
Setting Recommended Value
Lookback Period 1000
Max Breaker Blocks 5
Swing Detection Length 10
Use Displacement Filter true
Displacement Multiplier 2.0
Invalidation Method Close
Higher Timeframes (M30, H1)
For these timeframes, a less strict displacement filter is recommended to capture more significant, but less frequent, breaker blocks.
Setting Recommended Value
Lookback Period 1000
Max Breaker Blocks 5
Swing Detection Length 10
Use Displacement Filter true
Displacement Multiplier 1.0
Invalidation Method Close
🎓 How to Use
Step 1: Identify Breaker Blocks
Once the indicator is loaded, breaker blocks will automatically appear on your chart:
• Green boxes = Bullish breaker blocks (former resistance, now support)
• Red boxes = Bearish breaker blocks (former support, now resistance)
Step 2: Wait for Retest
The most reliable trading opportunities occur when price retests the breaker block zone:
• For bullish breaker blocks, wait for price to come back down to the green zone
• For bearish breaker blocks, wait for price to come back up to the red zone
Step 3: Look for Confluence
Combine breaker blocks with other SMC concepts for higher probability setups:
• Fair Value Gaps (FVG) within the breaker block zone
• Liquidity grabs before the retest
• Break of Structure (BoS) or Change of Character (ChoCH) confirmation
Step 4: Enter the Trade
Bullish Setup:
• Entry: At or near the bullish breaker block zone
• Stop Loss: Below the breaker block
• Take Profit: Previous swing high or higher
Bearish Setup:
• Entry: At or near the bearish breaker block zone
• Stop Loss: Above the breaker block
• Take Profit: Previous swing low or lower
🛡️ Non-Repainting Guarantee
This indicator is 100% non-repainting, meaning:
✅ Breaker blocks never change position after formation
✅ Historical breaker blocks remain in the exact same location indefinitely
✅ Backtesting results are reliable and consistent
🐛 Troubleshooting
Issue: No Breaker Blocks Appearing
Solutions:
• Ensure "Use Displacement Filter" is enabled.
• On M30/H1, try lowering the "Displacement Multiplier" to 1.0.
• Scroll back in history; blocks may not be present on the most recent bars.
Issue: Too Many Breaker Blocks
Solutions:
• Increase "Displacement Multiplier" to 2.5 or 3.0.
• Increase "Swing Detection Length" to 12-15.
• Decrease "Max Breaker Blocks" to 3-4.
BUZARA// © Buzzara
// =================================
// PLEASE SUPPORT THE TEAM
// =================================
//
// Telegram: t.me
// =================================
//@version=5
VERSION = ' Buzzara2.0'
strategy('ALGOX V6_1_24', shorttitle = '🚀〄 Buzzara2.0 〄🚀'+ VERSION, overlay = true, explicit_plot_zorder = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 1, calc_on_every_tick = false, process_orders_on_close = true)
G_SCRIPT01 = '■ ' + 'SAIYAN OCC'
//#region ———— <↓↓↓ G_SCRIPT01 ↓↓↓> {
// === INPUTS ===
res = input.timeframe('15', 'TIMEFRAME', group ="NON REPAINT")
useRes = input(true, 'Use Alternate Signals')
intRes = input(10, 'Multiplier for Alernate Signals')
basisType = input.string('ALMA', 'MA Type: ', options= )
basisLen = input.int(50, 'MA Period', minval=1)
offsetSigma = input.int(5, 'Offset for LSMA / Sigma for ALMA', minval=0)
offsetALMA = input.float(2, 'Offset for ALMA', minval=0, step=0.01)
scolor = input(false, 'Show coloured Bars to indicate Trend?')
delayOffset = input.int(0, 'Delay Open/Close MA', minval=0, step=1,
tooltip = 'Forces Non-Repainting')
tradeType = input.string('BOTH', 'What trades should be taken : ',
options = )
//=== /INPUTS ===
h = input(false, 'Signals for Heikin Ashi Candles')
//INDICATOR SETTINGS
swing_length = input.int(10, 'Swing High/Low Length', group = 'Settings', minval = 1, maxval = 50)
history_of_demand_to_keep = input.int(20, 'History To Keep', minval = 5, maxval = 50)
box_width = input.float(2.5, 'Supply/Demand Box Width', group = 'Settings', minval = 1, maxval = 10, step = 0.5)
//INDICATOR VISUAL SETTINGS
show_zigzag = input.bool(false, 'Show Zig Zag', group = 'Visual Settings', inline = '1')
show_price_action_labels = input.bool(false, 'Show Price Action Labels', group = 'Visual Settings', inline = '2')
supply_color = input.color(#00000000, 'Supply', group = 'Visual Settings', inline = '3')
supply_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '3')
demand_color = input.color(#00000000, 'Demand', group = 'Visual Settings', inline = '4')
demand_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '4')
bos_label_color = input.color(#00000000, 'BOS Label', group = 'Visual Settings', inline = '5')
poi_label_color = input.color(#00000000, 'POI Label', group = 'Visual Settings', inline = '7')
poi_border_color = input.color(#00000000, 'POI border', group = 'Visual Settings', inline = '7')
swing_type_color = input.color(#00000000, 'Price Action Label', group = 'Visual Settings', inline = '8')
zigzag_color = input.color(#00000000, 'Zig Zag', group = 'Visual Settings', inline = '9')
//END SETTINGS
// FUNCTION TO ADD NEW AND REMOVE LAST IN ARRAY
f_array_add_pop(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// FUNCTION SWING H & L LABELS
f_sh_sl_labels(array, swing_type) =>
var string label_text = na
if swing_type == 1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HH'
else
label_text := 'LH'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_down,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
else if swing_type == -1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HL'
else
label_text := 'LL'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_up,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
// FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING
f_check_overlapping(new_poi, box_array, atrValue) =>
atr_threshold = atrValue * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// FUNCTION TO DRAW SUPPLY OR DEMAND ZONE
f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atrValue) =>
atr_buffer = atrValue * (box_width / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = f_check_overlapping(poi, box_array, atrValue)
// okay_to_draw = true
//delete oldest box, and then create a new box and add it to the array
if box_type == 1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
// FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN
f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
// if ta.crossover(close, level_to_break)
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
// if ta.crossunder(close, level_to_break)
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT
f_extend_box_endpoint(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 100)
//
stratRes = timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes, '###M') :
timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes, '###W') :
timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes, '###D') :
timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') :
'60'
src = h ? request.security(ticker.heikinashi(syminfo.tickerid),
timeframe.period, close, lookahead = barmerge.lookahead_off) : close
// CALCULATE ATR
atrValue = ta.atr(50)
// CALCULATE SWING HIGHS & SWING LOWS
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
// ARRAYS FOR SWING H/L & BN
var swing_high_values = array.new_float(5,0.00)
var swing_low_values = array.new_float(5,0.00)
var swing_high_bns = array.new_int(5,0)
var swing_low_bns = array.new_int(5,0)
// ARRAYS FOR SUPPLY / DEMAND
var current_supply_box = array.new_box(history_of_demand_to_keep, na)
var current_demand_box = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR SUPPLY / DEMAND POI LABELS
var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR BOS
var supply_bos = array.new_box(5, na)
var demand_bos = array.new_box(5, na)
//END CALCULATIONS
// NEW SWING HIGH
if not na(swing_high)
//MANAGE SWING HIGH VALUES
f_array_add_pop(swing_high_values, swing_high)
f_array_add_pop(swing_high_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_high_values, 1)
f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atrValue)
// NEW SWING LOW
else if not na(swing_low)
//MANAGE SWING LOW VALUES
f_array_add_pop(swing_low_values, swing_low)
f_array_add_pop(swing_low_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_low_values, -1)
f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atrValue)
f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
f_extend_box_endpoint(current_supply_box)
f_extend_box_endpoint(current_demand_box)
channelBal = input.bool(false, "Channel Balance", group = "CHART")
lr_slope(_src, _len) =>
x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
for i = 0 to _len - 1
val = _src
per = i + 1
x += per
y += val
x2 += per * per
xy += val * per
_slp = (_len * xy - x * y) / (_len * x2 - x * x)
_avg = y / _len
_int = _avg - _slp * x / _len + _slp
lr_dev(_src, _len, _slp, _avg, _int) =>
upDev = 0.0, dnDev = 0.0
val = _int
for j = 0 to _len - 1
price = high - val
if price > upDev
upDev := price
price := val - low
if price > dnDev
dnDev := price
price := _src
val += _slp
//
= ta.kc(close, 80, 10.5)
= ta.kc(close, 80, 9.5)
= ta.kc(close, 80, 8)
= ta.kc(close, 80, 3)
barsL = 10
barsR = 10
pivotHigh = fixnan(ta.pivothigh(barsL, barsR) )
pivotLow = fixnan(ta.pivotlow(barsL, barsR) )
source = close, period = 150
= lr_slope(source, period)
= lr_dev(source, period, s, a, i)
y1 = low - (ta.atr(30) * 2), y1B = low - ta.atr(30)
y2 = high + (ta.atr(30) * 2), y2B = high + ta.atr(30)
x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
//Functions
//Line Style function
get_line_style(style) =>
out = switch style
'???' => line.style_solid
'----' => line.style_dashed
' ' => line.style_dotted
//Function to get order block coordinates
get_coordinates(condition, top, btm, ob_val)=>
var ob_top = array.new_float(0)
var ob_btm = array.new_float(0)
var ob_avg = array.new_float(0)
var ob_left = array.new_int(0)
float ob = na
//Append coordinates to arrays
if condition
avg = math.avg(top, btm)
array.unshift(ob_top, top)
array.unshift(ob_btm, btm)
array.unshift(ob_avg, avg)
ob := ob_val
//Function to remove mitigated order blocks from coordinate arrays
remove_mitigated(ob_top, ob_btm, ob_left, ob_avg, target, bull)=>
mitigated = false
target_array = bull ? ob_btm : ob_top
for element in target_array
idx = array.indexof(target_array, element)
if (bull ? target < element : target > element)
mitigated := true
array.remove(ob_top, idx)
array.remove(ob_btm, idx)
array.remove(ob_avg, idx)
array.remove(ob_left, idx)
mitigated
//Function to set order blocks
set_order_blocks(ob_top, ob_btm, ob_left, ob_avg, ext_last, bg_css, border_css, lvl_css)=>
var ob_box = array.new_box(0)
var ob_lvl = array.new_line(0)
//Global elements
var os = 0
var target_bull = 0.
var target_bear = 0.
// Create non-repainting security function
rp_security(_symbol, _res, _src) =>
request.security(_symbol, _res, _src )
htfHigh = rp_security(syminfo.tickerid, res, high)
htfLow = rp_security(syminfo.tickerid, res, low)
// Main Indicator
// Functions
smoothrng(x, t, m) =>
wper = t * 2 - 1
avrng = ta.ema(math.abs(x - x ), t)
smoothrng = ta.ema(avrng, wper) * m
rngfilt(x, r) =>
rngfilt = x
rngfilt := x > nz(rngfilt ) ? x - r < nz(rngfilt ) ? nz(rngfilt ) : x - r : x + r > nz(rngfilt ) ? nz(rngfilt ) : x + r
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
securityNoRep(sym, res, src) => request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on)
swingPoints(prd) =>
pivHi = ta.pivothigh(prd, prd)
pivLo = ta.pivotlow (prd, prd)
last_pivHi = ta.valuewhen(pivHi, pivHi, 1)
last_pivLo = ta.valuewhen(pivLo, pivLo, 1)
hh = pivHi and pivHi > last_pivHi ? pivHi : na
lh = pivHi and pivHi < last_pivHi ? pivHi : na
hl = pivLo and pivLo > last_pivLo ? pivLo : na
ll = pivLo and pivLo < last_pivLo ? pivLo : na
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
f_kc(src, len, sensitivity) =>
basis = ta.sma(src, len)
span = ta.atr(len)
wavetrend(src, chlLen, avgLen) =>
esa = ta.ema(src, chlLen)
d = ta.ema(math.abs(src - esa), chlLen)
ci = (src - esa) / (0.015 * d)
wt1 = ta.ema(ci, avgLen)
wt2 = ta.sma(wt1, 3)
f_top_fractal(_src) => _src < _src and _src < _src and _src > _src and _src > _src
f_bot_fractal(_src) => _src > _src and _src > _src and _src < _src and _src < _src
top_fractal = f_top_fractal(src)
bot_fractal = f_bot_fractal(src)
f_fractalize (_src) => top_fractal ? 1 : bot_fractal ? -1 : 0
f_findDivs(src, topLimit, botLimit) =>
fractalTop = f_fractalize(src) > 0 and src >= topLimit ? src : na
fractalBot = f_fractalize(src) < 0 and src <= botLimit ? src : na
highPrev = ta.valuewhen(fractalTop, src , 0)
highPrice = ta.valuewhen(fractalTop, high , 0)
lowPrev = ta.valuewhen(fractalBot, src , 0)
lowPrice = ta.valuewhen(fractalBot, low , 0)
bearSignal = fractalTop and high > highPrice and src < highPrev
bullSignal = fractalBot and low < lowPrice and src > lowPrev
// Get user input
enableSR = input(false , "SR On/Off", group="SR")
colorSup = input(#00000000 , "Support Color", group="SR")
colorRes = input(#00000000 , "Resistance Color", group="SR")
strengthSR = input.int(2 , "S/R Strength", 1, group="SR")
lineStyle = input.string("Dotted", "Line Style", , group="SR")
lineWidth = input.int(2 , "S/R Line Width", 1, group="SR")
useZones = input(true , "Zones On/Off", group="SR")
useHLZones = input(true , "High Low Zones On/Off", group="SR")
zoneWidth = input.int(2 , "Zone Width %", 0,
tooltip = "it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR")
expandSR = input(true , "Expand SR")
// Get components
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid :
lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1 )
d1 = 0.0, d1 := nz(d1 )
highestph = 0.0, highestph := highestph
lowestpl = 0.0, lowestpl := lowestpl
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel )
label llabel = na, label.delete(llabel )
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
highestph := math.max(highestph, nz(ph , prdlowest), nz(pl , prdlowest))
lowestpl := math.min(lowestpl, nz(ph , prdhighest), nz(pl , prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (not na(ph ) and (ph != 0) ? high : low ) + cwidth
dnl = (not na(ph ) and (ph != 0) ? high : low ) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph )
if high <= upl and high >= dnl
tpoint += 1
chg := true
if not na(pl )
if low <= upl and low >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if (not na(ph ) and countpp < 21)
array.set(sr_levels, countpp, high )
if (not na(pl ) and countpp < 21)
array.set(sr_levels, countpp, low )
// Plot
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? colorSup : colorRes
lo_col = close >= lowestpl ? colorSup : colorRes
if enableSR
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, hi_col)
linefill.new(lowest_fill1 , lowest_fill2 , lo_col)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if (not na(array.get(sr_levs, x)) and enableSR)
line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), line_col))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if (not na(array.get(sr_levs, x)) and enableSR)
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
// Get components
rsi = ta.rsi(close, 28)
//rsiOb = rsi > 78 and rsi > ta.ema(rsi, 10)
//rsiOs = rsi < 27 and rsi < ta.ema(rsi, 10)
rsiOb = rsi > 65 and rsi > ta.ema(rsi, 10)
rsiOs = rsi < 35 and rsi < ta.ema(rsi, 10)
dHigh = securityNoRep(syminfo.tickerid, "D", high )
dLow = securityNoRep(syminfo.tickerid, "D", low )
dClose = securityNoRep(syminfo.tickerid, "D", close )
ema = ta.ema(close, 144)
emaBull = close > ema
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() and not timeframe.isseconds
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() or timeframe.isseconds
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep1(sym, res, src) =>
bool bull_ = na
bull_ := equal_tf(res) ? src : bull_
bull_ := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull_
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) + (timeframe.isseconds ? "S" : "") : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull_ := array.pop(bull_array)
array.clear(bull_array)
bull_
// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
v1 = ta.sma(src, len) // Simple
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
v7 = 0.0
sma_1 = ta.sma(src, len) // Smoothed
v7 := na(v7 ) ? sma_1 : (v7 * (len - 1) + src) / len
v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) // Hull
v9 = ta.linreg(src, len, offSig) // Least Squares
v10 = ta.alma(src, len, offALMA, offSig) // Arnaud Legoux
v11 = ta.sma(v1, len) // Triangular (extreme smooth)
// SuperSmoother filter
// 2013 John F. Ehlers
a1 = math.exp(-1.414 * 3.14159 / len)
b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len)
c2 = b1
c3 = -a1 * a1
c1 = 1 - c2 - c3
v12 = 0.0
v12 := c1 * (src + nz(src )) / 2 + c2 * nz(v12 ) + c3 * nz(v12 )
type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type == 'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HullMA' ? v8 : type == 'LSMA' ? v9 : type == 'ALMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
security_1 = request.security(syminfo.tickerid, res, exp, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
use ? security_1 : exp
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
closeSeries = variant(basisType, close , basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open , basisLen, offsetSigma, offsetALMA)
// === /SERIES ===
// Get Alternate resolution Series if selected.
closeSeriesAlt = reso(closeSeries, useRes, stratRes)
openSeriesAlt = reso(openSeries, useRes, stratRes)
//
lxTrigger = false
sxTrigger = false
leTrigger = ta.crossover (closeSeriesAlt, openSeriesAlt)
seTrigger = ta.crossunder(closeSeriesAlt, openSeriesAlt)
G_RISK = '■ ' + 'Risk Management'
//#region ———— <↓↓↓ G_RISK ↓↓↓> {
// ———————————
//Tooltip
T_LVL = '(%) Exit Level'
T_QTY = '(%) Adjust trade exit volume'
T_MSG = 'Paste JSON message for your bot'
//Webhook Message
O_LEMSG = 'Long Entry'
O_LXMSGSL = 'Long SL'
O_LXMSGTP1 = 'Long TP1'
O_LXMSGTP2 = 'Long TP2'
O_LXMSGTP3 = 'Long TP3'
O_LXMSG = 'Long Exit'
O_SEMSG = 'Short Entry'
O_SXMSGSL = 'Short SL'
O_SXMSGA = 'Short TP1'
O_SXMSGB = 'Short TP2'
O_SXMSGC = 'Short TP3'
O_SXMSGX = 'Short Exit'
// ——————————— | | | Line length guide |
i_lxLvlTP1 = input.float (0.2, 'Level TP1' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP1 = input.float (80.0, 'Qty TP1' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP2 = input.float (0.5, 'Level TP2' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP2 = input.float (10.0, 'Qty TP2' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP3 = input.float (7.0, 'Level TP3' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP3 = input.float (2, 'Qty TP3' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlSL = input.float (0.5, 'Stop Loss' , group = G_RISK,
tooltip = T_LVL)
i_sxLvlTP1 = i_lxLvlTP1
i_sxQtyTP1 = i_lxQtyTP1
i_sxLvlTP2 = i_lxLvlTP2
i_sxQtyTP2 = i_lxQtyTP2
i_sxLvlTP3 = i_lxLvlTP3
i_sxQtyTP3 = i_lxQtyTP3
i_sxLvlSL = i_lxLvlSL
G_MSG = '■ ' + 'Webhook Message'
i_leMsg = input.string (O_LEMSG ,'Long Entry' , group = G_MSG, tooltip = T_MSG)
i_lxMsgSL = input.string (O_LXMSGSL ,'Long SL' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP1 = input.string (O_LXMSGTP1,'Long TP1' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP2 = input.string (O_LXMSGTP2,'Long TP2' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP3 = input.string (O_LXMSGTP3,'Long TP3' , group = G_MSG, tooltip = T_MSG)
i_lxMsg = input.string (O_LXMSG ,'Long Exit' , group = G_MSG, tooltip = T_MSG)
i_seMsg = input.string (O_SEMSG ,'Short Entry' , group = G_MSG, tooltip = T_MSG)
i_sxMsgSL = input.string (O_SXMSGSL ,'Short SL' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP1 = input.string (O_SXMSGA ,'Short TP1' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP2 = input.string (O_SXMSGB ,'Short TP2' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP3 = input.string (O_SXMSGC ,'Short TP3' , group = G_MSG, tooltip = T_MSG)
i_sxMsg = input.string (O_SXMSGX ,'Short Exit' , group = G_MSG, tooltip = T_MSG)
i_src = close
G_DISPLAY = 'Display'
//
i_alertOn = input.bool (true, 'Alert Labels On/Off' , group = G_DISPLAY)
i_barColOn = input.bool (true, 'Bar Color On/Off' , group = G_DISPLAY)
// ———————————
// @function Calculate the Take Profit line, and the crossover or crossunder
f_tp(_condition, _conditionValue, _leTrigger, _seTrigger, _src, _lxLvlTP, _sxLvlTP)=>
var float _tpLine = 0.0
_topLvl = _src + (_src * (_lxLvlTP / 100))
_botLvl = _src - (_src * (_sxLvlTP / 100))
_tpLine := _condition != _conditionValue and _leTrigger ? _topLvl :
_condition != -_conditionValue and _seTrigger ? _botLvl :
nz(_tpLine )
// @function Similar to "ta.crossover" or "ta.crossunder"
f_cross(_scr1, _scr2, _over)=>
_cross = _over ? _scr1 > _scr2 and _scr1 < _scr2 :
_scr1 < _scr2 and _scr1 > _scr2
// ———————————
//
var float condition = 0.0
var float slLine = 0.0
var float entryLine = 0.0
//
entryLine := leTrigger and condition <= 0.0 ? close :
seTrigger and condition >= 0.0 ? close : nz(entryLine )
//
slTopLvl = i_src + (i_src * (i_lxLvlSL / 100))
slBotLvl = i_src - (i_src * (i_sxLvlSL / 100))
slLine := condition <= 0.0 and leTrigger ? slBotLvl :
condition >= 0.0 and seTrigger ? slTopLvl : nz(slLine )
slLong = f_cross(low, slLine, false)
slShort = f_cross(high, slLine, true )
//
= f_tp(condition, 1.2,leTrigger, seTrigger, i_src, i_lxLvlTP3, i_sxLvlTP3)
= f_tp(condition, 1.1,leTrigger, seTrigger, i_src, i_lxLvlTP2, i_sxLvlTP2)
= f_tp(condition, 1.0,leTrigger, seTrigger, i_src, i_lxLvlTP1, i_sxLvlTP1)
tp3Long = f_cross(high, tp3Line, true )
tp3Short = f_cross(low, tp3Line, false)
tp2Long = f_cross(high, tp2Line, true )
tp2Short = f_cross(low, tp2Line, false)
tp1Long = f_cross(high, tp1Line, true )
tp1Short = f_cross(low, tp1Line, false)
switch
leTrigger and condition <= 0.0 => condition := 1.0
seTrigger and condition >= 0.0 => condition := -1.0
tp3Long and condition == 1.2 => condition := 1.3
tp3Short and condition == -1.2 => condition := -1.3
tp2Long and condition == 1.1 => condition := 1.2
tp2Short and condition == -1.1 => condition := -1.2
tp1Long and condition == 1.0 => condition := 1.1
tp1Short and condition == -1.0 => condition := -1.1
slLong and condition >= 1.0 => condition := 0.0
slShort and condition <= -1.0 => condition := 0.0
lxTrigger and condition >= 1.0 => condition := 0.0
sxTrigger and condition <= -1.0 => condition := 0.0
longE = leTrigger and condition <= 0.0 and condition == 1.0
shortE = seTrigger and condition >= 0.0 and condition == -1.0
longX = lxTrigger and condition >= 1.0 and condition == 0.0
shortX = sxTrigger and condition <= -1.0 and condition == 0.0
longSL = slLong and condition >= 1.0 and condition == 0.0
shortSL = slShort and condition <= -1.0 and condition == 0.0
longTP3 = tp3Long and condition == 1.2 and condition == 1.3
shortTP3 = tp3Short and condition == -1.2 and condition == -1.3
longTP2 = tp2Long and condition == 1.1 and condition == 1.2
shortTP2 = tp2Short and condition == -1.1 and condition == -1.2
longTP1 = tp1Long and condition == 1.0 and condition == 1.1
shortTP1 = tp1Short and condition == -1.0 and condition == -1.1
// ——————————— {
//
if strategy.position_size <= 0 and longE and barstate.isconfirmed
strategy.entry(
'Long',
strategy.long,
alert_message = i_leMsg,
comment = 'LE')
if strategy.position_size > 0 and condition == 1.0
strategy.exit(
id = 'LXTP1',
from_entry = 'Long',
qty_percent = i_lxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'LXTP1',
comment_loss = 'SL',
alert_profit = i_lxMsgTP1,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.1
strategy.exit(
id = 'LXTP2',
from_entry = 'Long',
qty_percent = i_lxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'LXTP2',
comment_loss = 'SL',
alert_profit = i_lxMsgTP2,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.2
strategy.exit(
id = 'LXTP3',
from_entry = 'Long',
qty_percent = i_lxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'LXTP3',
comment_loss = 'SL',
alert_profit = i_lxMsgTP3,
alert_loss = i_lxMsgSL)
if longX
strategy.close(
'Long',
alert_message = i_lxMsg,
comment = 'LX')
//
if strategy.position_size >= 0 and shortE and barstate.isconfirmed
strategy.entry(
'Short',
strategy.short,
alert_message = i_leMsg,
comment = 'SE')
if strategy.position_size < 0 and condition == -1.0
strategy.exit(
id = 'SXTP1',
from_entry = 'Short',
qty_percent = i_sxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'SXTP1',
comment_loss = 'SL',
alert_profit = i_sxMsgTP1,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.1
strategy.exit(
id = 'SXTP2',
from_entry = 'Short',
qty_percent = i_sxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'SXTP2',
comment_loss = 'SL',
alert_profit = i_sxMsgTP2,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.2
strategy.exit(
id = 'SXTP3',
from_entry = 'Short',
qty_percent = i_sxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'SXTP3',
comment_loss = 'SL',
alert_profit = i_sxMsgTP3,
alert_loss = i_sxMsgSL)
if shortX
strategy.close(
'Short',
alert_message = i_sxMsg,
comment = 'SX')
// ———————————
c_tp = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.green
c_entry = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.blue
c_sl = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.red
p_tp1Line = plot (
condition == 1.0 or
condition == -1.0 ? tp1Line : na,
title = "TP Line 1",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp2Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 ? tp2Line : na,
title = "TP Line 2",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp3Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? tp3Line : na,
title = "TP Line 3",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_entryLine = plot (
condition >= 1.0 or
condition <= -1.0 ? entryLine : na,
title = "Entry Line",
color = c_entry,
linewidth = 1,
style = plot.style_linebr)
p_slLine = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? slLine : na,
title = "SL Line",
color = c_sl,
linewidth = 1,
style = plot.style_linebr)
fill(
p_tp3Line, p_entryLine,
color = leTrigger or seTrigger ? na :color.new(color.green, 90))
fill(
p_entryLine, p_slLine,
color = leTrigger or seTrigger ? na :color.new(color.red, 90))
//
plotshape(
i_alertOn and longE,
title = 'Long',
text = 'Long',
textcolor = color.white,
color = color.green,
style = shape.labelup,
size = size.tiny,
location = location.belowbar)
plotshape(
i_alertOn and shortE,
title = 'Short',
text = 'Short',
textcolor = color.white,
color = color.red,
style = shape.labeldown,
size = size.tiny,
location = location.abovebar)
plotshape(
i_alertOn and (longX or shortX) ? close : na,
title = 'Close',
text = 'Close',
textcolor = color.white,
color = color.gray,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
l_tp = i_alertOn and (longTP1 or shortTP1) ? close : na
plotshape(
l_tp,
title = "TP1 Cross",
text = "TP1",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP2 or shortTP2) ? close : na,
title = "TP2 Cross",
text = "TP2",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP3 or shortTP3) ? close : na,
title = "TP3 Cross",
text = "TP3",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longSL or shortSL) ? close : na,
title = "SL Cross",
text = "SL",
textcolor = color.white,
color = color.maroon,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
//
plot(
na,
title = "─── ───",
editable = false,
display = display.data_window)
plot(
condition,
title = "condition",
editable = false,
display = display.data_window)
plot(
strategy.position_size * 100,
title = ".position_size",
editable = false,
display = display.data_window)
//#endregion }
// ——————————— <↑↑↑ G_RISK ↑↑↑>
//#region ———— <↓↓↓ G_SCRIPT02 ↓↓↓> {
// @function Queues a new element in an array and de-queues its first element.
f_qDq(_array, _val) =>
array.push(_array, _val)
_return = array.shift(_array)
_return
var line a_slLine = array.new_line(1)
var line a_entryLine = array.new_line(1)
var line a_tp3Line = array.new_line(1)
var line a_tp2Line = array.new_line(1)
var line a_tp1Line = array.new_line(1)
var label a_slLabel = array.new_label(1)
var label a_tp3label = array.new_label(1)
var label a_tp2label = array.new_label(1)
var label a_tp1label = array.new_label(1)
var label a_entryLabel = array.new_label(1)
newEntry = longE or shortE
entryIndex = 1
entryIndex := newEntry ? bar_index : nz(entryIndex )
lasTrade = bar_index >= entryIndex
l_right = 10
line.delete(
f_qDq(a_slLine,
line.new(
entryIndex,
slLine,
last_bar_index + l_right,
slLine,
style = line.style_solid,
color = c_sl)))
line.delete(
f_qDq(a_entryLine,
line.new(
entryIndex,
entryLine,
last_bar_index + l_right,
entryLine,
style = line.style_solid,
color = color.blue)))
line.delete(
f_qDq(a_tp3Line,
line.new(
entryIndex,
tp3Line,
last_bar_index + l_right,
tp3Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp2Line,
line.new(
entryIndex,
tp2Line,
last_bar_index + l_right,
tp2Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp1Line,
line.new(
entryIndex,
tp1Line,
last_bar_index + l_right,
tp1Line,
style = line.style_solid,
color = c_tp)))
label.delete(
f_qDq(a_slLabel,
label.new(
last_bar_index + l_right,
slLine,
'SL: ' + str.tostring(slLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_sl)))
label.delete(
f_qDq(a_entryLabel,
label.new(
last_bar_index + l_right,
entryLine,
'Entry: ' + str.tostring(entryLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = color.blue)))
label.delete(
f_qDq(a_tp3label,
label.new(
last_bar_index + l_right,
tp3Line,
'TP3: ' + str.tostring(tp3Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp2label,
label.new(
last_bar_index + l_right,
tp2Line,
'TP2: ' + str.tostring(tp2Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp1label,
label.new(
last_bar_index + l_right,
tp1Line,
'TP1: ' + str.tostring(tp1Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
// ———————————
//
if longE or shortE or longX or shortX
alert(message = 'Any Alert', freq = alert.freq_once_per_bar_close)
if longE
alert(message = 'Long Entry', freq = alert.freq_once_per_bar_close)
if shortE
alert(message = 'Short Entry', freq = alert.freq_once_per_bar_close)
if longX
alert(message = 'Long Exit', freq = alert.freq_once_per_bar_close)
if shortX
alert(message = 'Short Exit', freq = alert.freq_once_per_bar_close)
//#endregion }
// ——————————— <↑↑↑ G_SCRIPT03 ↑↑↑>
MDZ Strategy v4.2 - Multi-factor trend strategyWhat This Strategy Does
MDZ (Momentum Divergence Zones) v4.2 is a trend-following strategy that enters long positions when multiple momentum and trend indicators align. It's designed for swing trading on higher timeframes (2H-4H) and uses ATR-based position management.
The strategy waits for strong trend confirmation before entry, requiring agreement across five different filters. This reduces trade frequency but aims to improve signal quality.
Entry Logic
A long entry triggers when ALL of the following conditions are true:
1. EMA Stack (Trend Structure)
Price > EMA 20 > EMA 50 > EMA 200
This "stacked" alignment indicates a strong established uptrend
2. RSI Filter (Momentum Window)
RSI between 45-75 (default)
Confirms momentum without entering overbought territory
3. ADX Filter (Trend Strength)
ADX > 20 (default)
Ensures the trend has sufficient strength, not a ranging market
4. MACD Confirmation
MACD line above signal line
Histogram increasing (momentum accelerating)
5. Directional Movement
+DI > -DI
Confirms bullish directional pressure
Exit Logic
Positions are managed with ATR-based levels:
ParameterDefaultDescriptionStop Loss2.5 × ATRBelow entry priceTake Profit6.0 × ATRAbove entry priceTrailing Stop2.0 × ATROptional, activates after entry
The default configuration produces a 1:2.4 risk-reward ratio.
Presets
The strategy includes optimized presets based on historical testing:
PresetTimeframeNotes1H Standard1 HourMore frequent signals2H Low DD2 HourConservative settings3H Optimized3 HourBalanced approach4H Swing4 HourWider stops for swing tradesCustomAnyFull manual control
Select "Custom" to adjust all parameters manually.
Inputs Explained
EMAs
Fast EMA (20): Short-term trend
Slow EMA (50): Medium-term trend
Trend EMA (200): Long-term trend filter
RSI
Length: Lookback period (default 14)
Min/Max: Entry window to avoid extremes
ADX
Min ADX: Minimum trend strength threshold
Risk
Stop Loss ATR: Multiplier for stop distance
Take Profit ATR: Multiplier for target distance
Trail ATR: Trailing stop distance (if enabled)
Session (Optional)
Filter entries by time of day
Recommended OFF for 3H+ timeframes
What's Displayed
Info Panel (Top Right)
Current preset
Trend status (Strong/Wait)
ADX, RSI, MACD readings
Position status
Risk-reward ratio
Stats Panel (Top Left)
Net P&L %
Total trades
Win rate
Profit factor
Maximum drawdown
Chart
EMA lines (20 blue, 50 orange, 200 purple)
Green background during strong uptrend
Triangle markers on entry signals
Important Notes
⚠️ This is a long-only strategy. It does not take short positions.
⚠️ Historical results do not guarantee future performance. Backtests show what would have happened in the past under specific conditions. Markets change, and any strategy can experience drawdowns or extended losing periods.
⚠️ Risk management is your responsibility. The default settings risk 100% of equity per trade for backtesting purposes. In live trading, appropriate position sizing based on your risk tolerance is essential.
⚠️ Slippage and commissions matter. The backtest includes 0.02% commission and 1 tick slippage, but actual execution costs vary by broker and market conditions.
Best Practices
Test on your specific market — Results vary significantly across different instruments
Use appropriate position sizing — Never risk more than you can afford to lose
Combine with your own analysis — No indicator replaces understanding market context
Paper trade first — Validate the strategy matches your trading style before risking capital
Alerts
Two alerts are available:
MDZ Long Entry: Fires when all entry conditions are met
Uptrend Started: Fires when EMA stack first aligns bullish
Methodology
This strategy is based on the principle that trend continuation has better odds than reversal when multiple timeframe momentum indicators agree. By requiring five independent confirmations, it filters out weak setups at the cost of fewer total signals.
The ATR-based exits adapt to current volatility rather than using fixed pip/point targets, which helps the strategy adjust to different market conditions.
Questions? Leave a comment below.
Golder/Silter SetupsGolden/Silver Strategy
Overview
The Tony Rago Golden/Silver Strategy is a high-precision mean-reversion system specifically engineered for the Nasdaq (NQ/MNQ). It leverages the psychological 100-point price blocks to identify institutional exhaustion and reversal points.
Unlike standard "grid" bots, this strategy uses a sophisticated "Arm & Fire" logic: it requires a specific price "touch" to arm the setup, followed by a retracement to a "Golden" entry level to execute.
Key Logic: The 100-Point Grid
The strategy divides price action into 100-point blocks (e.g., 19500 to 19600).
Golden Setup (Long): Triggered when price touches the 50 level (mid-point). The order is placed at the 26 level on the retracement.
Silver Setup (Short): Triggered when price touches the 00 or 100 levels (block boundaries). The order is placed at the 77 or 26 levels on the retracement.
Professional Risk Management
This edition features a Dual-Contract Management system designed for Prop Firm consistency:
Contract 1 (The Scalp): Aims for a quick 24-point target (TP1) to secure realized gains and cover costs.
Contract 2 (The Runner): Stays in the trade for an extended 51-point target (TP2).
Automated Break-Even (BE): The moment TP1 is hit, the Stop Loss for the Runner is automatically moved to the entry price (plus a small offset). This ensures a "risk-free" environment for the remainder of the trade.
Independent Stop Losses: The Scalp and the Runner use different SL distances to account for Nasdaq volatility, preventing a single "noise" wick from wiping out the entire position.
Intelligent Filters
ADX Range Filter: The strategy monitors market trend strength. It only allows trades when the ADX is below a user-defined threshold (default 25), ensuring you only play mean-reversion during ranging or "choppy" markets.
MA Visual Semaphor: The 50 EMA changes color dynamically based on ADX (Lime/Green for Range, Orange/Red for Trend), giving you an instant visual "Go/No-Go" signal.
Time-Session Filtering: Optimized for three custom sessions (NY Open, Mid-Day Reversal, and Late Night). Outside these sessions, the strategy can "Arm" setups in memory but will not "Fire" orders.
How to Use
Timeframe: Optimized for 1-Minute or 2-Minute charts for precision entry.
Asset: Nasdaq 100 (NQ, MNQ) or similar high-volatility indices.
Setup: * Enable Session Filters to avoid news volatility.
Adjust TP/SL in Points (1 Point = 4 Ticks) to suit your specific risk appetite.
Watch for the "Armados" labels—these indicate the system is ready and waiting for the Golden/Silver entry.
Visual Interface
Dynamic Boxes: Real-time visual representation of your TP1, TP2, and SL levels.
Activation Labels: Clear indications of when a Long or Short setup has been "Armed" in memory.
Status Dashboard: A clean top-right table showing current ADX values, Session status, and Risk settings.
Disclaimer
Trading involves significant risk. This strategy is a tool for decision support and backtesting. Past performance does not guarantee future results. Always test on a demo account before risking live capital.
W/D/4HR OTE Aligner (V6) - Alerts This indicator is a multi-timeframe (MTF) alignment and Optimal Trade Entry (OTE) alert tool designed for discretionary manual trading on the 15-minute timeframe.
Here is a description of its core functionality:
W/D/4HR OTE Aligner (V6) - Alerts
This custom TradingView indicator assists manual traders by identifying high-probability trading setups that meet specific structural and momentum criteria across multiple timeframes. It does not place trades automatically but generates a "Trade Signal" used for setting up reliable alerts.
Key Features:
Multi-Timeframe Bias Confirmation: The indicator uses a 50-period Exponential Moving Average (EMA) to confirm that the Weekly, Daily, and 4-Hour timeframes are all aligned in the same direction (all above for bullish, all below for bearish). This provides a strong directional bias.
OTE Zone Identification: It dynamically calculates recent swing highs and lows on the 4-hour chart (using reliable pivot detection) and highlights the Optimal Trade Entry (OTE) zone, typically centered around the 0.618 Fibonacci Retracement level.
15-Minute Entry Signal: Once price enters the OTE zone within the aligned trend direction, the indicator looks for a confirmation entry signal on the 15-minute chart, specifically a 9-period EMA crossing the 20-period EMA.
Manual Alert System: A transparent "Trade Signal" plot provides the trigger source for a manual TradingView alert, notifying the user exactly when all criteria are met for a potential long or short trade entry.
This indicator is a tool for finding precise entry points within dominant, confirmed trends.
for clarity i built this using Google AI to help with being away from the charts it reflects how i wish to progress on my journey so any tips or feed back with me much appreciated
ICT OTE - Clean v6 (Indicator)ICT OTE — Indicator (Pine v6)
Comprehensive Guide & Rule-Based Trade Plan
This guide explains how to read and trade the Pine v6 indicator version of ICT’s Optimal Trade Entry (OTE). It covers chart elements, the 62–79% OTE zone (with 70.5% mid), confirmation logic, kill-zone gating, rule-based entries/stops/targets, and practical workflows.
1. Overview
The Optimal Trade Entry (OTE) is a core ICT concept that locates high-probability entries inside a Fibonacci retracement window between 62% and 79%, with 70.5% often used as a precise mid level. The indicator highlights that zone for the latest impulse (swing low to swing high for bullish, swing high to swing low for bearish), prints signal labels when price retraces into the box and a confirmation candle forms, and plots visual stop-loss and 1R/2R targets from your chosen entry line (62/70.5/79).
2. What the Indicator Draws
• OTE Box (62–79%): A green box for bullish OTE (drawn between 62% and 79% of the latest bullish impulse) and a red box for bearish OTE (drawn between 62% and 79% retracement of the latest bearish impulse).
• 70.5% Mid Line: A horizontal line through the OTE box at 70.5% (optional).
• Entry Line: Your selected entry reference: Top 62%, Mid 70.5%, or Bottom 79%.
• Signal Labels: ‘OTE Long’ appears when price touches the bullish OTE box and a confirmation candle prints; ‘OTE Short’ for the bearish side.
• Stop-Loss Guide: For longs: swing low of the dealing range; for shorts: swing high of the dealing range (visual plot).
• 1R/2R Target Lines: Two projected lines from the chosen entry to visualize 1R and 2R objectives (purely visual).
• Kill-Zone Shading (optional): Grey shading during London, NY-AM, and NY-PM windows, if gating is enabled.
3. Inputs & Settings
• Pivot Left/Right: Swing detection for impulses using pivot highs/lows (default 3/3).
• Draw OTE Box: Toggle drawing the 62–79% zone.
• Plot 70.5% Mid Line: Toggle the mid-line inside OTE.
• Entry Line: Choose the visual entry anchor (62% / 70.5% / 79%).
• Confirmation: Require a strong candle (default: close > open + continuation vs prior bar for longs; inverse for shorts).
• Stop/Targets: Toggle plotting the swing SL and 1R/2R targets.
• Kill-Zone Gating: If enabled, signals only fire in London (02:00–05:00 NY), NY-AM (08:00–11:00 NY), and NY-PM (13:00–15:00 NY).
• OTE Box Opacity: Adjust visual opacity of the box (default 85).
4. Rule-Based Entry Model
Use these steps exactly; do not skip.
1. Window: Optional — ensure you are inside an ICT kill-zone (London / NY-AM / NY-PM) if gating is enabled.
2. Impulse: Confirm the latest dealing range (pivot-based). Bullish = last swing low precedes last swing high; bearish = last swing high precedes last swing low.
3. OTE Box: Ensure price retraces into the 62–79% zone for the active impulse.
4. Confirmation: Wait for the required confirmation candle (strong or basic, per setting).
5. Entry Anchor: Use your selected line (62/70.5/79) as the reference for planning the fill.
6. Stops: Place SL at the swing extreme of the dealing range (longs: swing low; shorts: swing high).
7. Targets: Map 1R and 2R visual levels from the entry. Optionally prefer opposite liquidity or prior swing if closer (manual).
5. How to Read the Chart Step-by-Step
• Check background shading: are you inside a kill-zone (if enabled)?
• Identify the latest swing high/low markers (dealing range).
• Locate the OTE box for that impulse; confirm price retraced into the box.
• Inspect the confirmation candle: strong body and continuation (for longs: close > open AND close > prior high; for shorts: mirror).
• Use the entry line (62/70.5/79) as the reference; map SL and 1R/2R lines.
• If a signal label prints (‘OTE Long’ or ‘OTE Short’), you have alignment: timing, retracement, and confirmation.
6. Examples
Example Long (NY-AM): Price makes an impulse up (swing low then swing high). During NY-AM kill-zone, price retraces into the green OTE box. A strong bullish candle forms. Entry reference: 70.5% mid. SL at the swing low. Visual TP1/TP2 at 1R/2R.
Example Short (London): Price makes a bearish impulse (swing high then swing low). During London kill-zone, price retraces into the red OTE box. A strong bearish candle forms. Entry reference: 62%. SL at the swing high. Visual TP1/TP2 at 1R/2R.
7. Risk Management
• Fixed percent per trade: e.g., 1% risk relative to account equity (visual targets help sizing).
• One signal per kill-zone window: avoid overtrading inside the same hour.
• Respect invalidations: if a full body closes through the entire box or structure fails, stand down.
• Favor time/volatility windows for execution; avoid thin hours unless testing.
8. Common Pitfalls
• Forcing entries outside OTE: wait for a proper 62–79% retrace.
• Ignoring impulse definition: use confirmed pivots to avoid measuring from noise.
• Skipping confirmation: entries without a qualifying candle are lower quality.
• Inconsistent stops: SL belongs at the impulse extreme; avoid random micro-level stops.
• No timing discipline: kill-zone gating exists to filter low-probability periods.
9. Indicator Parameters — Quick Reference
• Pivot Left/Right: controls swing detection sensitivity (higher = stricter).
• Entry line: choose between 62%, 70.5%, and 79% for your signal anchor.
• Confirmation strength: toggle strong vs basic candle validation.
• Kill-zone gating: optional session-based signal filtering.
• Opacity/colors: cosmetic; adjust to your chart style.
10. Workflow Checklist
• Is the impulse correctly identified (pivot low/high order)?
• Is price inside the OTE box (62–79%)?
• Did the confirmation candle print?
• Is signal gating satisfied (if enabled)?
• Is SL mapped to the impulse extreme?
• Are 1R/2R levels clear from the entry?
• Any scheduled macro events in the window? (avoid surprise volatility).
11. References (ICT OTE & Kill-Zones)
• ICT Fibonacci / OTE levels: 62–79% with 70.5% mid — multiple tutorials and guides.
• ICT Kill-Zones: commonly used London / New York windows for timing entries.
King Trade 4 and 3 hour buy-sell strategy V2This strategy is a Trend-Following Breakout System specifically designed for high-volatility environments like the 4-hour and 3 hour (3h) (4H) timeframe. It focuses on identifying "Smart Money" movements by combining price action with significant volume surges.
Here is the breakdown of the strategy logic:
1. The Core Signal (Breakout)
The strategy identifies a level using the previous candle's High and Low.
Long Entry: Occurs when the current price crosses above the previous candle's high.
Short Entry: Occurs when the current price crosses below the previous candle's low.
2. The Smart Money Filter (Volume)
A price breakout without volume is often a "Bull Trap" or "Bear Trap." To minimize fake signals, this strategy calculates a Volume Moving Average (SMA 20).
It only enters a trade if the breakout candle's volume is at least 1.5x (or your chosen multiplier) higher than the average. This ensures that the move is backed by institutional or high-intensity trading.
3. The Trend Filter (EMA 200)
To stay on the right side of the market, the strategy uses the 200-period Exponential Moving Average (EMA) as a "Trend Guard":
Only Longs are allowed if the price is above the EMA 200 (Uptrend).
Only Shorts are allowed if the price is below the EMA 200 (Downtrend). This prevents you from buying into a crashing market or selling during a strong bull run.
Smart Signals [Vdubus]Smart Signals
Concept & Philosophy
Smart Signals is a "Regime-Filtered" oscillator designed to solve the biggest problem with standard indicators: Counter-trend noise.
Most oscillators (like Stochastic or RSI) are "dumb" to market context—they will signal "Sell" continuously during a strong uptrend simply because the price is high. Smart Signals fixes this by first determining the Market Regime (Bullish or Bearish) and then strictly filtering out any signal that contradicts that trend.
It creates a "Tiered" trading system that separates standard trend-following entries from high-probability "Sniper" entries (Hidden Divergence), all presented in a clean, color-blind-friendly visual interface.
Core Functions
1. The "Sheriff" (Trend Filter)
At the heart of the indicator is a heavy, modified Hull Moving Average (HMA 200) that acts as the trend baseline.
Bullish Regime: When the baseline is sloping UP, the indicator enters "Buy Only" mode. All Sell signals are mathematically deleted.
Bearish Regime: When the baseline is sloping DOWN, the indicator enters "Sell Only" mode. All Buy signals are mathematically deleted.
The Math: It uses a custom difference-weighted formula (wmaHalf = Length / 1) to create a stable, chop-resistant trend anchor.
2. Dual-Signal Engine
The indicator scans for two distinct types of entries simultaneously:
♦ Standard Signals (Blue/Red Diamonds):
Logic: A classic Stochastic pullback (Cross 20/80) aligned with the trend.
Use Case: These are frequent "Bread and Butter" trend entries. They are excellent for scaling into a position or adding to a winner as the trend continues.
Location: Plotted at the top (Sell) and bottom (Buy) edges of the panel.
+ Sniper Signals (Gold Crosses):
Logic: Hidden Divergence. The script detects when Price holds structure (Higher Low) while Momentum resets (Lower Low). This is a "Slingshot" setup.
Use Case: These are rare, high-conviction entries. They often mark the end of a complex correction and the resumption of the main trend.
Location: Plotted on the Zero Line to indicate structural strength.
3. Smart Momentum Histogram
The histogram visualizes the "Energy" of the move (MACD 21, 34, 7), but with a twist. It is color-coded to the signal priority:
Gold Bars: A Sniper (Divergence) setup is active.
Solid Blue/Red Bars: A Standard Signal is active.
Faded Blue/Red Bars: The trend is active, but momentum is resetting (waiting mode).
Gray Bars: Counter-trend noise (Ignore).
How to Trade It
Check the "Road": Look at the general color of the histogram columns.
Blue Columns: Look for Longs.
Red Columns: Look for Shorts.
The "Sniper" Entry: Wait for a Gold Cross (+) on the zero line. This is your primary signal to enter a trade with normal risk.
The "Pyramid" Entry: If the trend continues and you see Blue/Red Diamonds (♦) appear at the edges, these are safe places to add to your position.
The Exit: Since this is a trend-following tool, exit when the histogram color flips (e.g., from Blue to Red/Gray), or use your own support/resistance targets.
Alerts Configuration
The indicator comes with a full suite of alerts for automation:
Gold Buy / Gold Sell: Notifies you only for the high-probability Hidden Divergence setups.
Standard Buy / Standard Sell: Notifies you for every trend pullback.
ANY BUY / ANY SELL: A combo alert that triggers on either signal type (useful for simplifying your alert limits).
Accessibility
Color Blind Friendly: The default palette uses High-Contrast Blue (#2962FF) and Soft Red (#FF5252) instead of standard Green/Red, ensuring visibility for all users.
Zero Clutter: No text labels or confusing lines. Just clear, distinct shapes (Diamonds and Crosses) at fixed locations.
Institutional Alpha Vector | D_QUANTInstitutional Alpha Vector | D_QUANT
Overview
The Institutional Alpha Vector (IAV) is an enterprise-grade composite trend ecosystem designed to identify high-probability institutional order flow. Unlike standard indicators that rely on a single data point, the IAV synthesizes Price Action, Momentum Physics, Volatility Regimes, and Volume Flow into a single, unified Alpha Vector.
This tool is not merely a signal generator, it is a market regime filter. It visualizes the consensus of four distinct quantitative models through a sophisticated "Electric Conduit" rendering engine, allowing traders to visualize the strength, direction, and volatility of the current trend instantly.
The Quantitative Engine
The IAV constructs its signal by calculating a weighted consensus across four distinct modules. These modules work in synergy to filter out noise and highlight sustained institutional moves.
MODULE 1 :: PRICE_FILTER : A highly responsive Hull Moving Average that serves as the "Spine" of the trend, reducing lag while maintaining smoothness.
MODULE 2 :: VOLATILITY_REGIME : A dynamic envelope that adjusts to market noise. This creates the "Conduit" width—expanding during high-volatility expansion and contracting during consolidation.
MODULE 3 :: MOMENTUM_PHYSICS : A directional movement filter that ensures signals are only generated when trend strength exceeds a specific threshold (default: 20).
MODULE 4 :: INSTITUTIONAL_FLOW : A volume-weighted money flow engine that confirms if price movement is supported by actual volume (Smart Money participation).
The Alpha Vector
The core of this system is the Alpha Vector calculation. The indicator normalizes the outputs of all active modules into a composite score between -1.0 (Strong Bearish Consensus) and +1.0 (Strong Bullish Consensus).
Bullish Entry: When the Alpha Vector crosses above the Long Threshold (Default: 0.1).
Bearish Entry: When the Alpha Vector crosses below the Short Threshold (Default: -0.1).
Neutral/Cash: When the consensus is weak or conflicting, the ribbon turns Grey/Flat, advising the trader to remain on the sidelines.
// ==========================================
// 3. SIGNAL AGGREGATION
// ==========================================
calc_composite_matrix() =>
_hma = calc_hma_series(hma_src, hma_len)
_hma_sig_v = 0
if ta.crossover(close, _hma)
_hma_sig_v := 1
else if ta.crossunder(close, _hma)
_hma_sig_v := -1
_adx_sig_v = calc_adx_state(adx_len, adx_thresh)
_cmf_sig_v = calc_cmf_state(cmf_len)
_rma_sig_v = calc_rma_filter_state(hma_src, lookback, atr_len)
var int s_hma = 0
var int s_adx = 0
var int s_cmf = 0
var int s_rma = 0
if _hma_sig_v != 0
s_hma := _hma_sig_v
if _adx_sig_v != 0
s_adx := _adx_sig_v
if _cmf_sig_v != 0
s_cmf := _cmf_sig_v
if _rma_sig_v != 0
s_rma := _rma_sig_v
= request.security(syminfo.ticker, "D", calc_composite_matrix(), lookahead=barmerge.lookahead_on)
float alpha_score_num = 0.0
int alpha_score_den = 0
if use_hma
alpha_score_num += d_hma
alpha_score_den += 1
if use_adx
alpha_score_num += d_adx
alpha_score_den += 1
if use_cmf
alpha_score_num += d_cmf
alpha_score_den += 1
if use_rma
alpha_score_num += d_rma
alpha_score_den += 1
alpha_vector = alpha_score_den > 0 ? alpha_score_num / alpha_score_den : 0.0
Visual Intelligence: The "Electric Conduit"
The visualization logic uses a Differential Gradient Model to represent market energy:
The Spine (Core): The solid, bright center line represents the immediate trend direction.
The Conduit (Fill): The gradient fill represents the Volatility Regime.
Thick/Wide Ribbon: High Volatility (Expansion Phase).
Thin/Tight Ribbon: Low Volatility (Contraction/Squeeze Phase).
Bar Coloring: Native bar coloring is integrated to instantly align price action with the Alpha Vector, removing the need for mental processing.
Settings
The indicator is fully customizable via a "Compute-Style" configuration menu:
MODULES: Toggle specific engines (HMA, ADX, CMF, RMA) on or off to adapt the Alpha Vector to your specific asset class (Crypto, Forex, or Indices).
THRESHOLDS: Adjust sensitivity for Long/Short entries.
VISUALS: Customize the "Core" and "Edge" colors to match your charting theme.
“Alpha is not about predicting the future. It is about aligning with the mathematical consensus of the present.” — D_QUANT
Advanced Footprint Analysis1. ABSORPTION = BEST ENTRY SIGNALS
When BTC hits support and shows bullish absorption:
You know big money is buying
Price won't fall further (supply absorbed)
Risk/reward is optimal (tight stop below absorption)
Win rate on these setups is 70-80%
2. EXHAUSTION = REVERSAL TIMING
Catches exact moment selling/buying pressure is exhausted
No more guessing "is the dip over?"
Volume confirms the reversal
3. IMBALANCES = CONTINUATION TRADES
Stacked imbalances show trend strength
Enter pullbacks in strong trends
Avoid counter-trend trades when imbalance is strong
4. DELTA DIVERGENCE = EARLY WARNING
Cumulative delta rising but price flat = accumulation (buy setup)
Cumulative delta falling but price rising = distribution (sell setup)
This divergence appears BEFORE price moves
5. FILTERS OUT NOISE
Crypto has tons of fake volume and wash trading
By requiring volume to be significantly above average (2x, 3x), you ignore the noise
Only trade when institutions are active
6. WORKS ON ALL CRYPTO PAIRS
BTC, ETH, SOL - same patterns
Especially powerful on perpetual futures (more volume data)
PRACTICAL 5M CRYPTO ALGO STRATEGY:
LONG ENTRY:
Wait for bullish absorption OR bullish exhaustion
Confirm with positive stacked imbalances (3 bars)
Enter when price breaks above absorption high
Stop below absorption low
Target: 2-3x risk or next resistance
SHORT ENTRY:
Wait for bearish absorption OR bearish exhaustion
Confirm with negative stacked imbalances
Enter when price breaks below absorption low
Stop above absorption high
Target: 2-3x risk or next support
FILTER:
Only trade in direction of cumulative delta trend
Avoid when volume is below average (no institutional activity)
Commodity Channel Index CCI + EMA strategy
================================================================================
COMMODITY CHANNEL INDEX CCI + EMA STRATEGY - STRATEGY GUIDE 📊
================================================================================
💡 COLLABORATION & SUPPORT
---------------------------
If you want to collaborate, have an idea for a strategy, or need help writing
or customizing code, send an email to burdytrader@gmail.com or send me a
message. Suggestions, ideas, and comments are always welcome! 🤝
I also develop automated trading codes for other trading platforms including:
- CTrader (C#)
- MetaTrader 4 (MQL4)
- MetaTrader 5 (MQL5)
If you need a strategy converted or developed for any of these platforms, feel
free to contact me!
================================================================================
⚠️ IMPORTANT: INSTRUMENT SELECTION 📈
-------------------------------------
This strategy performs BEST with currency pairs (forex). The CCI indicator
works particularly well in the forex market due to the nature of currency
movements and the effectiveness of the CCI in identifying overbought and
oversold conditions in trending markets.
Why Currency Pairs? 🎯
- CCI is highly effective in identifying reversals in forex markets
- Currency pairs show clear overbought/oversold patterns
- EMA filter (50/200) aligns well with major forex trends
- High liquidity ensures reliable signal execution
Performance Highlights:
In specific currency pairs, when properly configured, this strategy can achieve:
- Profit Factor: Over 2.0
- Win Rate: Up to 70%
- Particularly effective pairs: USDCAD, EURUSD, GBPJPY
While the strategy can work with other instruments (stocks, indices, commodities),
currency pairs provide the most consistent and reliable results. For optimal
performance, focus on major forex pairs with good liquidity and clear trending
characteristics.
================================================================================
WHAT DOES THIS STRATEGY DO? 🎯
---------------------------
This strategy combines the Commodity Channel Index (CCI) with Exponential
Moving Averages (EMA) to identify high-probability trading opportunities.
The strategy uses CCI crossovers with a smoothing moving average and filters
signals using EMA trend confirmation. The strategy automatically enters trades
when CCI crosses the smoothing MA in specific zones, indicating potential trend
reversals or continuations.
HOW IT WORKS? ⚙️
---------------
1. CCI CALCULATION 📈
The strategy calculates the Commodity Channel Index using:
- CCI = (Price - SMA(Price, length)) / (0.015 × Deviation(Price, length))
- Default length: 20 periods
- Source: HLC3 (typical price)
The CCI shows:
- Values above +100 = Overbought conditions
- Values below -100 = Oversold conditions
- Values around 0 = Neutral conditions
2. SMOOTHING MOVING AVERAGE 📊
A moving average is applied to the CCI to smooth out fluctuations:
- Types available: SMA, EMA, SMMA (RMA), WMA, VWMA
- Default: SMA with length 14
- Can be disabled (set to "None")
This smoothed line acts as a reference for crossover signals.
3. EMA TREND FILTER 🎯
Two EMAs are calculated on the CCI:
- EMA 50 (fast EMA)
- EMA 200 (slow EMA)
When the EMA filter is enabled:
- LONG signals only occur when EMA50 > EMA200 (uptrend confirmation)
- SHORT signals only occur when EMA50 < EMA200 (downtrend confirmation)
This filter can be enabled/disabled via the "Use EMA Filter" option.
4. ENTRY CONDITIONS 🎲
LONG ENTRY (Buy Signal):
- CCI crosses ABOVE the Smoothing MA (crossover)
- CCI is between Lower Level (-100) and Middle Level (0)
- EMA Filter: EMA50 > EMA200 (if filter enabled)
- No existing positions (or close opposite positions first)
SHORT ENTRY (Sell Signal):
- CCI crosses BELOW the Smoothing MA (crossunder)
- CCI is between Middle Level (0) and Upper Level (+100)
- EMA Filter: EMA50 < EMA200 (if filter enabled)
- No existing positions (or close opposite positions first)
5. POSITION MANAGEMENT 💰
The strategy uses a simple position management approach:
- Only ONE position at a time (no pyramiding)
- If a signal occurs in the opposite direction, closes existing position first
- Then opens new position in the new direction
- This prevents overexposure and simplifies risk management
6. TAKE PROFIT & STOP LOSS SETTINGS 🎯
The strategy uses percentage-based TP/SL:
- Take Profit: 1.0% (default, configurable)
- Stop Loss: 0.5% (default, configurable)
- Risk/Reward Ratio: 2:1 (TP is double the SL)
TP/SL are calculated once when the position opens and remain fixed.
AVAILABLE PARAMETERS ⚙️
-----------------------
CCI SETTINGS:
1. CCI Length (Default: 20)
- Period for CCI calculation
- Lower values = More sensitive to recent price action
- Higher values = More smoothed, less sensitive
2. CCI Source (Default: HLC3)
- Price source for CCI calculation
- Options: close, open, high, low, hlc3, hlcc4, ohlc4
3. CCI Lower Level (Default: -100)
- Lower boundary for LONG entry zone
- Typically -100 for oversold conditions
4. CCI Middle Level (Default: 0)
- Neutral level separating LONG and SHORT zones
5. CCI Upper Level (Default: +100)
- Upper boundary for SHORT entry zone
- Typically +100 for overbought conditions
SMOOTHING MA:
6. Type (Default: SMA)
- Moving average type: None, SMA, EMA, SMMA (RMA), WMA, VWMA
- Set to "None" to disable smoothing
7. Length (Default: 14)
- Period for smoothing MA
- Range: 7-28, step 7
EMA FILTER:
8. EMA 1 Length (Default: 50)
- Fast EMA period applied to CCI
9. EMA 2 Length (Default: 200)
- Slow EMA period applied to CCI
10. Use EMA Filter (Default: true)
- Enable/disable EMA trend filter
- When enabled: LONG only if EMA50 > EMA200, SHORT only if EMA50 < EMA200
RISK MANAGEMENT:
11. Take Profit (%) (Default: 1.0%)
- Profit target as percentage of entry price
- For LONG: Entry × (1 + TP%)
- For SHORT: Entry × (1 - TP%)
12. Stop Loss (%) (Default: 0.5%)
- Stop loss as percentage of entry price
- For LONG: Entry × (1 - SL%)
- For SHORT: Entry × (1 + SL%)
VISUALIZATION 📊
---------------
The strategy displays in a separate panel below the price chart:
1. CCI LINE
- Blue line showing the CCI value
- Oscillates around zero
2. SMOOTHING MA LINE
- Yellow line showing the smoothed CCI
- Reference line for crossover signals
3. CCI LEVEL LINES
- Red dashed line: Upper Level (+100)
- Green dashed line: Lower Level (-100)
- Yellow dashed line: Middle Level (0)
4. ENTRY SIGNALS
- Green cross: LONG entry signal (when CCI crosses above MA)
- Red cross: SHORT entry signal (when CCI crosses below MA)
RECOMMENDED SETTINGS 🎯
-----------------------
To get started, you can use these settings:
CCI SETTINGS:
- CCI Length: 20 (default)
- CCI Source: HLC3 (default)
- CCI Lower Level: -100 (default)
- CCI Middle Level: 0 (default)
- CCI Upper Level: +100 (default)
SMOOTHING MA:
- Type: SMA (default) or EMA for faster response
- Length: 14 (default)
EMA FILTER:
- EMA 1 Length: 50 (default)
- EMA 2 Length: 200 (default)
- Use EMA Filter: true (recommended for better signal quality)
RISK MANAGEMENT:
- Take Profit (%): 1.0% (adjust based on your risk/reward preference)
- Stop Loss (%): 0.5% (adjust based on your risk tolerance)
For more aggressive trading:
- Reduce CCI Length to 14-16
- Reduce Smoothing MA Length to 7
- Disable EMA Filter
For more conservative trading:
- Increase CCI Length to 24-30
- Increase Smoothing MA Length to 21-28
- Keep EMA Filter enabled
RECOMMENDED CURRENCY PAIRS 💱
------------------------------
This strategy is optimized for currency pairs and performs exceptionally well
on the following pairs when properly configured:
TOP PERFORMING PAIRS:
- USDCAD: Can achieve Profit Factor > 2.0 and Win Rate up to 70%
- EURUSD: Excellent performance with consistent signals
- GBPJPY: Strong results with proper EMA filter configuration
These pairs have shown the best historical performance due to:
- Clear trending characteristics
- Good response to CCI overbought/oversold levels
- Strong alignment with EMA 50/200 trend filter
- High liquidity ensuring reliable execution
When trading these pairs, use the default settings or slightly adjusted
parameters based on the pair's volatility. Always backtest on historical
data before using real money to find the optimal configuration for each
specific pair.
PRACTICAL EXAMPLE 📝
--------------------
Scenario: LONG Entry on EUR/USD
1. Market conditions:
- Price: 1.1000
- CCI: -80 (in oversold zone)
- Smoothing MA: -90
- CCI crosses above Smoothing MA (crossover occurs)
- EMA50: -50, EMA200: -70 (EMA50 > EMA200, uptrend confirmed)
2. Strategy checks conditions:
✓ Smoothing MA enabled: Yes
✓ Crossover: Yes (CCI crosses above MA)
✓ CCI in range: Yes (-100 <= -80 <= 0)
✓ EMA Filter: Yes (EMA50 > EMA200)
✓ No existing position: Yes
3. Strategy opens position:
- Direction: LONG (Buy)
- Entry: 1.1000 (current close)
- Take Profit: 1.1110 (1.0% above entry)
- Stop Loss: 1.0945 (0.5% below entry)
- Risk/Reward: 2:1
4. Outcome scenarios:
- If price rises to 1.1110 → Take Profit hit (profit)
- If price falls to 1.0945 → Stop Loss hit (loss limited)
IMPORTANT NOTE ⚠️
-----------------
This strategy is a technical analysis tool based on CCI and EMA indicators.
Like all trading strategies, it does NOT guarantee profits. Trading involves
significant risks and you can lose money, including your entire investment.
Past performance does not guarantee future results.
Always:
- Use appropriate risk management
- Never risk more than you can afford to lose
- Test the strategy on historical data (backtesting) before using real money
- Start with small position sizes or paper trading
- Understand that no strategy works 100% of the time
- Consider market conditions, news events, and other factors
- Keep a trading journal to learn and improve
The author and contributors are NOT responsible for any losses incurred from
using this strategy. Trading decisions are your own responsibility. Profits
are NOT guaranteed, and losses are possible.
LICENSE 📄
----------
This code is open source and available for modification. You are free to use,
modify, and distribute this strategy. If you republish or share a modified
version, please kindly mention the original author.
================================================================================
HMA 9/50 Crossover + RSI 50 Filter1. The Core Indicators
HMA 9 (Fast): Acts as the primary trigger line. Its unique calculation minimizes lag compared to standard moving averages, allowing for faster entries.
HMA 50 (Slow): Defines the medium-term trend direction and acts as the "anchor" for crossover signals.
RSI 14: Serves as a "momentum gate." Instead of traditional overbought/oversold levels, we use the 50 midline to confirm that the directional strength supports the crossover.
2. Entry Conditions
Long Entry: Triggered when the HMA 9 crosses above the HMA 50 AND the RSI is greater than 50.
Short Entry: Triggered when the HMA 9 crosses below the HMA 50 AND the RSI is less than 50.
3. Execution & Reversal
This strategy is currently configured as an Always-in-the-Market system.
A "Long" position is automatically closed when a "Short" signal is triggered.
To prevent "pyramiding" (buying multiple positions in one direction), the script checks the current position_size before opening new entries.
How to Use
Timeframe: Optimized for 3-minute (3m) candles but can be tuned for 1m to 15m scalping.
Settings: Use the Inputs panel to adjust HMA lengths based on the volatility of your specific asset (e.g., shorter for stable stocks, longer for volatile crypto).
Visuals:
Aqua Line: HMA 9
Orange Line: HMA 50
Green Background: Bullish RSI Momentum (> 50)
Red Background: Bearish RSI Momentum (< 50)
Risk Disclosure
Whipsaws: This strategy is likely to underperform in sideways markets.
Backtesting: Past performance does not guarantee future results. Always test this strategy in the Strategy Tester with appropriate commission and slippage settings before live use.
PA SystemPA System
短简介 Short Description(放在最上面)
中文:
PA System 是一套以 AL Brooks 价格行为为核心的策略(Strategy),将 结构(HH/HL/LH/LL)→ 回调(H1/L1)→ 二次入场(H2/L2 微平台突破) 串成完整可回测流程,并可选叠加 BoS/CHoCH 结构突破过滤 与 Liquidity Sweep(扫流动性)确认。内置风险管理:定风险仓位、部分止盈、保本、移动止损、时间止损、冷却期。
English:
PA System is an AL Brooks–inspired Price Action strategy that chains Market Structure (HH/HL/LH/LL) → Pullback (H1/L1) → Second Entry (H2/L2 via Micro Range Breakout) into a complete backtestable workflow, with optional BoS/CHoCH structure-break filtering and Liquidity Sweep confirmation. Built-in risk management includes risk-based sizing, partial exits, breakeven, trailing stops, time stop, and cooldown.
⸻
1) 核心理念 Core Idea
中文:
这不是“指标堆叠”,而是一条清晰的价格行为决策链:
结构确认 → 回调出现 → 小平台突破(二次入场)→ 风控出场。
策略把 Brooks 常见的“二次入场”思路程序化,同时用可选的结构突破与扫流动性模块提升信号质量、减少震荡误入。
English:
This is not an “indicator soup.” It’s a clear price-action decision chain:
Confirmed structure → Pullback → Micro-range breakout (second entry) → Risk-managed exits.
The system programmatically implements the Brooks-style “second entry” concept, and optionally adds structure-break and liquidity-sweep context to reduce chop and improve trade quality.
⸻
2) 主要模块 Main Modules
A. 结构识别 Market Structure (HH/HL/LH/LL)
中文:
使用 pivot 摆动点确认结构,标记 HH/HL/LH/LL,并可显示最近一组摆动水平线,方便对照结构位置。
English:
Uses confirmed pivot swings to label HH/HL/LH/LL and optionally plots the most recent swing levels for clean structure context.
B. 状态机 Market Regime (State Machine + “Always In”)
中文:
基于趋势K强度、EMA关系与波动范围,识别市场环境(Breakout/Channel/Range)以及 Always-In 方向,用于过滤不合适的交易环境。
English:
A lightweight regime engine detects Breakout/Channel/Range and an “Always In” directional bias using momentum and EMA/range context to avoid low-quality conditions.
C. 二次入场 Second Entry Engine (H1→H2 / L1→L2)
中文:
• H1/L1:回调到结构附近并出现反转迹象
• H2/L2:在 H1/L1 后等待最小 bars,然后触发 Micro Range Breakout(小平台突破)并要求信号K收盘强度达标
这一段是策略的“主发动机”。
English:
• H1/L1: Pullback into structure with reversal intent
• H2/L2: After a minimum wait, triggers on Micro Range Breakout plus a configurable close-strength filter
This is the main “entry engine.”
D. 可选过滤器 Optional Filters (Quality Boost)
BoS/CHoCH(结构突破过滤)
中文: 可识别 BoS / CHoCH,并可要求“入场前最近 N bars 必须有同向 break”。
English: Detects BoS/CHoCH and can require a recent same-direction break within N bars.
Liquidity Sweeps(扫流动性确认)
中文: 画出 pivot 高/低的流动性水平线,检测“刺破后收回”的 sweep,并可要求入场前出现同向 sweep。
English: Tracks pivot-based liquidity levels, confirms sweeps (pierce-and-reclaim), and can require a recent sweep before entry.
E. FVG 可视化 FVG Visualization
中文: 提供 FVG 区域盒子与管理模式(仅保留未回补 / 仅保留最近N),主要用于区域理解与复盘,不作为强制入场条件(可自行扩展)。
English: Displays FVG boxes with retention modes (unfilled-only or last-N). Primarily for context/analysis; not required for entries (you can extend it as a filter/target).
⸻
3) 风险管理 Risk Management (Built-In)
中文:
• 定风险仓位:按账户权益百分比计算仓位
• SL/TP:基于结构 + ATR 缓冲,且限制最大止损 ATR 倍
• 部分止盈:到达指定 R 后减仓
• 保本:到达指定 R 后推到 BE
• 移动止损:到达指定 R 后开始跟随
• 时间止损:持仓太久不动则退出
• 冷却期:出场后等待 N bars 再允许新单
English:
• Risk-based sizing: position size from equity risk %
• SL/TP: structure + ATR buffer with max ATR risk cap
• Partial exits at an R threshold
• Breakeven at an R threshold
• Trailing stop activation at an R threshold
• Time stop to reduce chop damage
• Cooldown after exit to avoid rapid re-entries
⸻
4) 推荐使用方式 Recommended Usage
中文:
• 推荐从 5m / 15m / 1H 开始测试
• 想更稳:开启 EMA Filter + Break Filter + Sweep Filter,并提高 Close Strength
• 想更多信号:关闭 Break/Sweep 过滤或降低 Swing Length / Close Strength
• 回测时务必设置合理的手续费与滑点,尤其是期货/指数
English:
• Start testing on 5m / 15m / 1H
• For higher quality: enable EMA Filter + Break Filter + Sweep Filter and increase Close Strength
• For more signals: disable Break/Sweep filters or reduce Swing Length / Close Strength
• Use realistic commissions/slippage in backtests (especially for futures/indices)
⸻
5) 重要说明 Notes
中文:
结构 pivot 需要右侧确认 bars,因此结构点存在天然滞后(确认后不会再变)。策略逻辑尽量避免不必要的对象堆叠,并对数组/对象做了稳定管理,适合长期运行与复盘。
English:
Pivot-based structure requires right-side confirmation (inherent lag; once confirmed it won’t change). The script is designed for stability and resource-safe object management, suitable for long sessions and review.
⸻
免责声明 Disclaimer(建议原样保留)
中文:
本脚本仅用于教育与研究目的,不构成任何投资建议。策略回测结果受市场条件、手续费、滑点、交易时段、数据质量等影响显著。使用者需自行验证并承担全部风险。过往表现不代表未来结果。
English:
This script is for educational and research purposes only and does not constitute financial advice. Backtest results are highly sensitive to market conditions, fees, slippage, session settings, and data quality. Use at your own risk. Past performance is not indicative of future results.






















