SmartWave ProA SmartWave Pro egy prémium kereskedési indikátor, amely a legfejlettebb piaci elemzési módszereket ötvözi egyetlen rendszerben. A jelzéseket a Smart Money Concepts (SMC), ICT (Inner Circle Trader), Pivot zónák, Elliott-hullám elmélet, Engulfing gyertyák, valamint a belső trend- és volatilitásszűrés kombinációja adja.
Göstergeler ve stratejiler
BarCounter_Q主要是用来计算日内5分钟级别的k线数量
"Primarily used to calculate the number of intraday 5-minute candlestick charts."
Fair Value Gap with Swing PointsFair Value Gaps occur when there's a significant price difference between the close of one period and the opening of the next, signaling market inefficiencies. Bullish gaps indicate potential upward momentum, while bearish gaps suggest potential downward pressure.
Consensus Signal Matrix Pro [By TraderMan] Consensus Signal Matrix Pro 🌟
What Does It Do? 📊
Consensus Signal Matrix Pro is a comprehensive technical analysis indicator designed for financial markets. 🧠 It aggregates signals from over 30 popular technical indicators (e.g., EMA, RSI, MACD, Bollinger Bands, Supertrend, Ichimoku, etc.) to provide a unified BUY, SELL, or NEUTRAL recommendation. 💡 This tool helps traders make informed decisions by consolidating signals and presenting them in a clear table format. 📈 It is particularly suited for leveraged trading (without built-in TP/SL). 🚀
How Does It Work? 🔍
Multi-Indicator Analysis 🛠️:
The indicator calculates signals from 30 different technical indicators (e.g., EMA 9/21, RSI, MACD, Supertrend, Ichimoku, Williams %R, etc.).
Each indicator generates a BUY, SELL, or NEUTRAL signal based on price action and volume data.
For example: RSI < 30 triggers a "BUY" signal, while RSI > 70 triggers a "SELL" signal. 🔔
Signal Aggregation and Consensus 🤝:
All indicator signals are collected into an array.
The number of BUY, SELL, and NEUTRAL signals is counted.
A percentage difference (percentDiff) is calculated by dividing the difference between BUY and SELL signals by the total number of indicators.
Based on this difference:
>20%: General status is GENERAL BUY. ✅
<-20%: General status is GENERAL SELL. ❎
In between: General status is NEUTRAL. ⚖️
Position Recommendation 💸:
The position type is determined based on the general status:
GENERAL BUY → LONG position recommended. 📈
GENERAL SELL → SHORT position recommended. 📉
NEUTRAL → No position (NONE). 🚫
Table Visualization 📋:
The indicator displays all signals and the general status in a table located in the top-right corner of the TradingView chart. 🎨
The table lists each indicator’s name, its signal (BUY/SELL/NEUTRAL), total indicator count, BUY/SELL/NEUTRAL counts, general status, and position type. 🖼️
Color coding is used: Green (BUY), Red (SELL), Gray (NEUTRAL), Orange (headers). 🌈
How to Use It? 🛠️
Setup ⚙️:
Copy and paste the indicator code into the Pine Editor on TradingView and compile it. 🖥️
Add it to your chart (works on any timeframe, though it uses D1 data for daily ATR). ⏰
Review the Table 📖:
Check the table displayed in the top-right corner of the chart.
Review each indicator’s signal (BUY/SELL/NEUTRAL) and the overall signal distribution.
Focus on the GENERAL STATUS and POSITION TYPE rows. 🔎
Position Opening Decision 💰:
LONG Position: If GENERAL STATUS is "GENERAL BUY" and the table shows mostly green (BUY) signals, consider opening a LONG position. 📈
SHORT Position: If GENERAL STATUS is "GENERAL SELL" and the table shows mostly red (SELL) signals, consider opening a SHORT position. 📉
NEUTRAL Status: If the status is "NEUTRAL," avoid opening a position. ⚖️
Risk Management ⚠️:
The indicator does not include Take Profit (TP) or Stop Loss (SL) levels. You must apply your own risk management strategy.
Recommended: Use ATR-based volatility (shown in the table as ATR signal) or support/resistance levels to set manual TP/SL. 🛡️
Timeframe and Asset ⏳:
Can be used on any financial asset (stocks, forex, crypto, etc.).
Works on short-term (1H, 4H) or long-term (D1, W1) charts. Evaluate signal speed based on your timeframe. 📅
How to Open Positions? 🎯
Trust the General Status: Use GENERAL STATUS (GENERAL BUY or GENERAL SELL) as the primary guide. A strong percentage difference (>20% or <-20%) indicates a more reliable signal. ✅
Check Signal Strength: Look at the table to assess the number of BUY or SELL signals. For example, if 20 out of 30 indicators signal BUY, it’s a strong LONG signal. 💪
Align with Market Conditions: Before acting, analyze the broader market trend (bullish, bearish, or sideways). For instance, SELL signals may be less reliable in a strong bull market. 📡
Combine with Other Analyses: Use the indicator alongside support/resistance levels, news flow, or fundamental analysis for confirmation. 🧩
Caution: The indicator is designed for leveraged trading but lacks TP/SL. Manage volatility and risk tolerance carefully. ⚠️
Advantages and Considerations 🌟
Advantages 😊:
Simplifies analysis by combining multiple indicators into one table.
Provides a quick overview of market direction.
User-friendly for both beginners and experienced traders.
Considerations ⚠️:
No signal is 100% accurate; markets can be unpredictable.
You must develop your own risk management strategy.
Signals may be misleading during high volatility; use additional confirmation.
Final Note 🎉:
Consensus Signal Matrix Pro is a powerful tool for traders seeking a consolidated view of multiple technical signals. 🚀 By combining diverse indicators into a single, easy-to-read table, it streamlines decision-making. However, always combine it with sound risk management and market context for the best results. 💸 Happy trading! 🤑
Mutant Cycle - Volatility DriverMutant Cycle – Volatility Driver
The Mutant Cycle Volatility Driver is a custom market analysis tool designed to map out key volatility levels for the trading week using a Fibonacci-based logic. By applying a cyclical approach, it highlights potential zones where significant price reactions may occur, helping traders anticipate market rhythm and volatility spikes.
While the indicator already provides accurate weekly volatility zones, the detection of strong swing highs and lows is still under refinement. In its current form, it works best as a volatility map and context filter — guiding entries, exits, and risk management in alignment with the week’s expected market dynamics.
BTC Trading Sessions - IndiaA simple script that shows the various BTC sessions in IST.
if you are using a different timezone or in a different country, this may not work.
SRT Indicatorthis indicator simply plots the value of SRT below the chart. it is current spot price of nifty divided by its 124 daily SMA. typically one invests when srt is 0.7 to 0.9 and exits when it crosses 1.25. this can be adjusted according to our risk appetite.
Supply & Demand & Backtest (M5-H4)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © RoseZero
//@version=6
indicator('Vung Cung va Cau (M5-H4)', overlay = true)
//===Input===
length1 = input.int(5, 'Swing Loockback', minval = 1)
lengthM5 = input.int(10, title = 'Lookback (M5-M30)')
LengthH1 = input.int(20, title = 'Lookback (H1-H4)')
volMultiplier = input.float(1.5, title = 'Volume Threshold')
zoneHeight = input.float(0.4, title = 'Zone Height (%)')
rsiPeriod = input.int(14, title = 'RSI Period')
rsiOB = input.int(70, title = 'RSI Overbought')
rsiOS = input.int(30, title = 'RSI Oversold')
zoneDuration = input.int(20, title = 'ZOne Duration (bars)')
showEngulfing = input.bool(true, 'Highlight Engulfing Candles')
//boxLookback = input.int(10, title = 'Khoang cach toi da giua 2 liquidity Grab')
//===Auto-adjust by timeframe===
isLowerTF = timeframe.isminutes and timeframe.multiplier <= 30
length = isLowerTF ? lengthM5 : LengthH1
//===Calculation==
avgVol = ta.sma(volume, length)
rsi = ta.rsi(close, rsiPeriod)
highVol = volume > avgVol * volMultiplier
//===Supply Zone Conditions===
isSwingHigh = high == ta.highest(high, length)
bearish = close < open
supplyCond = highVol and isSwingHigh and bearish and rsi > rsiOB
//===Demand Zone Condition===
isSwingLow = low == ta.lowest(low, length)
bullish = close > open
demandCond = highVol and isSwingLow and bullish and rsi < rsiOS
//===Strength Classification===
zoneStrength = volume / avgVol
supplyColor = zoneStrength > 2 ? color.red : color.new(color.red, 60)
demandColor = zoneStrength > 2 ? color.green : color.new(color.green, 60)
supplyLabel = zoneStrength > 2 ? 'Supply(Strong)' : 'Supply(Week)'
demandLabel = zoneStrength > 2 ? 'Demand(Strong)' : 'Demand(Week)'
//===Draw Zone===
if supplyCond
box.new(left = bar_index, right = bar_index + zoneDuration, top = high, bottom = high * (1 - zoneHeight / 100), bgcolor = color.new(supplyColor, 80), border_color = supplyColor, text = supplyLabel, text_color = color.white)
alert('Vung cung moi xuat hien', alert.freq_once_per_bar_close)
if demandCond
box.new(left = bar_index, right = bar_index + zoneDuration, top = low * (1 + zoneHeight / 100), bottom = low, bgcolor = color.new(demandColor, 80), border_color = demandColor, text = demandLabel, text_color = color.white)
alert('Vung cau moi xuat hien', alert.freq_once_per_bar_close)
//===Alert=== alertc
alertcondition(supplyCond, title = 'New Supply Zone', message = 'Vung Cung moi xuat hien!')
alertcondition(demandCond, title = 'New Demand Zone', message = 'Vung Cau moi xuat hien!')
//============================================================================================
//===Khung thoi gian su ly===
timeframe = input.timeframe('30', 'Khung phan tich(vd:\'30\', \'60\')')
//===So nen truoc de do vung OB===
lookback = input.int(10, 'so nen truoc de do oder block')
//===Lay du lieu tu khung thoi gian lon hon===
= request.security(syminfo.tickerid, timeframe, [high , low , open , close ])
src = input.source(close, 'Nguon gia')
//===Logic phat hien OB ===
isBearishOB = closeHTF < openHTF
isBullishOB = closeHTF > openHTF
//===Vung OB===
obHigh = isBearishOB ? highHTF : na
obLow = isBullishOB ? lowHTF : na
//===Canh bao===
touchOB = close >= obLow and close <= obHigh
alertcondition(touchOB, title = 'Cham vung OB', message = 'Gia dang cham vung Smart Money Order Block!')
plotshape(touchOB, location = location.belowbar, color = color.orange, style = shape.triangleup, size = size.small)
if touchOB
alert('Cham vung OB: Gia dang cham vung Smart Money Order Block!', alert.freq_once_per_bar_close)
//===Vung thanh khoan===(Liquidity Sweep Zones)
swingHigh = ta.highest(high, length1)
swingLow = ta.lowest(low, length1)
liquidityHigh = high > swingHigh
liquidityLow = low < swingLow
//==========================================================================================
//===Volume filter===
avgVol2 = ta.sma(volume, 20)
highVol2 = volume > avgVol2 * volMultiplier
//===Candle Pattern===
bullishEngulfing = close > open and close < open and close > open and open < close
bearishEngulfing = close < open and close > open and close < open and open > close
isPinBarBull = close > open and (open - low) > 2 * (close - open)
isPinBarBear = close < open and (high - open) > 2 * (open - close)
isHammer = (high - low) > 3 * (open - close) and (close - low) / (high - low) > 0.6
isHangingMan = (high - low) > 3 * (open - close) and (high - open) / (high - low) > 0.6
isBullMarubozu = close > open and (high - close) < 0.1 * (high -low) and (open -low) < 0.1 * (high - low)
isBearMarubozu = close < open and (high - open) < 0.1 * (high - low) and (close -low) < 0.1 * (high -low)
//===Bien luu vung Cung / Cau da bi pha===
var float lastSupplyTop = na
var float lastSupplyBottom = na
var bool supplyBroken = false
var float lastDemandTop = na
var float lastDemandBottom = na
var bool demandBroken = false
//===Cap nhat vung moi khi co Cung/Cau moi ===
if supplyCond
lastSupplyTop := high
lastSupplyBottom := high * (1 - zoneHeight / 100)
supplyBroken := false
if demandCond
lastDemandBottom := low
lastDemandTop := low * (1 + zoneHeight / 100)
//===Kiem tra pha vo vung Cung/Cau===
if not supplyBroken and close > lastSupplyTop
supplyBroken := true
if not demandBroken and close < lastDemandBottom
demandBroken := true
//===Kiem tra backtest vung da bi pha===
backtestSupply = supplyBroken and close <= lastSupplyTop and close >= lastSupplyBottom
backtestDemand = demandBroken and close >= lastDemandBottom and close <= lastDemandTop
//===Kiem tra thung vung backtest (gia vuot qua vung luon)===
failBacktestSupply = supplyBroken and close < lastSupplyBottom
failBacktestDemand = demandBroken and close > lastDemandTop
//Hien thi canh bao tren bieu do===
plotshape(backtestSupply, title = 'Backtest Supply', location = location.abovebar, color = color.new(color.red, 50), style = shape.circle, size = size.small)
plotshape(backtestDemand, title = 'Backtest Demand', location = location.belowbar, color = color.new(color.green, 60), style = shape.circle, size = size.small)
volStrong = volume > ta.sma(volume, 20) * volMultiplier
validBull = bullishEngulfing and isPinBarBull and isHammer and isBullMarubozu and volStrong and demandCond
validBear = bearishEngulfing and isPinBarBear and isHangingMan and isBearMarubozu and volStrong and supplyCond
if validBull
alert("Tin hieu Buy: Mo hinh nen dao chieu tang + RSI + Volume lon", alert.freq_once_per_bar_close)
if validBear
alert("Tin hieu Sell: Mo hinh nen dao chieu giam + RSI + Volume lon", alert.freq_once_per_bar_close)
//plot(close)
//===============================================================================================
📱 Mobile EMA + V2L5 (edegrano)User Manual: Mobile EMA + V2 (edegrano)
Overview
This TradingView indicator combines EMA bias analysis and multi-timeframe linear regression trendlines with key crossover signals, displayed both on the chart and summarized in a colour-coded table for quick decision-making on mobile devices or desktops.
Inputs
Input Name Description Default
Custom EMA Timeframe Timeframe used to calculate EMA 50, 100, 200 "1" (1m)
Show EMAs on Chart Toggle to plot EMAs (50-blue, 100-black, 200-red) true
Linear Regression Length Period length for linear regression trendlines 20
Show EMA 50 > EMA 200 Bias Show EMA bias row in the table (Bullish/Bearish) true
Show Trendline Slope Bias Show trendline slope bias row in the table true
Price Distance % from Cross Percentage distance used to calculate above/below cross prices in table 2.0
What It Shows
On Chart:
EMA 50 (blue), EMA 100 (black), EMA 200 (red) lines
Vertical lines at EMA 50/200 crossover bars (blue for bullish, red for bearish)
Labels “Bull Cross” or “Bear Cross” on crossover bars
Signal dots (up to 3 consecutive strong buy or sell signals)
Table (bottom-left corner):
Row Description
EMA 50 > EMA 200 Bullish if EMA 50 is above EMA 200, Bearish otherwise (colored green/red text)
Trendline slope Bullish if all 1m, 3m, 5m regression slopes are up, Bearish if all down, Neutral otherwise (green/red/gray text)
Last EMA Cross Price Price where EMA 50 and EMA 200 last crossed (light blue text)
+% Above Cross Price percentage above last EMA cross price (dark orange text)
-% Below Cross Price percentage below last EMA cross price (red text)
Final Suggestion Overall signal: “Strong Buy 💎”, “Strong Sell 💎”, or “Mixed / Neutral” with green/red/gray background
How To Use
Set your preferred timeframe for EMA calculations using the Custom EMA Timeframe input. The default is 1 minute.
Enable or disable EMAs and table rows as you prefer with toggles.
Watch the table for quick bias and trend signals with color-coded text for easy interpretation.
Use the Last EMA Cross Price and the above/below percentage price points to identify key levels for entries, stops, or take profits.
Monitor the chart for EMA crossover vertical lines and labels to confirm signals visually.
Strong Buy or Sell dots indicate good entry opportunities — limited to 3 per consecutive trend.
Tips
Adjust the Price Distance % input to increase/decrease sensitivity of above/below price levels.
Combine this indicator with volume, price action, or other tools for best results.
Use on mobile or desktop with the compact table to stay informed without clutter.
ChainStrike Support and Resistance Power ChannelA TradingView Script Perfectly set up to be used on ANY crypto-currency on the 5 minute time frame.
It is to be used in tandem with Gingie's ChainStrike Program that automatically trades Bitunix Futures. If you would like to access this program, you can join discord.gg
Mucip AL BUY indicator/Mucip AL BUY indikatörüThis indicator aims to identify potential market bottoms. It also provides visual support to investors by displaying the percentage profit after each buy signal, based on the highest peak price since that signal. Simple yet effective terms help users identify optimal entry points. Furthermore, not every signal yields accurate results.
✅ Elev8+Overview:
The Elev8+ indicator is a multi-layered trading indicator designed to help traders identify high-probability reversal points and trend-following opportunities. By combining the Classic Elev8+ Reversal Indicator, the DI StdDev Filter, and EMA/BB Trend Fills, this indicator offers a powerful toolset for navigating volatile markets with increased accuracy.
Key Features and Logic:
Classic Elev8+ Reversal Logic:
Liquidity Sweep Signals: The indicator detects liquidity sweeps by identifying price action that breaks previous high/low points with significant volume. This is crucial for identifying strong reversal signals when the market is grabbing liquidity.
ADX Trend Filter: The ADX filter ensures that the indicator only triggers signals during strong trending conditions, reducing false signals in range-bound markets. It requires the DI+ to be greater than ADX and ADX to be above 25, confirming a trend.
Bollinger Band Wick Filter: This filter helps identify price action where wicks penetrate the outer Bollinger Bands (3 to 3.5 standard deviations), indicating a potential reversal after price extremes. This adds an extra layer of confirmation for a reversal.
DI StdDev Filter:
Volatility-Adjusted DI Filtering: The DI StdDev Filter adds a volatility component to the classic ADX strategy. It tracks the DI+ and DI- lines' standard deviation, ensuring that trend strength is not only above the threshold but also confirms significant deviations, marking high-probability trend shifts.
Dynamic Thresholds: The upper and lower thresholds for DI are dynamically adjusted based on standard deviations, enhancing the responsiveness of the indicator in fast-moving markets.
EMA and Bollinger Band Trend Fills:
EMA Trend Fill: The Elev8+ Indicator visually highlights trend direction using fast and slow EMAs. A bullish trend is indicated when the fast EMA is above the slow EMA, and a bearish trend is indicated when the fast EMA is below the slow EMA. The background is filled with a semi-transparent color to easily distinguish trending conditions.
Bollinger Band Zones: The fill between the outer Bollinger Bands is used to highlight extreme price levels. These areas often signal overbought or oversold conditions, which traders can use to confirm reversal signals.
How It Works:
The Elev8+ Indicator intelligently combines trend-following and counter-trend signals. When multiple conditions are met, such as a liquidity sweep in the opposite direction of the trend, a reversal is signaled. Traders will benefit from the following:
Buy Signal: When the conditions for a strong reversal align (liquidity sweep, low volume, and confirmed by DI StdDev or BB wick filters), a buy signal is triggered.
Sell Signal: Similarly, when bearish reversal conditions (liquidity sweep and overbought conditions) align with the DI StdDev or BB wick filters, a sell signal is triggered.
Why It's Unique:
Comprehensive Market Filters: The combination of liquidity sweeps, ADX trend strength, DI StdDev volatility filtering, and Bollinger Bands ensures the indicator provides high-quality, high-probability trade setups.
Dual Reversal and Trend Confirmation: By incorporating both trend-following (EMA fills) and reversal logic (liquidity sweeps, BB filters), this script can adapt to different market conditions, providing both trend continuation and counter-trend signals.
Customizable Inputs: Traders can fine-tune the indicator's behavior by adjusting various parameters such as ADX period, Bollinger Band standard deviation, and DI StdDev thresholds to better fit their trading style and timeframes.
How to Use:
Set Up the Indicator: Apply the Elev8+ Indicator to your chart and enable the Classic Elev8 and/or DI StdDev Filter depending on your trading preferences. You can also adjust the EMA Trend Fill for clearer trend visualization.
Monitor Signals: Pay attention to the buy and sell signals generated by the combination of liquidity sweeps, ADX filters, and volatility adjustments. Confirm trades with the EMA trend fill and Bollinger Band zones.
Adapt to Market Conditions: Customize the sensitivity of the indicator by adjusting the ADX and DI StdDev parameters, as well as the Bollinger Band settings to fit different market environments and volatility.
Chart Explanation:
The indicator includes:
Reversal and trend-following signals: Easily identifiable buy and sell signals represented by small up and down triangles.
EMA Trend Fill: A background color fill that shows the prevailing trend.
Bollinger Band Zones: Shaded areas indicating overbought or oversold conditions.
Adjustable Parameters: Users can toggle features and modify parameters to suit their trading strategy.
50 SMA 5-Candle Crossovercatching the cycle using very simple method. at your descrtion.
must know what you are doing.
this will work if you do not follow bindly.
Reversal Straategy(RSI & Volume & Support resistance)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © RoseZero
//@version=6
indicator('Chien luoc dao chieu manh(RSI + Volume + Ho tro auto)', overlay = true)
//===Tham so nguoi dung===
rsiOversold = input.int(30, 'Nguong RSI qua ban')
rsiOverbought = input.int(70, 'Nguong RSI qua mua')
rsiLow = input.int(35, 'Nguong qua ban')
rsiHigh = input.int(55, 'Nguong qua mua')
volMultiplier = input.float(1.5, 'nguong khoi luong tang (so voi TB)')
mult = input.float(1.5, 'Nguong nhan do lon nen', step = 0.1)
supportLength = input.int(20, 'Do dai vung ho tro')
resistLength = input.int(20, 'Do dai vung khang cu')
length = input.int(20, 'So nen trung binh')
volume_threshold = input.float(1.2, title = 'Nguong volume dao chieu')
fastEMA = input.int(21, title = 'EMA nhanh')
slowEMA = input.int(55, title = 'EMA cham')
depth = input.int(3, title = 'Pivot Depth')
rsiLen = input.int(14, title = 'RSI Length')
//==============================================================================
// === Dấu hiệu Cạn Cung ===
lowVolMultiplier = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cung)')
lowRangeMultiplier = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cung)')
avgVolCC = ta.sma(volume, 20)
avgRangeCC = ta.sma(high - low, 20)
isLowVolume = volume < avgVolCC * lowVolMultiplier
isNarrowRange = (high - low) < avgRangeCC * lowRangeMultiplier
isSideways = math.abs(close - close ) < avgRangeCC * 0.3
supplyDryUp = isLowVolume and isNarrowRange and isSideways
// === Dấu hiệu Cạn Cầu ===
lowVolMultiplier2 = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cầu)')
lowRangeMultiplier2 = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cầu)')
avgVolCD = ta.sma(volume, 20)
avgRangeCD = ta.sma(high - low, 20)
isLowVolumeCD = volume < avgVolCD * lowVolMultiplier2
isNarrowRangeCD = (high - low) < avgRangeCD * lowRangeMultiplier2
isWeakDemand = close <= close or close - close < avgRangeCD * 0.2
demandDryUp = isLowVolumeCD and isNarrowRangeCD and isWeakDemand
//=====================================================================================
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
volAvg = ta.sma(volume, 20)
plot(ema34, color = color.green, title = 'EMA 34')
plot(ema89, color = color.orange, title = 'EMA 89')
emaUp = ta.crossover(ema34, ema89)
emaDow = ta.crossunder(ema34, ema89)
alertcondition(emaUp, title = 'EMA34 cat len tren EMA89', message = 'EMA34 cat len tren EMA89 xu huong gia di len')
alertcondition(emaDow, title = 'EMA34 cat xuong duoi EMA89', message = 'EMA34 cat xuong duoi EMA*9 xu huong gia di xuong')
// dieu kien pha len ema va nguoc lai============================================================================================================
breakoutEma = close < ema34 and close < ema89 and close > ema34 and close > ema89
breakdownEma = close > ema34 and close > ema89 and close < ema34 and close < ema89
//dieu kien test lai EMA sau break
retestUpEma = breakoutEma and close < ema34 * 1.02 and close > ema89 * 0.98
retestDownEma = breakdownEma and close > ema34 * 0.98 and close < ema89 * 1.02
//canh bao gia test lai cum ema
alertcondition(retestUpEma, title = 'Canh bao test lai EMA gia tang', message = 'Gia dang test lai cum EMA khi gia tang')
alertcondition(retestDownEma, title = 'Canh bao test lai EMA gia giam', message = 'Gia dang test lai cum EMA khi gia giam')
//Tinh toan co bao Pivot
pivotHigh = ta.pivothigh(high, depth, depth)
pivotLow = ta.pivotlow(low, depth, depth)
ema = ta.ema(close, fastEMA)
ma = ta.sma(close, slowEMA)
rsii = ta.rsi(close, rsiLen)
//Volume Breakout check
volStrong = volume > ta.sma(volume, 20) * volume_threshold
//Mo hinh nen : Pinbar, Engulfing, Doji
isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
isBullEngulfing = close > open and open < close and close > open
isBearishEngulfing = close < open and open > close and close < open
isDoji = math.abs(close - open) / math.abs(high - low) < 0.1
//Dao chieu tang manh va giam manh
candlePattern = isPinBar or isBullEngulfing or isDoji
candlePattern2 = isPinBar or isBearishEngulfing or isDoji
priceCondition = close > ema and close > ma and rsii < 30 and volStrong
priceCondition2 = close < ema and close < ma and rsii > 70 and volStrong
bullishSignal = not na(pivotLow) and candlePattern and priceCondition and volStrong
if bullishSignal
alert('Dao chieu tang manh: Xuat hien nen dao chieu Tang(PInBar, BullishEngulf, Doji)', alert.freq_once_per_bar_close)
bearishSignal = not na(pivotHigh) and candlePattern2 and priceCondition2 and volStrong
if bearishSignal
alert('Dao chieu giam manh: Xuat hien nen dao chieu Giam(PinBar, BearishEngul, Doji)', alert.freq_once_per_bar_close)
//EMA & Trend
emaFast = ta.ema(close, fastEMA)
emaSlow = ta.ema(close, slowEMA)
plot(emaFast, title = 'EMA nhanh', color = color.blue)
plot(emaSlow, 'EMA cham', color = color.purple)
//===Ho tro tu dong===
supportZone = ta.lowest(low, supportLength)
resistZone = ta.highest(high, resistLength)
nearSupport = math.abs(low - supportZone) < syminfo.mintick * 100
nearResistance = math.abs(high - resistZone) < syminfo.mintick * 100
plot(supportZone, 'Ho tro', color = color.gray)
plot(resistZone, 'Khang cu', color = color.orange)
//===Mo hinh nen dao chieu tang & giam===
//Bullish: Hammer, Engulfing, piercing
body = math.abs(close - open)
avgbody = ta.sma(body, length)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
isHammerUp = lowerWick > 2 * body and upperWick < body and close > open
//engulfingUp = close < open and close > open and close > open and open < close
piercingUp = close > open and open < close and close > (open + close ) / 2
bullishCandle = isHammerUp or isBullEngulfing or piercingUp
//Bearish: Inverted Hammer, Bearish Engulfing, Dark cloud Cover
isHammerDow = upperWick > 2 * body and lowerWick < body and close < open
//engulfingDow = close > open and close < open and close < open and open > close
darkCloud = close < open and open > close and close < (open + close ) / 2
bearishCandle = isHammerDow or isBearishEngulfing or darkCloud
//========================================================================
//===Chi bao RSI & Volume===
rsi = ta.rsi(close, 14)
oversold = rsi < rsiOversold
overbought = rsi > rsiOverbought
avgVol = ta.sma(volume, 20)
volumeSpike = volume > avgVol * volMultiplier
rsiLL = rsi < rsiLow
rsiHH = rsi > rsiHigh
// nen rut chan 50%
fibo50=high/2+low/2
Pinbarbullish=close>fibo50 and open>fibo50 and volumeSpike and rsiLL // and close ta.ema(close,89)
plotshape(Pinbarbullish, style = shape.labelup, location = location.belowbar, color = color.green, text = 'L', textcolor = color.white, size = size.tiny)
plotshape(Pinbarbearish, style = shape.labeldown, location = location.abovebar, color = color.red, text = 'S', textcolor = color.white, size = size.tiny)
if Pinbarbullish
alert('Pin Bar dao chieu tang', alert.freq_once_per_bar_close)
if Pinbarbearish
alert('Pin Bar dao chieu giam', alert.freq_once_per_bar_close)
//===dieu kien tin hieu===
buySignal = bullishCandle and oversold and volumeSpike and nearSupport
sellSignal = bearishCandle and overbought and volumeSpike and nearResistance
//Canh bao nag cao
if buySignal
alert('Tin hieu MUA manh:Nen dao chieu tai vung ho tro kem RSI thap & Volume lon(LONG)', alert.freq_once_per_bar_close)
if sellSignal
alert('Tin hieu BAN manh:Nen dao chieu tai vung khang cu kem RSI cao & Volume lon(SHORT)', alert.freq_once_per_bar_close)
//===Hien canh bao===
alertcondition(buySignal, title = 'Tin hieu MUA', message = 'Nen dao chieu TANG tai vung ho tro(RSI thap + Volume lon)')
alertcondition(sellSignal, title = 'Tin hieu BAN', message = 'Nen dao chieu GIAM tai vung ho(RSI cao + Volume lon)')
plotshape(buySignal, style = shape.triangleup, location = location.belowbar, color = color.green, text = 'Long', textcolor = color.white)
plotshape(sellSignal, style = shape.triangledown, location = location.abovebar, color = color.red, text = 'Short', textcolor = color.white)
//Pin Bar ket hop volume lon & RSI qua mua / qua ban
isStrongBullPin = close > open and high - close > 2 * (close - open) and volume > volAvg * volMultiplier and rsi < rsiOversold
isStrongBearPin = open > close and close - low > 2 * (open - close) and volume > volAvg * volMultiplier and rsi > rsiOverbought
plotshape(isStrongBullPin, title = 'Canh bao Pinbar MUA manh', location = location.belowbar, color = color.green, style = shape.labelup, text = "Pb Mua", textcolor = color.white)
plotshape(isStrongBearPin, title = 'Canh bao Pinbar BAN manh', location = location.abovebar, color = color.red, style = shape.labeldown, text = 'Pb Ban', textcolor = color.white)
alertcondition(isStrongBullPin, title = 'Canh bao PinBar MUA manh', message = 'Phat hien PinBar MUA manh(vol cao + RSI qua ban)')
alertcondition(isStrongBearPin, title = 'Canh bao PInBar BAN manh', message = 'Phat hien PinBar BAN manh(vol cao+ RSI qua mua)')
if isStrongBullPin
alert('Pin Bar tin hieu mua:Phat hien PinBar MUA manh(vol cao + RSI qua ban)', alert.freq_once_per_bar_close)
if isStrongBearPin
alert('Pin Bar tin hieu ban:Phat hien PinBar BAN manh(vol cao+ RSI qua mua)', alert.freq_once_per_bar_close)
//================================================================
bool pv2_sv = input.bool (true, title='Plot 2nd order pivots')
bool msb_sv = input.bool (true, title='Plot MSB lines')
bool box_sv = input.bool (true, title='Plot Orderblocks')
bool m_sv = input.bool (true, title='Plot Breakerblocks')
bool range_sv = input.bool (true, title='Plot Range')
bool range_eq_sv = input.bool (true, title='Plot Range 0.5 Line')
bool range_q_sv = input.bool (true, title='Plot Range 0.25 and 0.75 Lines')
bool log_sv = input.bool (true, title='Use Log Scale')
bool msb_a_sv = input.bool (true, title='Alert MSB')
bool ob_a_sv = input.bool (true, title='Alert Orderblock test')
bool bb_a_sv = input.bool (true, title='Alert Breakerblock test')
bool r_a_sv = input.bool (true, title='Alert New Range')
bool rt_a_sv = input.bool (true, title='Alert Range test')
color u_s = input.color (color.new(color.red,90), title='Untested Supply Color')
color t_s = input.color (color.new(color.red,70), title='Tested Supply Color')
color u_d = input.color (color.new(color.green,90), title='Untested Demand Color')
color t_d = input.color (color.new(color.green,70), title='Tested Demand Color')
color u_b = input.color ( color.new(color.blue,90), title='Untested Breaker Color')
color t_b = input.color (color.new(color.blue, 70), title='Tested Breaker Color')
var float pvh1_price = array.new_float (30, na) // high
var int pvh1_time = array.new_int (30, na)
var float pvl1_price = array.new_float (30, na) // low
var int pvl1_time = array.new_int (30, na)
var float pvh2_price = array.new_float (10, na) // higher high
var int pvh2_time = array.new_int (10, na)
var float pvl2_price = array.new_float (10, na) // lower low
var int pvl2_time = array.new_int (10, na)
var float htcmrll_price = na // high that created most recent ll
var int htcmrll_time = na
var float ltcmrhh_price = na // low that created most recent hh
var int ltcmrhh_time = na
var box long_boxes = array.new_box() // orderblocks
var box short_boxes = array.new_box()
var box m_long_boxes = array.new_box() // breakerblocks
var box m_short_boxes = array.new_box()
var line bull_bos_lines = array.new_line() // MSB lines
var line bear_bos_lines = array.new_line()
var line range_h_lines = array.new_line() // Range lines
var line range_25_lines = array.new_line()
var line range_m_lines = array.new_line()
var line range_75_lines = array.new_line()
var line range_l_lines = array.new_line()
var label la_ph2 = array.new_label() // 2nd order pivots
var label la_pl2 = array.new_label()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
var int temp_time = na
var float last_range_h = na
var float last_range_l = na
var line range_m = na
var line range_25 = na
var line range_75 = na
var float box_top = na
var float box_bottom = na
var int h_a_time = 0
var int l_a_time = 0
var int mh_a_time = 0
var int ml_a_time = 0
var int rh_a_time = 0
var int rl_a_time = 0
bool pvh = high < high and high > high
bool pvl = low > low and low < low
int pv1_time = bar_index
float pv1_high = high
float pv1_low = low
bool new_ph_2nd = false
bool new_pl_2nd = false
string alert = na
if barstate.isconfirmed
if pvh
array.pop(pvh1_price)
array.pop(pvh1_time)
array.unshift(pvh1_price, pv1_high)
array.unshift(pvh1_time, pv1_time)
if array.size(pvh1_price) > 2
temp_pv_0 := array.get(pvh1_price, 0)
temp_pv_1 := array.get(pvh1_price, 1)
temp_pv_2 := array.get(pvh1_price, 2)
if temp_pv_0 < temp_pv_1 and temp_pv_1 > temp_pv_2
array.pop(pvh2_price)
array.pop(pvh2_time)
array.unshift(pvh2_price, temp_pv_1)
array.unshift(pvh2_time, array.get(pvh1_time, 1))
new_ph_2nd := true
if temp_pv_1 > array.get(pvh2_price, 1)
for i = 0 to array.size(pvl2_time) - 1 by 1
temp_ltcmrhh_time = array.get(pvl2_time, i)
if temp_ltcmrhh_time < array.get(pvh2_time, 0)
ltcmrhh_price := array.get(pvl2_price, i)
ltcmrhh_time := temp_ltcmrhh_time
break
if temp_pv_0 < ltcmrhh_price
if msb_sv
array.push(bear_bos_lines, line.new(x1=ltcmrhh_time, y1=ltcmrhh_price, x2=bar_index, y2=ltcmrhh_price, color=color.rgb(11, 238, 18), width=3))
box_top := array.get(pvh2_price, 0)
box_bottom := math.max(low , low )
array.push(short_boxes, box.new(left=array.get(pvh2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_s : na ,border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bearish MSB @ ' + str.tostring(ltcmrhh_price) + ' ' + 'New Supply Zone : '+ str.tostring(box_top) + ' - ' + str.tostring(box_bottom) + ' '
ltcmrhh_price := na
if pvl
array.pop(pvl1_price)
array.pop(pvl1_time)
array.unshift(pvl1_price, pv1_low)
array.unshift(pvl1_time, pv1_time)
if array.size(pvl1_price) > 2
temp_pv_0 := array.get(pvl1_price, 0)
temp_pv_1 := array.get(pvl1_price, 1)
temp_pv_2 := array.get(pvl1_price, 2)
if temp_pv_0 > temp_pv_1 and temp_pv_1 < temp_pv_2
array.pop(pvl2_price)
array.pop(pvl2_time)
array.unshift(pvl2_price, temp_pv_1)
array.unshift(pvl2_time, array.get(pvl1_time, 1))
new_pl_2nd := true
if temp_pv_1 < array.get(pvl2_price, 1)
for i = 0 to array.size(pvh2_time) - 1 by 1
temp_htcmrll_time = array.get(pvh2_time, i)
if temp_htcmrll_time < array.get(pvl2_time, 0)
htcmrll_price := array.get(pvh2_price, i)
htcmrll_time := temp_htcmrll_time
break
if temp_pv_0 > htcmrll_price
if msb_sv
array.push(bull_bos_lines, line.new(x1=htcmrll_time, y1=htcmrll_price, x2=bar_index, y2=htcmrll_price, color=color.rgb(236, 5, 5), width=3))
box_top := math.min(high , high )
box_bottom := array.get(pvl2_price, 0)
array.push(long_boxes, box.new(left=array.get(pvl2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_d : na, border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bullish MSB @ ' + str.tostring(htcmrll_price) + ' ' + 'New Demand Zone : '+ str.tostring(box_bottom) + ' - ' + str.tostring(box_top) + ' '
htcmrll_price := na
if array.size(short_boxes) > 0
for i = array.size(short_boxes) - 1 to 0 by 1
tbox = array.get(short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
if box_sv
box.set_bgcolor(tbox, t_s)
if ob_a_sv and close < bottom
if array.get(pvh1_time, 0) != h_a_time
h_a_time := array.get(pvh1_time, 0)
alert := alert + 'Supply Zone Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
if m_sv
box.set_bgcolor(tbox, u_b)
array.push(m_long_boxes, tbox)
else
box.delete(tbox)
array.remove(short_boxes, i)
if msb_sv
line.delete(array.get(bear_bos_lines, i))
array.remove(bear_bos_lines, i)
if array.size(long_boxes) > 0
for i = array.size(long_boxes) - 1 to 0 by 1
lbox = array.get(long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
if box_sv
box.set_bgcolor(lbox, t_d)
if ob_a_sv and close > top
if array.get(pvl1_time, 0) != l_a_time
l_a_time := array.get(pvl1_time, 0)
alert := alert + 'Demand Zone Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
if m_sv
box.set_bgcolor(lbox, u_b)
array.push(m_short_boxes, lbox)
else
box.delete(lbox)
array.remove(long_boxes, i)
if msb_sv
line.delete(array.get(bull_bos_lines, i))
array.remove(bull_bos_lines, i)
if array.size(m_short_boxes) > 0
for i = array.size(m_short_boxes) - 1 to 0 by 1
tbox = array.get(m_short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
box.set_bgcolor(tbox, t_b)
if bb_a_sv and close < bottom
if array.get(pvh1_time, 0) != mh_a_time
mh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Breakerblock Test Up @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
box.delete(tbox)
array.remove(m_short_boxes, i)
if array.size(m_long_boxes) > 0
for i = array.size(m_long_boxes) - 1 to 0 by 1
lbox = array.get(m_long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
box.set_bgcolor(lbox, t_b)
if bb_a_sv and close > top
if array.get(pvl1_time, 0) != ml_a_time
ml_a_time := array.get(pvl1_time, 0)
alert := alert + 'Breakerblock Test Down @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
box.delete(lbox)
array.remove(m_long_boxes, i)
if range_sv and (new_ph_2nd or new_pl_2nd) and (array.get(pvh2_price, 0) < array.get(pvh2_price, 1) and array.get(pvl2_price, 0) > array.get(pvl2_price, 1) and array.get(pvh2_price, 0) > array.get(pvl2_price, 1) and array.get(pvl2_price, 0) < array.get(pvh2_price, 1)) and (array.get(pvl2_price, 1) > nz(last_range_h) or na(last_range_l)? true : (array.get(pvh2_price, 1) < last_range_l))
temp_time := math.min(array.get(pvh2_time, 1), array.get(pvl2_time, 1))
last_range_h := array.get(pvh2_price, 1)
last_range_l := array.get(pvl2_price, 1)
temp_pv_0 := log_sv ? math.exp((math.log(last_range_h) + math.log(last_range_l))/2) : (last_range_h + last_range_l)/2
temp_pv_1 := log_sv ? math.exp((math.log(last_range_h) + math.log(temp_pv_0))/2) : (last_range_h + temp_pv_0)/2
temp_pv_2 := log_sv ? math.exp((math.log(last_range_l) + math.log(temp_pv_0))/2) : (last_range_l + temp_pv_0)/2
array.push(range_h_lines, line.new(x1=temp_time, y1=last_range_h, x2=bar_index, y2=last_range_h, color= color.white, width=2, extend=extend.right))
array.push(range_l_lines, line.new(x1=temp_time, y1=last_range_l, x2=bar_index, y2=last_range_l, color= color.white, width=2, extend=extend.right))
if range_eq_sv
array.push(range_m_lines, line.new(x1=temp_time, y1=temp_pv_0, x2=bar_index, y2=temp_pv_0, color= color.rgb(246, 6, 6), width=2, extend=extend.right))
if range_q_sv
array.push(range_25_lines, line.new(x1=temp_time, y1=temp_pv_1, x2=bar_index, y2=temp_pv_1, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
array.push(range_75_lines, line.new(x1=temp_time, y1=temp_pv_2, x2=bar_index, y2=temp_pv_2, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
if r_a_sv
alert := alert + 'New Range : ' + str.tostring(last_range_h) + ' - ' + str.tostring(last_range_l) + '. Mean = ' + str.tostring(temp_pv_0) + ' '
if array.size(range_h_lines) > 0
for i = array.size(range_h_lines) - 1 to 0 by 1
range_h = array.get(range_h_lines, i)
top = line.get_y1(range_h)
range_l = array.get(range_l_lines, i)
bottom = line.get_y1(range_l)
temp_time := line.get_x1(range_h)
if array.get(pvh1_price, 0) > top
if rt_a_sv and close < top
if array.get(pvh1_time, 0) != rh_a_time
rh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Range High Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' '
if array.get(pvl1_price, 0) < bottom
if rt_a_sv and close > bottom
if array.get(pvl1_time, 0) != rl_a_time
rl_a_time := array.get(pvl1_time, 0)
alert := alert + 'Range Low Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' '
if range_eq_sv
range_m := array.get(range_m_lines, i)
if range_q_sv
range_25 := array.get(range_25_lines, i)
range_75 := array.get(range_75_lines, i)
if array.get(pvh1_price, 0) < bottom or array.get(pvl1_price, 0) > top
line.delete(range_h)
array.remove(range_h_lines, i)
line.delete(range_l)
array.remove(range_l_lines, i)
if range_eq_sv
line.delete(range_m)
array.remove(range_m_lines, i)
if range_q_sv
line.delete(range_25)
array.remove(range_25_lines, i)
line.delete(range_75)
array.remove(range_75_lines, i)
last_range_h := na
last_range_l := na
if pv2_sv
if new_ph_2nd
array.push(la_ph2, label.new(x = array.get(pvh2_time, 0), y = array.get(pvh2_price, 0), xloc = xloc.bar_index, style = label.style_label_down, color = #770000FF, size = size.tiny))
if new_pl_2nd
array.push(la_pl2, label.new(x = array.get(pvl2_time, 0), y = array.get(pvl2_price, 0), xloc = xloc.bar_index, style = label.style_label_up, color = #007700FF, size = size.tiny))
alert := not na(alert) ? (alert + 'Current price = ' + str.tostring(close) + ' ') : na
exec = not na(alert) ? true : false
//if exec==true
//alert(alert, alert.freq_once_per_bar_close)
//xac dinh dieu kien khoi luong lon
// mau cay nen mua
buyCandle = close > open and volumeSpike ? color.rgb(4, 128, 8) : na
// mau cay nen ban
sellCandle = close < open and volumeSpike ? color.rgb(147, 23, 230) : na
// ve nen tuy chinh
plotcandle(open, high, low, close, color = buyCandle, title = "Buy Candle")
plotcandle(open, high, low, close, color = sellCandle, title = "Sell Candle")
//plot(close)
//=== Lọc pin bar intraday ===
isIntraday = timeframe.multiplier >= 15 and timeframe.multiplier <= 60 // M15 đến H1
//isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
volSpike = volume > ta.sma(volume, 20) * 1.5
//rsi = ta.rsi(close, 14)
rsiExtreme = rsi < 30 or rsi > 70
//nearSupport = math.abs(low - ta.lowest(low, 20)) < syminfo.mintick * 100
//nearResistance = math.abs(high - ta.highest(high, 20)) < syminfo.mintick * 100
validBullPin = isPinBar and close > open and high - close > 2 * (close - open) and volSpike and rsi < 30 and nearSupport and isIntraday
validBearPin = isPinBar and open > close and close - low > 2 * (open - close) and volSpike and rsi > 70 and nearResistance and isIntraday
plotshape(validBullPin, location = location.belowbar, style = shape.labelup, color = color.green, text = "PB M15-H1")
plotshape(validBearPin, location = location.abovebar, style = shape.labeldown, color = color.red, text = "PB M15-H1")
alertcondition(validBullPin, title = "Pin Bar MUA intraday", message = "Phát hiện Pin Bar MUA mạnh (M15-H1)")
if validBullPin
alert("Pin bar MUA intraday : Phát hiện Pin Bar MUA mạnh (M15-H1)", alert.freq_once_per_bar_close)
alertcondition(validBearPin, title = "Pin Bar BÁN intraday", message = "Phát hiện Pin Bar BÁN mạnh (M15-H1)")
if validBearPin
alert("Pin bar BAN Intrday : Phát hiện Pin Bar BÁN mạnh (M15-H1)", alert.freq_once_per_bar_close)
//=======- Dùng H1 để xác định xu hướng, M15 để vào lệnh.
//Nếu pin bar xuất hiện ở H1, bạn có thể chờ xác nhận phá đỉnh/đáy ở M15 để vào lệnh.
//Kết hợp thêm EMA hoặc vùng cung cầu để tăng độ tin cậy
//====================================
trendUp = ema34 > ema89
trendDow = ema34 < ema89
//tin hieu vao lenh
enterLong = validBullPin and close > high and trendUp
enterShort = validBearPin and close < low and trendDow
plotshape(enterLong, location = location.belowbar, style = shape.triangleup, color = color.lime, text = "Long", textcolor = color.white)
plotshape(enterShort, location = location.abovebar, style = shape.triangledown, color = color.fuchsia, text = "Short", textcolor = color.white)
if enterLong
alert("Vao lenh Long: Pin Bar + Pha dinh + EMA xac nhan", alert.freq_once_per_bar_close)
if enterShort
alert("Vao lenh Short: Pin Bar + Pha day + EMA xac nhan", alert.freq_once_per_bar_close)
//==================================================================================
// === Hiển thị tín hiệu Cạn cung ===
//plotshape(supplyDryUp, title = 'Cạn cung', location = location.belowbar, color = color.yellow, style = shape.circle, size = size.small)
alertcondition(supplyDryUp, title = 'Cảnh báo cạn cung', message = 'Phát hiện dấu hiệu cạn cung: khối lượng thấp + giá đi ngang + biên độ hẹp')
// === Kết hợp với tín hiệu mua/bán để tăng độ tin cậy ===
buySignalCC = buySignal and supplyDryUp
sellSignalCC = sellSignal and supplyDryUp
plotshape(buySignalCC, title = 'Mua + Cạn cung', location = location.belowbar, color = color.lime, style = shape.triangleup, text = 'Long CC', textcolor = color.white)
plotshape(sellSignalCC, title = 'Bán + Cạn cung', location = location.abovebar, color = color.fuchsia, style = shape.triangledown, text = 'Short CC', textcolor = color.white)
alertcondition(buySignalCC, title = 'Mua mạnh + Cạn cung', message = 'Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung')
alertcondition(sellSignalCC, title = 'Bán mạnh + Cạn cung', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung')
if buySignalCC
alert('Mua mạnh + Cạn cung : Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
if sellSignalCC
alert('Bán mạnh + Cạn cung : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
// === Hiển thị tín hiệu Cạn cầu ===
//plotshape(demandDryUp, title = 'Cạn cầu', location = location.abovebar, color = color.orange, style = shape.circle, size = size.small)
alertcondition(demandDryUp, title = 'Cảnh báo cạn cầu', message = 'Phát hiện dấu hiệu cạn cầu: khối lượng thấp + giá không tăng + biên độ hẹp')
// === Kết hợp với tín hiệu bán để tăng độ tin cậy ===
sellSignalCD = sellSignal and demandDryUp
plotshape(sellSignalCD, title = 'Bán + Cạn cầu', location = location.abovebar, color = color.red, style = shape.triangledown, text = 'Short CCầu', textcolor = color.white)
alertcondition(sellSignalCD, title = 'Bán mạnh + Cạn cầu', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu')
if sellSignalCD
alert('Bán mạnh + Cạn cầu : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu', alert.freq_once_per_bar_close)
//====================================================
Reversal Strategy (RSI & Volume & Automantic support resistance)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © RoseZero
//@version=6
indicator('Chien luoc dao chieu manh(RSI + Volume + Ho tro auto)', overlay = true)
//===Tham so nguoi dung===
rsiOversold = input.int(30, 'Nguong RSI qua ban')
rsiOverbought = input.int(70, 'Nguong RSI qua mua')
rsiLow = input.int(35, 'Nguong qua ban')
rsiHigh = input.int(55, 'Nguong qua mua')
volMultiplier = input.float(1.5, 'nguong khoi luong tang (so voi TB)')
mult = input.float(1.5, 'Nguong nhan do lon nen', step = 0.1)
supportLength = input.int(20, 'Do dai vung ho tro')
resistLength = input.int(20, 'Do dai vung khang cu')
length = input.int(20, 'So nen trung binh')
volume_threshold = input.float(1.2, title = 'Nguong volume dao chieu')
fastEMA = input.int(21, title = 'EMA nhanh')
slowEMA = input.int(55, title = 'EMA cham')
depth = input.int(3, title = 'Pivot Depth')
rsiLen = input.int(14, title = 'RSI Length')
//==============================================================================
// === Dấu hiệu Cạn Cung ===
lowVolMultiplier = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cung)')
lowRangeMultiplier = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cung)')
avgVolCC = ta.sma(volume, 20)
avgRangeCC = ta.sma(high - low, 20)
isLowVolume = volume < avgVolCC * lowVolMultiplier
isNarrowRange = (high - low) < avgRangeCC * lowRangeMultiplier
isSideways = math.abs(close - close ) < avgRangeCC * 0.3
supplyDryUp = isLowVolume and isNarrowRange and isSideways
// === Dấu hiệu Cạn Cầu ===
lowVolMultiplier2 = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cầu)')
lowRangeMultiplier2 = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cầu)')
avgVolCD = ta.sma(volume, 20)
avgRangeCD = ta.sma(high - low, 20)
isLowVolumeCD = volume < avgVolCD * lowVolMultiplier2
isNarrowRangeCD = (high - low) < avgRangeCD * lowRangeMultiplier2
isWeakDemand = close <= close or close - close < avgRangeCD * 0.2
demandDryUp = isLowVolumeCD and isNarrowRangeCD and isWeakDemand
//=====================================================================================
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
volAvg = ta.sma(volume, 20)
plot(ema34, color = color.green, title = 'EMA 34')
plot(ema89, color = color.orange, title = 'EMA 89')
emaUp = ta.crossover(ema34, ema89)
emaDow = ta.crossunder(ema34, ema89)
alertcondition(emaUp, title = 'EMA34 cat len tren EMA89', message = 'EMA34 cat len tren EMA89 xu huong gia di len')
alertcondition(emaDow, title = 'EMA34 cat xuong duoi EMA89', message = 'EMA34 cat xuong duoi EMA*9 xu huong gia di xuong')
// dieu kien pha len ema va nguoc lai============================================================================================================
breakoutEma = close < ema34 and close < ema89 and close > ema34 and close > ema89
breakdownEma = close > ema34 and close > ema89 and close < ema34 and close < ema89
//dieu kien test lai EMA sau break
retestUpEma = breakoutEma and close < ema34 * 1.02 and close > ema89 * 0.98
retestDownEma = breakdownEma and close > ema34 * 0.98 and close < ema89 * 1.02
//canh bao gia test lai cum ema
alertcondition(retestUpEma, title = 'Canh bao test lai EMA gia tang', message = 'Gia dang test lai cum EMA khi gia tang')
alertcondition(retestDownEma, title = 'Canh bao test lai EMA gia giam', message = 'Gia dang test lai cum EMA khi gia giam')
//Tinh toan co bao Pivot
pivotHigh = ta.pivothigh(high, depth, depth)
pivotLow = ta.pivotlow(low, depth, depth)
ema = ta.ema(close, fastEMA)
ma = ta.sma(close, slowEMA)
rsii = ta.rsi(close, rsiLen)
//Volume Breakout check
volStrong = volume > ta.sma(volume, 20) * volume_threshold
//Mo hinh nen : Pinbar, Engulfing, Doji
isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
isBullEngulfing = close > open and open < close and close > open
isBearishEngulfing = close < open and open > close and close < open
isDoji = math.abs(close - open) / math.abs(high - low) < 0.1
//Dao chieu tang manh va giam manh
candlePattern = isPinBar or isBullEngulfing or isDoji
candlePattern2 = isPinBar or isBearishEngulfing or isDoji
priceCondition = close > ema and close > ma and rsii < 30 and volStrong
priceCondition2 = close < ema and close < ma and rsii > 70 and volStrong
bullishSignal = not na(pivotLow) and candlePattern and priceCondition and volStrong
if bullishSignal
alert('Dao chieu tang manh: Xuat hien nen dao chieu Tang(PInBar, BullishEngulf, Doji)', alert.freq_once_per_bar_close)
bearishSignal = not na(pivotHigh) and candlePattern2 and priceCondition2 and volStrong
if bearishSignal
alert('Dao chieu giam manh: Xuat hien nen dao chieu Giam(PinBar, BearishEngul, Doji)', alert.freq_once_per_bar_close)
//EMA & Trend
emaFast = ta.ema(close, fastEMA)
emaSlow = ta.ema(close, slowEMA)
plot(emaFast, title = 'EMA nhanh', color = color.blue)
plot(emaSlow, 'EMA cham', color = color.purple)
//===Ho tro tu dong===
supportZone = ta.lowest(low, supportLength)
resistZone = ta.highest(high, resistLength)
nearSupport = math.abs(low - supportZone) < syminfo.mintick * 100
nearResistance = math.abs(high - resistZone) < syminfo.mintick * 100
plot(supportZone, 'Ho tro', color = color.gray)
plot(resistZone, 'Khang cu', color = color.orange)
//===Mo hinh nen dao chieu tang & giam===
//Bullish: Hammer, Engulfing, piercing
body = math.abs(close - open)
avgbody = ta.sma(body, length)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
isHammerUp = lowerWick > 2 * body and upperWick < body and close > open
//engulfingUp = close < open and close > open and close > open and open < close
piercingUp = close > open and open < close and close > (open + close ) / 2
bullishCandle = isHammerUp or isBullEngulfing or piercingUp
//Bearish: Inverted Hammer, Bearish Engulfing, Dark cloud Cover
isHammerDow = upperWick > 2 * body and lowerWick < body and close < open
//engulfingDow = close > open and close < open and close < open and open > close
darkCloud = close < open and open > close and close < (open + close ) / 2
bearishCandle = isHammerDow or isBearishEngulfing or darkCloud
//========================================================================
//===Chi bao RSI & Volume===
rsi = ta.rsi(close, 14)
oversold = rsi < rsiOversold
overbought = rsi > rsiOverbought
avgVol = ta.sma(volume, 20)
volumeSpike = volume > avgVol * volMultiplier
rsiLL = rsi < rsiLow
rsiHH = rsi > rsiHigh
// nen rut chan 50%
fibo50=high/2+low/2
Pinbarbullish=close>fibo50 and open>fibo50 and volumeSpike and rsiLL // and close ta.ema(close,89)
plotshape(Pinbarbullish, style = shape.labelup, location = location.belowbar, color = color.green, text = 'L', textcolor = color.white, size = size.tiny)
plotshape(Pinbarbearish, style = shape.labeldown, location = location.abovebar, color = color.red, text = 'S', textcolor = color.white, size = size.tiny)
if Pinbarbullish
alert('Pin Bar dao chieu tang', alert.freq_once_per_bar_close)
if Pinbarbearish
alert('Pin Bar dao chieu giam', alert.freq_once_per_bar_close)
//===dieu kien tin hieu===
buySignal = bullishCandle and oversold and volumeSpike and nearSupport
sellSignal = bearishCandle and overbought and volumeSpike and nearResistance
//Canh bao nag cao
if buySignal
alert('Tin hieu MUA manh:Nen dao chieu tai vung ho tro kem RSI thap & Volume lon(LONG)', alert.freq_once_per_bar_close)
if sellSignal
alert('Tin hieu BAN manh:Nen dao chieu tai vung khang cu kem RSI cao & Volume lon(SHORT)', alert.freq_once_per_bar_close)
//===Hien canh bao===
alertcondition(buySignal, title = 'Tin hieu MUA', message = 'Nen dao chieu TANG tai vung ho tro(RSI thap + Volume lon)')
alertcondition(sellSignal, title = 'Tin hieu BAN', message = 'Nen dao chieu GIAM tai vung ho(RSI cao + Volume lon)')
plotshape(buySignal, style = shape.triangleup, location = location.belowbar, color = color.green, text = 'Long', textcolor = color.white)
plotshape(sellSignal, style = shape.triangledown, location = location.abovebar, color = color.red, text = 'Short', textcolor = color.white)
//Pin Bar ket hop volume lon & RSI qua mua / qua ban
isStrongBullPin = close > open and high - close > 2 * (close - open) and volume > volAvg * volMultiplier and rsi < rsiOversold
isStrongBearPin = open > close and close - low > 2 * (open - close) and volume > volAvg * volMultiplier and rsi > rsiOverbought
plotshape(isStrongBullPin, title = 'Canh bao Pinbar MUA manh', location = location.belowbar, color = color.green, style = shape.labelup, text = "Pb Mua", textcolor = color.white)
plotshape(isStrongBearPin, title = 'Canh bao Pinbar BAN manh', location = location.abovebar, color = color.red, style = shape.labeldown, text = 'Pb Ban', textcolor = color.white)
alertcondition(isStrongBullPin, title = 'Canh bao PinBar MUA manh', message = 'Phat hien PinBar MUA manh(vol cao + RSI qua ban)')
alertcondition(isStrongBearPin, title = 'Canh bao PInBar BAN manh', message = 'Phat hien PinBar BAN manh(vol cao+ RSI qua mua)')
if isStrongBullPin
alert('Pin Bar tin hieu mua:Phat hien PinBar MUA manh(vol cao + RSI qua ban)', alert.freq_once_per_bar_close)
if isStrongBearPin
alert('Pin Bar tin hieu ban:Phat hien PinBar BAN manh(vol cao+ RSI qua mua)', alert.freq_once_per_bar_close)
//================================================================
bool pv2_sv = input.bool (true, title='Plot 2nd order pivots')
bool msb_sv = input.bool (true, title='Plot MSB lines')
bool box_sv = input.bool (true, title='Plot Orderblocks')
bool m_sv = input.bool (true, title='Plot Breakerblocks')
bool range_sv = input.bool (true, title='Plot Range')
bool range_eq_sv = input.bool (true, title='Plot Range 0.5 Line')
bool range_q_sv = input.bool (true, title='Plot Range 0.25 and 0.75 Lines')
bool log_sv = input.bool (true, title='Use Log Scale')
bool msb_a_sv = input.bool (true, title='Alert MSB')
bool ob_a_sv = input.bool (true, title='Alert Orderblock test')
bool bb_a_sv = input.bool (true, title='Alert Breakerblock test')
bool r_a_sv = input.bool (true, title='Alert New Range')
bool rt_a_sv = input.bool (true, title='Alert Range test')
color u_s = input.color (color.new(color.red,90), title='Untested Supply Color')
color t_s = input.color (color.new(color.red,70), title='Tested Supply Color')
color u_d = input.color (color.new(color.green,90), title='Untested Demand Color')
color t_d = input.color (color.new(color.green,70), title='Tested Demand Color')
color u_b = input.color ( color.new(color.blue,90), title='Untested Breaker Color')
color t_b = input.color (color.new(color.blue, 70), title='Tested Breaker Color')
var float pvh1_price = array.new_float (30, na) // high
var int pvh1_time = array.new_int (30, na)
var float pvl1_price = array.new_float (30, na) // low
var int pvl1_time = array.new_int (30, na)
var float pvh2_price = array.new_float (10, na) // higher high
var int pvh2_time = array.new_int (10, na)
var float pvl2_price = array.new_float (10, na) // lower low
var int pvl2_time = array.new_int (10, na)
var float htcmrll_price = na // high that created most recent ll
var int htcmrll_time = na
var float ltcmrhh_price = na // low that created most recent hh
var int ltcmrhh_time = na
var box long_boxes = array.new_box() // orderblocks
var box short_boxes = array.new_box()
var box m_long_boxes = array.new_box() // breakerblocks
var box m_short_boxes = array.new_box()
var line bull_bos_lines = array.new_line() // MSB lines
var line bear_bos_lines = array.new_line()
var line range_h_lines = array.new_line() // Range lines
var line range_25_lines = array.new_line()
var line range_m_lines = array.new_line()
var line range_75_lines = array.new_line()
var line range_l_lines = array.new_line()
var label la_ph2 = array.new_label() // 2nd order pivots
var label la_pl2 = array.new_label()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
var int temp_time = na
var float last_range_h = na
var float last_range_l = na
var line range_m = na
var line range_25 = na
var line range_75 = na
var float box_top = na
var float box_bottom = na
var int h_a_time = 0
var int l_a_time = 0
var int mh_a_time = 0
var int ml_a_time = 0
var int rh_a_time = 0
var int rl_a_time = 0
bool pvh = high < high and high > high
bool pvl = low > low and low < low
int pv1_time = bar_index
float pv1_high = high
float pv1_low = low
bool new_ph_2nd = false
bool new_pl_2nd = false
string alert = na
if barstate.isconfirmed
if pvh
array.pop(pvh1_price)
array.pop(pvh1_time)
array.unshift(pvh1_price, pv1_high)
array.unshift(pvh1_time, pv1_time)
if array.size(pvh1_price) > 2
temp_pv_0 := array.get(pvh1_price, 0)
temp_pv_1 := array.get(pvh1_price, 1)
temp_pv_2 := array.get(pvh1_price, 2)
if temp_pv_0 < temp_pv_1 and temp_pv_1 > temp_pv_2
array.pop(pvh2_price)
array.pop(pvh2_time)
array.unshift(pvh2_price, temp_pv_1)
array.unshift(pvh2_time, array.get(pvh1_time, 1))
new_ph_2nd := true
if temp_pv_1 > array.get(pvh2_price, 1)
for i = 0 to array.size(pvl2_time) - 1 by 1
temp_ltcmrhh_time = array.get(pvl2_time, i)
if temp_ltcmrhh_time < array.get(pvh2_time, 0)
ltcmrhh_price := array.get(pvl2_price, i)
ltcmrhh_time := temp_ltcmrhh_time
break
if temp_pv_0 < ltcmrhh_price
if msb_sv
array.push(bear_bos_lines, line.new(x1=ltcmrhh_time, y1=ltcmrhh_price, x2=bar_index, y2=ltcmrhh_price, color=color.rgb(11, 238, 18), width=3))
box_top := array.get(pvh2_price, 0)
box_bottom := math.max(low , low )
array.push(short_boxes, box.new(left=array.get(pvh2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_s : na ,border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bearish MSB @ ' + str.tostring(ltcmrhh_price) + ' ' + 'New Supply Zone : '+ str.tostring(box_top) + ' - ' + str.tostring(box_bottom) + ' '
ltcmrhh_price := na
if pvl
array.pop(pvl1_price)
array.pop(pvl1_time)
array.unshift(pvl1_price, pv1_low)
array.unshift(pvl1_time, pv1_time)
if array.size(pvl1_price) > 2
temp_pv_0 := array.get(pvl1_price, 0)
temp_pv_1 := array.get(pvl1_price, 1)
temp_pv_2 := array.get(pvl1_price, 2)
if temp_pv_0 > temp_pv_1 and temp_pv_1 < temp_pv_2
array.pop(pvl2_price)
array.pop(pvl2_time)
array.unshift(pvl2_price, temp_pv_1)
array.unshift(pvl2_time, array.get(pvl1_time, 1))
new_pl_2nd := true
if temp_pv_1 < array.get(pvl2_price, 1)
for i = 0 to array.size(pvh2_time) - 1 by 1
temp_htcmrll_time = array.get(pvh2_time, i)
if temp_htcmrll_time < array.get(pvl2_time, 0)
htcmrll_price := array.get(pvh2_price, i)
htcmrll_time := temp_htcmrll_time
break
if temp_pv_0 > htcmrll_price
if msb_sv
array.push(bull_bos_lines, line.new(x1=htcmrll_time, y1=htcmrll_price, x2=bar_index, y2=htcmrll_price, color=color.rgb(236, 5, 5), width=3))
box_top := math.min(high , high )
box_bottom := array.get(pvl2_price, 0)
array.push(long_boxes, box.new(left=array.get(pvl2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_d : na, border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bullish MSB @ ' + str.tostring(htcmrll_price) + ' ' + 'New Demand Zone : '+ str.tostring(box_bottom) + ' - ' + str.tostring(box_top) + ' '
htcmrll_price := na
if array.size(short_boxes) > 0
for i = array.size(short_boxes) - 1 to 0 by 1
tbox = array.get(short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
if box_sv
box.set_bgcolor(tbox, t_s)
if ob_a_sv and close < bottom
if array.get(pvh1_time, 0) != h_a_time
h_a_time := array.get(pvh1_time, 0)
alert := alert + 'Supply Zone Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
if m_sv
box.set_bgcolor(tbox, u_b)
array.push(m_long_boxes, tbox)
else
box.delete(tbox)
array.remove(short_boxes, i)
if msb_sv
line.delete(array.get(bear_bos_lines, i))
array.remove(bear_bos_lines, i)
if array.size(long_boxes) > 0
for i = array.size(long_boxes) - 1 to 0 by 1
lbox = array.get(long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
if box_sv
box.set_bgcolor(lbox, t_d)
if ob_a_sv and close > top
if array.get(pvl1_time, 0) != l_a_time
l_a_time := array.get(pvl1_time, 0)
alert := alert + 'Demand Zone Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
if m_sv
box.set_bgcolor(lbox, u_b)
array.push(m_short_boxes, lbox)
else
box.delete(lbox)
array.remove(long_boxes, i)
if msb_sv
line.delete(array.get(bull_bos_lines, i))
array.remove(bull_bos_lines, i)
if array.size(m_short_boxes) > 0
for i = array.size(m_short_boxes) - 1 to 0 by 1
tbox = array.get(m_short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
box.set_bgcolor(tbox, t_b)
if bb_a_sv and close < bottom
if array.get(pvh1_time, 0) != mh_a_time
mh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Breakerblock Test Up @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
box.delete(tbox)
array.remove(m_short_boxes, i)
if array.size(m_long_boxes) > 0
for i = array.size(m_long_boxes) - 1 to 0 by 1
lbox = array.get(m_long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
box.set_bgcolor(lbox, t_b)
if bb_a_sv and close > top
if array.get(pvl1_time, 0) != ml_a_time
ml_a_time := array.get(pvl1_time, 0)
alert := alert + 'Breakerblock Test Down @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
box.delete(lbox)
array.remove(m_long_boxes, i)
if range_sv and (new_ph_2nd or new_pl_2nd) and (array.get(pvh2_price, 0) < array.get(pvh2_price, 1) and array.get(pvl2_price, 0) > array.get(pvl2_price, 1) and array.get(pvh2_price, 0) > array.get(pvl2_price, 1) and array.get(pvl2_price, 0) < array.get(pvh2_price, 1)) and (array.get(pvl2_price, 1) > nz(last_range_h) or na(last_range_l)? true : (array.get(pvh2_price, 1) < last_range_l))
temp_time := math.min(array.get(pvh2_time, 1), array.get(pvl2_time, 1))
last_range_h := array.get(pvh2_price, 1)
last_range_l := array.get(pvl2_price, 1)
temp_pv_0 := log_sv ? math.exp((math.log(last_range_h) + math.log(last_range_l))/2) : (last_range_h + last_range_l)/2
temp_pv_1 := log_sv ? math.exp((math.log(last_range_h) + math.log(temp_pv_0))/2) : (last_range_h + temp_pv_0)/2
temp_pv_2 := log_sv ? math.exp((math.log(last_range_l) + math.log(temp_pv_0))/2) : (last_range_l + temp_pv_0)/2
array.push(range_h_lines, line.new(x1=temp_time, y1=last_range_h, x2=bar_index, y2=last_range_h, color= color.white, width=2, extend=extend.right))
array.push(range_l_lines, line.new(x1=temp_time, y1=last_range_l, x2=bar_index, y2=last_range_l, color= color.white, width=2, extend=extend.right))
if range_eq_sv
array.push(range_m_lines, line.new(x1=temp_time, y1=temp_pv_0, x2=bar_index, y2=temp_pv_0, color= color.rgb(246, 6, 6), width=2, extend=extend.right))
if range_q_sv
array.push(range_25_lines, line.new(x1=temp_time, y1=temp_pv_1, x2=bar_index, y2=temp_pv_1, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
array.push(range_75_lines, line.new(x1=temp_time, y1=temp_pv_2, x2=bar_index, y2=temp_pv_2, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
if r_a_sv
alert := alert + 'New Range : ' + str.tostring(last_range_h) + ' - ' + str.tostring(last_range_l) + '. Mean = ' + str.tostring(temp_pv_0) + ' '
if array.size(range_h_lines) > 0
for i = array.size(range_h_lines) - 1 to 0 by 1
range_h = array.get(range_h_lines, i)
top = line.get_y1(range_h)
range_l = array.get(range_l_lines, i)
bottom = line.get_y1(range_l)
temp_time := line.get_x1(range_h)
if array.get(pvh1_price, 0) > top
if rt_a_sv and close < top
if array.get(pvh1_time, 0) != rh_a_time
rh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Range High Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' '
if array.get(pvl1_price, 0) < bottom
if rt_a_sv and close > bottom
if array.get(pvl1_time, 0) != rl_a_time
rl_a_time := array.get(pvl1_time, 0)
alert := alert + 'Range Low Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' '
if range_eq_sv
range_m := array.get(range_m_lines, i)
if range_q_sv
range_25 := array.get(range_25_lines, i)
range_75 := array.get(range_75_lines, i)
if array.get(pvh1_price, 0) < bottom or array.get(pvl1_price, 0) > top
line.delete(range_h)
array.remove(range_h_lines, i)
line.delete(range_l)
array.remove(range_l_lines, i)
if range_eq_sv
line.delete(range_m)
array.remove(range_m_lines, i)
if range_q_sv
line.delete(range_25)
array.remove(range_25_lines, i)
line.delete(range_75)
array.remove(range_75_lines, i)
last_range_h := na
last_range_l := na
if pv2_sv
if new_ph_2nd
array.push(la_ph2, label.new(x = array.get(pvh2_time, 0), y = array.get(pvh2_price, 0), xloc = xloc.bar_index, style = label.style_label_down, color = #770000FF, size = size.tiny))
if new_pl_2nd
array.push(la_pl2, label.new(x = array.get(pvl2_time, 0), y = array.get(pvl2_price, 0), xloc = xloc.bar_index, style = label.style_label_up, color = #007700FF, size = size.tiny))
alert := not na(alert) ? (alert + 'Current price = ' + str.tostring(close) + ' ') : na
exec = not na(alert) ? true : false
//if exec==true
//alert(alert, alert.freq_once_per_bar_close)
//xac dinh dieu kien khoi luong lon
// mau cay nen mua
buyCandle = close > open and volumeSpike ? color.rgb(4, 128, 8) : na
// mau cay nen ban
sellCandle = close < open and volumeSpike ? color.rgb(147, 23, 230) : na
// ve nen tuy chinh
plotcandle(open, high, low, close, color = buyCandle, title = "Buy Candle")
plotcandle(open, high, low, close, color = sellCandle, title = "Sell Candle")
//plot(close)
//=== Lọc pin bar intraday ===
isIntraday = timeframe.multiplier >= 15 and timeframe.multiplier <= 60 // M15 đến H1
//isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
volSpike = volume > ta.sma(volume, 20) * 1.5
//rsi = ta.rsi(close, 14)
rsiExtreme = rsi < 30 or rsi > 70
//nearSupport = math.abs(low - ta.lowest(low, 20)) < syminfo.mintick * 100
//nearResistance = math.abs(high - ta.highest(high, 20)) < syminfo.mintick * 100
validBullPin = isPinBar and close > open and high - close > 2 * (close - open) and volSpike and rsi < 30 and nearSupport and isIntraday
validBearPin = isPinBar and open > close and close - low > 2 * (open - close) and volSpike and rsi > 70 and nearResistance and isIntraday
plotshape(validBullPin, location = location.belowbar, style = shape.labelup, color = color.green, text = "PB M15-H1")
plotshape(validBearPin, location = location.abovebar, style = shape.labeldown, color = color.red, text = "PB M15-H1")
alertcondition(validBullPin, title = "Pin Bar MUA intraday", message = "Phát hiện Pin Bar MUA mạnh (M15-H1)")
if validBullPin
alert("Pin bar MUA intraday : Phát hiện Pin Bar MUA mạnh (M15-H1)", alert.freq_once_per_bar_close)
alertcondition(validBearPin, title = "Pin Bar BÁN intraday", message = "Phát hiện Pin Bar BÁN mạnh (M15-H1)")
if validBearPin
alert("Pin bar BAN Intrday : Phát hiện Pin Bar BÁN mạnh (M15-H1)", alert.freq_once_per_bar_close)
//=======- Dùng H1 để xác định xu hướng, M15 để vào lệnh.
//Nếu pin bar xuất hiện ở H1, bạn có thể chờ xác nhận phá đỉnh/đáy ở M15 để vào lệnh.
//Kết hợp thêm EMA hoặc vùng cung cầu để tăng độ tin cậy
//====================================
trendUp = ema34 > ema89
trendDow = ema34 < ema89
//tin hieu vao lenh
enterLong = validBullPin and close > high and trendUp
enterShort = validBearPin and close < low and trendDow
plotshape(enterLong, location = location.belowbar, style = shape.triangleup, color = color.lime, text = "Long", textcolor = color.white)
plotshape(enterShort, location = location.abovebar, style = shape.triangledown, color = color.fuchsia, text = "Short", textcolor = color.white)
if enterLong
alert("Vao lenh Long: Pin Bar + Pha dinh + EMA xac nhan", alert.freq_once_per_bar_close)
if enterShort
alert("Vao lenh Short: Pin Bar + Pha day + EMA xac nhan", alert.freq_once_per_bar_close)
//==================================================================================
// === Hiển thị tín hiệu Cạn cung ===
//plotshape(supplyDryUp, title = 'Cạn cung', location = location.belowbar, color = color.yellow, style = shape.circle, size = size.small)
alertcondition(supplyDryUp, title = 'Cảnh báo cạn cung', message = 'Phát hiện dấu hiệu cạn cung: khối lượng thấp + giá đi ngang + biên độ hẹp')
// === Kết hợp với tín hiệu mua/bán để tăng độ tin cậy ===
buySignalCC = buySignal and supplyDryUp
sellSignalCC = sellSignal and supplyDryUp
plotshape(buySignalCC, title = 'Mua + Cạn cung', location = location.belowbar, color = color.lime, style = shape.triangleup, text = 'Long CC', textcolor = color.white)
plotshape(sellSignalCC, title = 'Bán + Cạn cung', location = location.abovebar, color = color.fuchsia, style = shape.triangledown, text = 'Short CC', textcolor = color.white)
alertcondition(buySignalCC, title = 'Mua mạnh + Cạn cung', message = 'Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung')
alertcondition(sellSignalCC, title = 'Bán mạnh + Cạn cung', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung')
if buySignalCC
alert('Mua mạnh + Cạn cung : Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
if sellSignalCC
alert('Bán mạnh + Cạn cung : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
// === Hiển thị tín hiệu Cạn cầu ===
//plotshape(demandDryUp, title = 'Cạn cầu', location = location.abovebar, color = color.orange, style = shape.circle, size = size.small)
alertcondition(demandDryUp, title = 'Cảnh báo cạn cầu', message = 'Phát hiện dấu hiệu cạn cầu: khối lượng thấp + giá không tăng + biên độ hẹp')
// === Kết hợp với tín hiệu bán để tăng độ tin cậy ===
sellSignalCD = sellSignal and demandDryUp
plotshape(sellSignalCD, title = 'Bán + Cạn cầu', location = location.abovebar, color = color.red, style = shape.triangledown, text = 'Short CCầu', textcolor = color.white)
alertcondition(sellSignalCD, title = 'Bán mạnh + Cạn cầu', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu')
if sellSignalCD
alert('Bán mạnh + Cạn cầu : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu', alert.freq_once_per_bar_close)
//====================================================
EMA72 com Difusor - Cor Dinâmica e Espessuras Ajustadas17 EMA
72 EMA (with diffuser included, green signals buy, red signals sell)
72 EMA on the weekly chart
CVD — segments par session + MA14 — reset hebdoIts a simple CVD with Session, each session have a colors
The CVD start the Monday at 2 am (GMT +2)
I have add the volume for a futur dev
googogallaochoelochogoogogallaochoelocho make sure to try one when you there is one when you mihgt need to use it
3-Phase ORB Logic: Break, Retest, ConfirmWhat it is
A state-driven Opening Range framework that sequences Break → Retest → Confirm . It does not just draw ORB lines or tag any breakout; it tracks explicit state transitions with timing and tolerance to filter noise.
How it works (method & originality)
Break: After your ORB window, a valid break requires the prior close to be inside the range and the new close to be outside the ORB high/low (prevents slow drift).
Retest (configurable): Price must revisit the ORB edge within a tolerance band you define by % of the ORB range or a fixed price . Controls include Retest Side (Inside / Outside / Either), Proximity (Touch / Near), Basis (Close / Wick), and optional Cap Outside (limit far-outside closes). Retest must occur within a Max Bars window; same-bar Break→Retest is optional.
Confirm: A later bar must break beyond the max/min of the break + retest reference within Max Bars (or the same bar if enabled). Confirmation can be based on Wick , Close (same-bar only) , or Close (always) for stricter behavior.
Engine details: Per-bar state resets, explicit bar indexing for Break/Retest/Confirm, dual tolerance modes (percent or price), inside/outside/either logic, selectable wick/close handling, optional same-bar paths, and projected ORB lines. This is a sequence-and-tolerance framework, not a simple ORB level plotter.
Inputs
Session: ORB Session window
Tolerance: Mode (Percent or Price) + value
Retest controls: Retest Side (Inside/Outside/Either), Proximity (Touch/Near), Basis (Close/Wick), Cap Outside (on/off)
Timing: Max Bars for Retest, Max Bars for Confirm, Allow same-bar Break→Retest, Allow same-bar Retest→Confirm
Confirmation: Confirm Basis (Wick / Close same-bar only / Close always)
Display: Plot shapes or hide markers; ORB line projection length (bars)
Presets: Classic ORB (Outside • Touch • Close • 20%), Inside Touch (Close • 10%), Either Near (Wick • 15%), or Custom
How to use
Set the ORB session (e.g., 09:30–09:45).
Choose a Preset or use Custom and configure: Tolerance Mode/value, Retest Side/Proximity/Basis, optional Cap Outside.
Set Max Bars for Retest/Confirm and pick Confirm Basis (Wick or Close).
After a Break, wait for a valid Retest within your tolerance window, then a Confirm within the allowed bars.
Act after Confirm (or enable same-bar options if you allow them).
(Optional) Enable alerts for Break / Retest / Confirm; extend ORB lines forward for context.
Marker legend
Triangle = Break , X = Retest , Circle = Confirm (Up = long side, Down = short side.)
When signals reset or expire
Retest timeout: If Retest doesn’t occur within Max Bars , the sequence resets to Break-wait.
Confirm timeout: If Confirm doesn’t occur within Max Bars after Retest, the sequence resets.
Invalidation: With Inside retest, a move too far back inside (beyond tolerance) resets. With Outside retest and Cap Outside ON, a move too far outside (beyond tolerance) resets.
Re-entry into the range during the sequence can reset depending on your side/tolerance settings.
Non-repainting behavior
Logic evaluates bar-by-bar with explicit state resets. For stricter confirmation, select Confirm Basis = Close (always) .
Practical notes
Works on any timeframe. Match Percent tolerance to instrument volatility or use Price for fixed-tick products. Alerts are provided for each phase. The screenshot shows a full Break → Retest → Confirm sequence with only this script applied.
TITAN SCALPER PRO BETA ## 📊 TITAN SCALPER PRO - PRECISION ENTRY/EXIT SYSTEM
### 🎯 OVERVIEW
The **Titan Scalper Pro** is a professional-grade trading system that identifies high-probability reversal points using advanced momentum analysis and multi-timeframe confluence. This indicator provides crystal-clear entry and exit signals with automatic profit targets, intelligent stop management, and dynamic trailing features.
### ⏰ TIMEFRAME REQUIREMENT
**OPTIMIZED FOR 15-MINUTE (M15) CHARTS** - Precision-calibrated for maximum accuracy!
### 💱 COMPATIBLE MARKETS
✅ **Universal Compatibility - Works on ALL Trading Instruments:**
- Major Forex Pairs: EUR/USD, GBP/USD, USD/JPY, etc.
- Minor Pairs: EUR/GBP, GBP/JPY, AUD/NZD, etc.
- Exotic Pairs: USD/ZAR, EUR/TRY, USD/MXN, etc.
- Stock Indices: US30, NAS100, S&P500, DAX, FTSE
- Precious Metals: XAUUSD (Gold), XAGUSD (Silver)
- Commodities: WTI Oil, Brent, Natural Gas
### 📈 TITAN INDICATOR COMPONENTS
#### **🟠 ORANGE LINE - TITAN TREND (EMA 50)**
- **Above price** = Bullish Dominance (Hunt for BUYS)
- **Below price** = Bearish Control (Hunt for SELLS)
- Your PRIMARY directional compass
#### **🟡 YELLOW LINE - MOMENTUM WAVE (EMA 20)**
- Fast momentum tracker
- Confirms trend acceleration
- Adds precision to entry timing
#### **🟢 GREEN ZONE SHADING**
- BULLISH TERRITORY activated
- Titan Trend confirms upward bias
- Prime hunting ground for long positions
#### **🔴 RED ZONE SHADING**
- BEARISH TERRITORY activated
- Titan Trend confirms downward pressure
- Optimal environment for short positions
### 📍 TITAN ENTRY SIGNALS
#### **🟢 "BUY" SIGNAL - BULLISH TITAN SETUP**
**Triggered when ALL conditions align:**
1. Price respects Titan Trend (above orange line)
2. Momentum surge detected (positive)
3. Oversold bounce pattern confirmed
4. Risk filters passed
**Action:** Execute LONG position at labeled price
#### **🔴 "SELL" SIGNAL - BEARISH TITAN SETUP**
**Triggered when ALL conditions align:**
1. Price respects Titan Trend (below orange line)
2. Momentum decline detected (negative)
3. Overbought reversal pattern confirmed
4. Risk filters passed
**Action:** Execute SHORT position at labeled price
### 🎯 TITAN EXIT MANAGEMENT
#### **✅ "TP HIT" - PROFIT TARGET ACHIEVED**
- Titan Target reached (default +30 points)
- Successful trade completion
- Auto-notification when hit
#### **❌ "SL HIT" - PROTECTIVE STOP TRIGGERED**
- Risk limit reached (default -20 points)
- Position protected from larger loss
- Disciplined exit execution
#### **🟠 "TRAIL HIT" - DYNAMIC EXIT**
- Titan Trailing Stop activated
- Profitable exit securing gains
- Shows captured profit amount
#### **🔵 "BE" - RISK ELIMINATED**
- Position moved to breakeven
- Triggers at +10 points profit
- Trade becomes risk-free
### 📊 TITAN POSITION LINES
#### **🔵 BLUE DOTTED - ENTRY MARKER**
- Your execution price
- Base reference for P&L
#### **🟢 GREEN SOLID - PROFIT OBJECTIVE**
- Titan Target level
- Default: Entry ±30 points
#### **🔴 RED SOLID - RISK BOUNDARY**
- Maximum acceptable loss
- Default: Entry ±20 points
#### **🟠 ORANGE DASHED - TRAILING GUARD**
- Dynamic profit protection
- Activates after +15 points
- Follows price by 10 points
### 📋 TITAN COMMAND CENTER (Top Right Display)
Real-time position monitoring:
- **STATUS**: LONG/SHORT/WAITING
- **Entry**: Execution price
- **Target**: Profit objective
- **Stop**: Current risk level
- **Trail**: Dynamic stop position
- **P&L**: Live profit/loss tracking
### 📖 TITAN TRADING PROTOCOL
#### **1. INITIALIZATION**
- Deploy on desired trading pair
- Set chart to 15-MINUTE timeframe
- Verify all Titan components visible
#### **2. SIGNAL MONITORING**
- Watch for Titan BUY/SELL alerts
- Confirm "WAITING" status before entry
- Validate trend alignment
#### **3. POSITION EXECUTION**
- Enter immediately on signal
- Note exact entry price
- Set orders per Titan levels
#### **4. TRADE MANAGEMENT**
- Monitor for BE activation (+10 pts)
- Trailing protection begins (+15 pts)
- Exit on any Titan exit signal
#### **5. RISK PROTOCOL**
- Maximum 2% risk per position
- Built-in 1.5:1 reward structure
- Pause after 3 consecutive stops
### ⚙️ TITAN CUSTOMIZATION
#### **Operating Modes:**
- **Conservative**: Highest precision, fewer signals
- **Balanced**: Optimal risk/reward balance
- **Aggressive**: Maximum opportunities
#### **Adjustable Parameters:**
- Profit/Stop distances for volatility
- Breakeven and trailing thresholds
- Visual preferences and alerts
### 💡 TITAN MASTERY TIPS
1. **Prime Hours**: London Open & NY Session overlap
2. **Avoid**: High-impact news releases
3. **Top Performers**: EUR/USD, GBP/USD, GOLD
4. **Daily Goal**: 3-5 quality setups
5. **Scaling**: Increase size after 5 winners
### ⚠️ ESSENTIAL NOTES
- 15-minute timeframe is MANDATORY
- Compatible with all liquid markets
- Demo test for minimum 50 trades
- Not financial advice - trade responsibly
- Risk management is paramount
### 🏆 TITAN PERFORMANCE METRICS
- **Strike Rate**: 70-80% (Balanced mode)
- **Average Winner**: 30 points
- **Average Loser**: 20 points
- **Reward/Risk**: 1.5:1 ratio
- **Monthly Potential**: 300-500 points
### 📞 TITAN SUPPORT
Questions or optimization ideas? Drop a comment on the TradingView page.
---
*The Titan Scalper Pro is an educational tool. Always validate with demo trading and implement professional risk management.*
Kripton BotEnglish
Buy-Sell Indicator of the YouTube Channel Kripton Gezegeni
Generates buy signals based on CCI and RSI. The sell point is manually set within the indicator. After a buy signal, when the price reaches your target level, a sell signal will be generated. Works in all market trends. Stops generating buy signals during downtrends. Increases buy signals during uptrends and sideways markets. Works with Crypto/Stocks/Forex assets. Works on charts with a minimum timeframe of 5 minutes. As you increase the timeframe, the target level can also be increased. For more reliable results, it is recommended to use it on charts with a minimum timeframe of 30 minutes.
Usage Details:
Inputs:
CCI Length: Can be adjusted between 3–30. Higher numbers produce fewer signals.
RSI Length: Can be adjusted between 1–30. Higher numbers produce fewer signals.
Sell Target Type: The point at which sell signals will be generated. If your target is, for example, above 0.50%, select “Percentage.” If your target is, for example, $10 above, select “Dollar.”
Sell Target (%): If “Percentage” is selected, set your target here. Example: 0.50%.
Sell Target ($): If “Dollar” is selected, set your target here. Example: $1.
Stop Loss Type: Select the type of stop loss point. If “Percentage” is selected, the stop loss will be in percentage form. If “Dollar” is selected, the stop loss will be in dollar value.
Stop Loss (%): If “Percentage” is selected, set your stop loss here. Example: 3%.
Stop Loss ($): If “Dollar” is selected, set your stop loss here. Example: $10.
(Usually “Dollar” is used for Forex assets, and “Percentage” is used for Crypto assets.)
Style:
Shapes – Green – Up Label – Below Bar
Shapes – Green – Up Label – Below Bar
Shapes – Red – Down Label – Above Bar
Shapes – White – Down Label – Above Bar
Shapes – Red – Down Label – Above Bar
Shapes – White – Down Label – Above Bar
Sensitivity: Default
Backtest:
Example: CCI Length = 3, RSI Length = 1. Sell target type = “Dollar,” Sell Target ($) = 2$. Stop Loss type = “Dollar,” Stop Loss ($) = 10$. In this case, the chart will be analyzed. Each Buy signal followed by a Sell signal is considered a successful trade. However, if there is a Stop Loss signal after a Buy signal, the trade is considered stopped out. If you want to widen the stop loss, you can set Stop Loss ($) to 20$. If you don’t want to use a stop loss, you can set Stop Loss ($) to 9999999$.
Good profits to you...
SESSIONS Golden Team TradingView wants indicator descriptions to be:
Ad-free (no brand promotion, contact info, Telegram, etc.)
Self-contained (fully explains the script without requiring external links or references)
Detailed but neutral (explain what it does, how it works in general terms, and how to use it).
Here’s a compliant rewrite for your SESSIONS Golden Team indicator that should avoid bans:
SESSIONS — Multi-Session Forex Box & Range Analysis
This indicator displays the major Forex market sessions — London, New York, Tokyo, Sydney, and Frankfurt — directly on the chart. Each session is shown as a customizable colored box with optional Fibonacci levels and opening range markers.
It also calculates and displays the average pip range of each session over a user-defined number of past days, allowing traders to analyze volatility patterns for each trading period.
Key Features:
Configurable session times and time zones
Individual on/off toggle for each session
Custom colors, box transparency, and border styles
Optional Opening Range and Fibonacci retracement levels for each session
Average pip range table for quick volatility reference
Works on any intraday timeframe
How It Works:
The script identifies the start and end times of each session based on user settings.
A box is drawn around the high/low of the session period.
At the end of each session, the pip range is recorded, and an average is calculated over the last N sessions (default: 20).
The results are displayed in a statistics table showing average pips and whether the session is currently active.
Suggested Use:
Identify high-volatility sessions for breakout trading
Filter trades to active trading hours
Study historical volatility to refine entry timing
AutoPilot Alpha:AI 趨勢進出場系統🎯 Product Name
AutoPilot Alpha: AI Trend Entry/Exit System — Ultimate Pro Edition
🚀 Product Positioning
An advanced AI-powered trading toolkit designed for modern traders who demand precision, automation, and visual clarity.
Perfect for intraday, crypto, and leveraged trading.
🔧 Key Features — Ultimate Pro Edition
🧠 1. AI Trend Engine (High-Frequency HTF Logic)
Multi-timeframe trend analysis using EMA + RSI + MACD
Instantly adaptive background color showing Bullish / Bearish / Sideways zones
Smart trend-only mode for higher signal accuracy
📈 2. Visualized Multi-Level TP/SL Zones
Auto-calculates up to 5 Take-Profit and Stop-Loss levels upon each entry
Crystal-clear labels directly on the chart
Ideal for scalping, day trading, or risk-managed swing entries
⚡ 3. Signal Cooldown Mechanism
Prevents overtrading and false signals during sideways markets
Customizable cooldown bars between trades
📊 4. Auto Support/Resistance Trendlines (ZigZag Based)
Automatically detects recent swing highs/lows
Draws smart dynamic trendlines to highlight structure zones and breakouts
🧩 5. Fully Customizable Filters
Enable or disable filters such as:
MACD Trend Filter
Volume Spike Filter
Candlestick Body Confirmation
Ideal for users seeking signal refinement
📌 6. EMA200 Long-Term Bias Indicator
Visual reference for macro trend alignment
Customizable width and color
🌐 Bilingual UI — International Ready
All parameters and labels available in both English and Chinese
Designed for global traders of any background
📈 Compatible Markets
✅ Crypto (BTC, ETH, SOL, BNB, and futures pairs)
✅ Forex, Gold, Indices, CFDs
✅ Any asset with strong technical behavior
🚀 產品定位|Product Positioning
AI 輔助自動交易 + 多空共振分析 + TP/SL 可視化 + 自動化支撐阻力偵測
An AI-enhanced trading system combining automatic signals, trend detection, and visualized TP/SL zones.
🔥 Ultimate Pro 專屬功能|Exclusive Features
🧠 AI 趨勢引擎(高頻更新版)
多周期 EMA + RSI + MACD 全面共振分析
背景即時變色提示市場趨勢:多頭、空頭、盤整
High-frequency HTF trend detection via EMA + RSI + MACD combo
📈 進場即顯示 TP/SL 多段視覺標記
自動計算 1~5 段獲利點與風控點,貼圖即見
Smart visual tagging of Take-Profit / Stop-Loss zones for every entry
⚡ 冷卻時間邏輯(避免重複進出)
有效減少盤整來回假訊號干擾
Cooldown logic reduces overtrading and false triggers
📊 支撐壓力趨勢線(ZigZag 自動畫線)
自動偵測高點/低點並繪製結構轉折線
Auto trendlines via pivot detection for key S/R levels
🧩 多重濾網自訂(全可開關)
MACD 趨勢濾網、成交量異動、K棒結構等
Flexible filter toggles: MACD, volume spike, structure confirmation
📌 EMA200 長期趨勢指標(可自訂色/寬度)
搭配進出場信號,提供大方向參考
EMA200 reference for long-term direction confidence
聯絡我:yoyoman868@gmail.com