EMA //@version=5
indicator("Shiba Inu EMA Crossover Alerts", overlay=true)
// Input Parameters
shortLength = input(9, title="Short EMA Length")
longLength = input(21, title="Long EMA Length")
// EMA Calculations
shortEMA = ta.ema(close, shortLength)
longEMA = ta.ema(close, longLength)
// Crossover Conditions
bullishCross = ta.crossover(shortEMA, longEMA)
bearishCross = ta.crossunder(shortEMA, longEMA)
// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA", linewidth=2)
plot(longEMA, color=color.red, title="Long EMA", linewidth=2)
// Buy and Sell Signals
plotshape(series=bullishCross, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=bearishCross, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")
// Alerts
alertcondition(bullishCross, title="Buy Alert", message="Shiba Inu Buy Signal: Short EMA crossed above Long EMA!")
alertcondition(bearishCross, title="Sell Alert", message="Shiba Inu Sell Signal: Short EMA crossed below Long EMA!")
Bandes et canaux
Auto Trendline Support (ATS) - 10 PeriodPeriod 10 highest High and lowest low as Resistance and Support
Baby Shark - BB Fakeout DetectorDetecta Rompimentos rápidos em Bandas de Bollinger.
Os rompimentos das bandas os quais ocorrem com duas barras apenas, tem uma probabilidade bem mais alta de reversão.
Sugestão: Use quando o mercado não estiver em tendência forte.
Дивергенции Как этот скрипт будет отображаться на графике
1. Медвежьи дивергенции:
• Когда цена достигает нового максимума (обозначается стрелкой вниз с красным цветом), но RSI не подтверждает это движение (падает), вы увидите красную метку “🔻” над соответствующей свечой.
2. Бычьи дивергенции:
• Когда цена достигает нового минимума (обозначается стрелкой вверх с зеленым цветом), но RSI не подтверждает это движение (растет), вы увидите зеленую метку “🔺” под соответствующей свечой.
3. RSI:
• Индикатор RSI будет отображаться в отдельной панели под основным графиком. На этой панели будут горизонтальные линии для уровней перекупленности (70) и перепроданности (30).
Forex SessionsThis indicator displays the main Forex trading sessions on your chart, highlighting the New York, London, Tokyo, and Sydney sessions with custom background colors. You can toggle the visibility of each session to suit your strategy. Perfect for traders looking to optimize their analysis and time their trades according to the market’s peak liquidity hours. Enhance your decision-making with this visual tool!
AI - Jack & EgiScopri un approccio innovativo al trading automatizzato su BTCUSD. La nostra strategia sfrutta una logica proprietaria e algoritmi dinamici per identificare in tempo reale le opportunità di ingresso ottimali, bilanciando il potenziale profitto con una gestione del rischio sofisticata tramite livelli adattivi di stop loss e take profit. Progettata per operare in maniera autonoma, questa soluzione offre un supporto completo per il trading intraday, consentendoti di cogliere le opportunità del mercato senza la necessità di interventi manuali costanti.
Ideale per trader che cercano un sistema all'avanguardia e pronto a rispondere alle sfide di un mercato in continua evoluzione.
Indicator for BUY/SELL with EMA,RSI,ADX With TableHello Traders,
This Indicator has many parameters like EMA, RSI, ATR, ADR, VOLUME AND DI+DI-.
Based on the price traded above / below candle color changes itself, which is also customizable and you can use 5 separate EMA's which you can change period, source also.
This Indicator Shows Buy Entry When the price traded above,
RSI 50
DI+ 20
EMA 1 (Which you can alter like 21,50,200)
And for sell entry is vice versa , other wise no signal
And all the above Period are customizable....
Happy Trading.
EMA +vegas The Vegas tunnel and EMA are combined for trend judgment, while EMA12 is used to filter out false breakouts.
4Hour Zone SeparatorThis custom TradingView indicator draws vertical lines on your chart to visually separate the 4-hour trading zones within a single trading day. The indicator helps traders identify key time intervals throughout the day for better market analysis and decision-making.
Features:
• Time-Based Zones: The indicator divides the day into six distinct 4-hour periods, starting from midnight (00:00) and continuing every 4 hours. Each zone is marked by a vertical line on the chart.
• User Customization: You can toggle the visibility of the lines for each 4-hour period (00:00, 04:00, 08:00, 12:00, 16:00, 20:00) based on your preference. This allows you to focus on specific zones that matter most for your analysis.
• Line Styling Options: Choose from three different line styles — Solid, Dashed, or Dotted — and adjust the thickness to your desired preference.
• Dynamic Time Adjustment: The indicator automatically adjusts for the time zone, ensuring that the 00:00 timestamp reflects the correct start of the day based on your chart’s time zone.
How It Works:
1. The indicator starts by calculating the beginning of the day at 00:00, then it sequentially places vertical lines every 4 hours.
2. Each line is color-coded for easy identification, and the lines stretch from the highest to the lowest point on the chart for that range.
3. The lines are drawn only when the chart enters a new 4-hour zone.
This tool is especially useful for day traders who want to track price action during specific times of the day and make informed decisions based on market behavior within each 4-hour period.
Liquidity crypt
//@version=5
indicator(" 💧TFO_LVL_OI_LIQ 💧 ", " 💧TFO_LVL_OI_LIQ 💧", true, max_bars_back=5000, max_lines_count = 500, max_polylines_count = 100, max_labels_count = 500, max_boxes_count = 500)
string userSymbol = 'BINANCE' + ":" + string(syminfo.basecurrency) + 'USDT.P'
string Formula = str.format("{0}_OI", userSymbol)
OI = request.security(Formula, timeframe.period, close)
OI_delta = OI - nz(OI )
maLength = input(60, title="MA Length")
numOfLines = 500
OI_delta_MA = ta.sma(OI_delta, maLength)
OI_delta_abs = math.abs(OI_delta)
OI_delta_abs_MA = ta.sma(OI_delta_abs, maLength)
h3 = input(3.0, title="Large Liquidation Level")
h2 = input(2.0, title="Middle Liquidation Level")
h1 = input(1.2, title="Small Liquidation Level")
OI_delta_open_h3 = (OI_delta_abs >= OI_delta_abs_MA * h3) and OI_delta > 0
OI_delta_open_h2 = (OI_delta_abs >= OI_delta_abs_MA * h2 and OI_delta_abs < OI_delta_abs_MA * h3) and OI_delta > 0
OI_delta_open_h1 = (OI_delta_abs >= OI_delta_abs_MA * h1 and OI_delta_abs < OI_delta_abs_MA * h2) and OI_delta > 0
kline_price = (open + close + high + low) / 4
showLine = input(true, title="Show lines")
showHist = input(true, title="Show histgram")
showLocalOnly = input(true, title="Only show local liquidation levels")
i_5xColor = input.color(#626367a2, '5x Leverage color', group='5x Leverage')
i_10xColor = input.color(#017cff7a, '10x Leverage color', group='10x Leverage')
i_25xColor = input.color(#0dff0064, '25x Leverage color', group='25x Leverage')
i_50xColor = input.color(#f0a02966, '50x Leverage color', group='50x Leverage')
i_100xColor = input.color(color.rgb(218, 55, 101, 44), '100x Leverage color', group='100x Leverage')
var h3Array = array.new_line()
var h2Array = array.new_line()
var h1Array = array.new_line()
// histgram
barColor = input(color.rgb(0, 55, 254, 4), "Bar Color")
numOfBars = input(120, 'Number of bars to lookback')
distLastCandle = input(5, 'Histgram distance from last candle')
local_high = ta.highest(high, numOfBars)
local_low = ta.lowest(low, numOfBars)
rangeHigh = local_high * (1 + local_high / local_low / 10)
rangeLow = local_low * (1 - local_high / local_low / 10)
rangeHeight = rangeHigh - rangeLow
numOfHistograms = input(120, 'Number of histograms (<=120)')
histogramHeight = rangeHeight / numOfHistograms
histogramLowList = array.new_float(numOfHistograms, na)
histogramHighList = array.new_float(numOfHistograms, na)
histogramData = array.new_float()
histogramtargetList = array.new_float(numOfHistograms, 0.0)
var Bars = array.new_box(numOfHistograms, na)
// Clean up drawings every tick
for i=0 to numOfHistograms - 1
box.delete(array.get(Bars, i))
f_drawLine(_x1, _x2, _yValue, _lineColor, _style, _width) =>
line.new(x1=_x1, y1=_yValue, x2=_x2, y2=_yValue, color=_lineColor, style=_style, width=_width)
f_extendArray(_lineArray, _extendLines) =>
if array.size(_lineArray) > 0
for _i = array.size(_lineArray) - 1 to 0 by 1
x2 = line.get_x2(array.get(_lineArray, _i))
yValue = line.get_y1(array.get(_lineArray, _i))
if _extendLines or bar_index - 1 == x2 - 1 and not(high > yValue and low < yValue)
line.set_x2(array.get(_lineArray, _i), bar_index + 1)
if bar_index == last_bar_index
array.push(histogramData, yValue)
f_calculateLeverage100x(_pivotValue, _shortSell) =>
_shortSell ? _pivotValue * (1 - 0.01) : _pivotValue * (1 + 0.01)
f_calculateLeverage50x( _pivotValue, _shortSell) =>
_shortSell ? _pivotValue * (1 - 0.02) : _pivotValue * (1 + 0.02)
f_calculateLeverage25x(_pivotValue, _shortSell) =>
_shortSell ? _pivotValue * (1 - 0.04) : _pivotValue * (1 + 0.04)
f_calculateLeverage10x(_pivotValue, _shortSell) =>
_shortSell ? _pivotValue * (1 - 0.1) : _pivotValue * (1 + 0.1)
f_calculateLeverage5x(_pivotValue, _shortSell) =>
_shortSell ? _pivotValue * (1 - 0.2) : _pivotValue * (1 + 0.2)
float yValue = na
int x1 = na
int x2 = na
line l = na
x1 := bar_index
x2 := bar_index
f_append(Array, l) =>
if array.size(Array) == numOfLines
line.delete(array.shift(Array))
array.push(Array, l)
if OI_delta_open_h3
yValue := f_calculateLeverage5x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_5xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage5x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_5xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage10x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_10xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage10x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_10xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage25x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage25x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage50x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage50x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage100x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_solid, 1)
f_append(h3Array, l)
yValue := f_calculateLeverage100x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_solid, 1)
f_append(h3Array, l)
if OI_delta_open_h2
yValue := f_calculateLeverage10x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_10xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage10x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_10xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage25x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage25x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage50x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage50x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage100x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_solid, 1)
f_append(h2Array, l)
yValue := f_calculateLeverage100x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_solid, 1)
f_append(h2Array, l)
if OI_delta_open_h1
yValue := f_calculateLeverage25x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_dotted, 1)
f_append(h1Array, l)
yValue := f_calculateLeverage25x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_25xColor, line.style_dotted, 1)
f_append(h1Array, l)
yValue := f_calculateLeverage50x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_dotted, 1)
f_append(h1Array, l)
yValue := f_calculateLeverage50x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_50xColor, line.style_dotted, 1)
f_append(h1Array, l)
yValue := f_calculateLeverage100x(kline_price, true)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_dotted, 1)
f_append(h1Array, l)
yValue := f_calculateLeverage100x(kline_price, false)
l := f_drawLine(x1, x2, yValue, i_100xColor, line.style_dotted, 1)
f_append(h1Array, l)
f_extendArray(h3Array, false)
f_extendArray(h2Array, false)
f_extendArray(h1Array, false)
// draw hist
if barstate.islast and showHist
// Define lows and highs of the histograms
for i = 0 to numOfHistograms - 1
histogramLow = rangeLow + histogramHeight * i
histogramHigh = rangeLow + histogramHeight * (i + 1)
array.set(histogramLowList, i, histogramLow)
array.set(histogramHighList, i, histogramHigh)
for i = 0 to array.size(histogramData) - 1
y = array.get(histogramData, i)
for j = 0 to numOfHistograms - 1
histogramLow = array.get(histogramLowList, j)
histogramHigh = array.get(histogramHighList, j)
if y >= histogramLow and y <= histogramHigh
array.set(histogramtargetList, j, array.get(histogramtargetList, j) + 1)
for i = 0 to numOfHistograms - 1
histogramLow = array.get(histogramLowList, i)
histogramHigh = array.get(histogramHighList, i)
histogramtarget = array.get(histogramtargetList, i)
histogramWidth = math.floor((histogramtarget + 0.49) * 2)
// Draw histograms
array.set(Bars, i, box.new(left=bar_index + distLastCandle, top=histogramHigh, right=bar_index + distLastCandle + histogramWidth, bottom=histogramLow, bgcolor=barColor, border_color=barColor))
if barstate.islast and not showLine
for i=0 to array.size(h3Array) - 1
line.delete(array.get(h3Array, i))
for i=0 to array.size(h2Array) - 1
line.delete(array.get(h2Array, i))
for i=0 to array.size(h1Array) - 1
line.delete(array.get(h1Array, i))
else if barstate.islast and showLocalOnly
for i=0 to array.size(h3Array) - 1
if line.get_y1(array.get(h3Array, i)) < rangeLow or line.get_y1(array.get(h3Array, i)) > rangeHigh
line.delete(array.get(h3Array, i))
for i=0 to array.size(h2Array) - 1
if line.get_y1(array.get(h2Array, i)) < rangeLow or line.get_y1(array.get(h2Array, i)) > rangeHigh
line.delete(array.get(h2Array, i))
for i=0 to array.size(h1Array) - 1
if line.get_y1(array.get(h1Array, i)) < rangeLow or line.get_y1(array.get(h1Array, i)) > rangeHigh
line.delete(array.get(h1Array, i))
// Volume Profile Inputs
var g_VP = "Volume Profile"
rows = input.int(200, "Rows", tooltip = "The number of price levels/rows that will be used to approximate the cumulative volume profile", group = g_VP)
tf = input.timeframe("D", "Profile Timeframe", tooltip = "The aggregate timeframe that the volume profile represents", group = g_VP)
ltf = input.timeframe("1", "Resolution Timeframe", tooltip = "The timeframe whose price data will be used to build the volume profile", group = g_VP)
extend = input.int(100, "Profile Extend %", 0, 100, tooltip = "How much the volume profile should extend to the next session", group = g_VP)
vp_color = input.color(color.new(color.blue, 70), "Profile Color", tooltip = "The color of the volume profile", group = g_VP)
// Volume Point of Control Inputs
var g_VPOC = "Volume Point of Control"
show_vpoc = input.bool(true, "Show VPOC", inline = "VPOC", tooltip = "Whether to show the volume point of control (VPOC), or the level with the largest volume in a given volume profile", group = g_VPOC)
vpoc_color = input.color(color.yellow, "", inline = "VPOC", group = g_VPOC)
ext_vpoc = input.bool(true, "Extend Last N VPOCs", inline = "EXT", tooltip = "Whether to extend the last N number of VPOCs to the right of the chart", group = g_VPOC)
ext_n_vpoc = input.int(5, "", 0, 100, inline = "EXT", group = g_VPOC)
vpoc_label_above = input.timeframe("D", "Show Labels Above", tooltip = "With extend last N VPOCs turned on, labels displaying the date of said VPOCs will be shown when the profile timeframe is greater than or equal to this", group = g_VPOC)
vpoc_label_size = input.string('Normal', "Label Size", options = , tooltip = "The size of VPOC date labels", group = g_VPOC)
vpoc_width = input.int(2, "Line Width", tooltip = "The width of VPOC lines", group = g_VPOC)
// High Volume Nodes Inputs
var g_HVN = "High Volume Nodes"
show_hvn = input.bool(true, "Show Previous HVNs", inline = "HVN", tooltip = "Whether to show high volume nodes (HVNs) from the previous session. Using the previous session's close, HVNs above this price will use the first color, and HVNs below this price will use the second color", group = g_HVN)
hvn_color_bull = input.color(color.new(color.teal, 70), "", inline = "HVN", group = g_HVN)
hvn_color_bear = input.color(color.new(color.red, 70), "", inline = "HVN", group = g_HVN)
hvn_strength = input.int(10, "HVN Strength", tooltip = "HVNs are validated when a given level in the volume profile contains more volume than this many rows both above and below it", group = g_HVN)
hvn_type = input.string("Areas", "HVN Type", options = , tooltip = "Whether to display HVNs as levels (lines) or areas (boxes). Levels use a solid line to denote the prior session's VPOC, and dotted lines for all other HVNs", group = g_HVN)
hvn_width = input.int(1, "Line Width", tooltip = "The width of HVN lines, if the HVN type is selected as levels", group = g_HVN)
// Bubbles AcadAlgo Inputs
showBubbles = input.bool(true, "Display Bubbles", group="Bubbles", inline="1")
useHeatMap = input.bool(false, "Enable HeatMap", group="Bubbles")
showLevels = input.bool(false, "Highlight Significant Levels", group="Volume Levels")
levelsCount = input.int(10, "Number of Levels", group="Volume Levels")
mainColor = input.color(color.green, "Main Color", group="Colors")
heatMapColor1 = input.color(color.new(color.aqua, 50), "HeatMap Color 1", group="Colors")
heatMapColor2 = input.color(color.new(color.green, 50), "HeatMap Color 2", group="Colors")
heatMapColor3 = input.color(color.new(color.yellow, 50), "HeatMap Color 3", group="Colors")
heatMapColor4 = input.color(color.new(color.orange, 30), "HeatMap Color 4", group="Colors")
heatMapColor5 = input.color(#d32626, "HeatMap Color 5", group="Colors")
calculateInDollars = input.bool(false, "Calculate Volume in Dollars", group="Volume Options")
volumeFilterOn = input.bool(true, "Enable Volume Filter", group="Volume Filters") // Toggle button for volume filter
minVolumeDollars = input.float(100, "Minimum Volume ($)", minval=1, group="Volume Filters")
maxVolumeDollars = input.float(1000000000000, "Maximum Volume ($)", minval=1, group="Volume Filters")
// SPL Level Inputs
swingSizeR = input.int(10, 'Bars Right-Left', inline='brl')
swingSizeL = input.int(15, '-', inline='brl')
showBoxes = input.bool(true, 'Show Boxes ', inline='aa')
showSwingLines = input.bool(true, 'Show Lines', inline='aa')
showBubblesSPL = input.bool(true, 'Show Labels ', inline='bb')
showVol = input.bool(false, 'Show Volume', inline='bb')
showOId = input.bool(false, 'Show OI Δ ', inline='cc')
extendtilfilled = input.bool(true, 'Extend Until Fill', inline='cc')
hidefilled = input.bool(false, 'Hide Filled', group='Conditions')
voltresh = input.int(0, 'Volume >', group='Conditions')
oitresh = input.int(0, 'OI Δ (abs.) >', group='Conditions')
pnoid = input.string('/', 'Only Swings With', options= , group='Conditions')
showhighs = input.bool(true, '', inline='sh', group='Appearance')
showlows = input.bool(true, '', inline='sl', group='Appearance')
sellcol = input.color(#aa2430, 'Lows (Line - Label - Box)', inline='sh', group='Appearance')
buycol = input.color(#66bb6a, 'Highs (Line - Label - Box)', inline='sl', group='Appearance')
sellcolB = input.color(#aa2430, '', inline='sh', group='Appearance')
buycolB = input.color(#66bb6a, '', inline='sl', group='Appearance')
sellboxCol = input.color(#80192231, '', inline='sh', group='Appearance')
buyboxCol = input.color(#66bb6a31, '', inline='sl', group='Appearance')
lineStyle = input.string('Dotted', 'Line Style + Width', , inline='l', group='Appearance')
lineWid = input.int(1, '', inline='l', group='Appearance')
boxWid = input.float(0.7, 'Box Width + Type ', step=0.1, inline='xx', group='Appearance')
boxStyle = input.string('TYPE 1', '', options= , inline='xx', group='Appearance')
labelsize = input.string('Size: Tiny', 'Text Style ', options= , inline='txt', group='Appearance' )
texthalign = input.string('Right','', options= , inline='txt', group='Appearance')
lookback = input.bool(false, '', inline='lb')
daysBack = input.float(150, 'Lookback (D) ',inline='lb')
binance = input.bool(true, 'Binance USDT.P', inline='src', group='Open Interest')
binance2 = input.bool(true, 'Binance USD.P', inline='src', group='Open Interest')
binance3 = input.bool(true, 'Binance BUSD.P', inline='src2', group='Open Interest')
bitmex = input.bool(true, 'BitMEX USD.P', inline='src2', group='Open Interest')
bitmex2 = input.bool(true, 'BitMEX USDT.P ', inline='src3', group='Open Interest')
kraken = input.bool(true, 'Kraken USD.P', inline='src3', group='Open Interest')
// Calculating inRange, used for lookback in days
MSPD = 24 * 60 * 60 * 1000
lastBarDate = timestamp(year(timenow), month(timenow), dayofmonth(timenow), hour(timenow), minute(timenow), second(timenow))
thisBarDate = timestamp(year, month, dayofmonth, hour, minute, second)
daysLeft = math.abs(math.floor((lastBarDate - thisBarDate) / MSPD))
inRange = lookback ? (daysLeft < daysBack) : true
// Volume Profile Variables
var vpoc = array.new_line()
var dates = array.new_label()
var values = array.new_float()
var x_vol = array.new_int()
var y_vol = array.new_float()
var hvn_lines = array.new_line()
var hvn_boxes = array.new_box()
var hvn_Ly = array.new_float()
var hvn_By = array.new_float()
var PLA = array.new()
var polyline PL = na
var line temp_vpoc = na
var int lb_idx = na
var int lb_time = na
// SPL Level Variables
int prevHighIndex= na, int prevLowIndex= na, bool highActive= false, bool lowActive= false, bool h= false, bool lv= false
pivHi = ta.pivothigh(high, swingSizeL, swingSizeR)
pivLo = ta.pivotlow(low, swingSizeL, swingSizeR)
if not na(pivHi)
h := true
prevHighIndex := bar_index - swingSizeR
if not na(pivLo)
lv := true
prevLowIndex := bar_index - swingSizeR
// Getting OI data
mex = syminfo.basecurrency == 'BTC' ? 'XBT' : string(syminfo.basecurrency)
oid1 = nz(request.security('BINANCE:' + string(syminfo.basecurrency) + 'USDT.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
oid2 = nz(request.security('BINANCE:' + string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
oid3 = nz(request.security('BINANCE:' + string(syminfo.basecurrency) + 'BUSD.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
oid4 = nz(request.security('BITMEX:' + mex + 'USD.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
oid5 = nz(request.security('BITMEX:' + mex + 'USDT.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
oid6 = nz(request.security('KRAKEN:' + string(syminfo.basecurrency) + 'USD.P_OI', timeframe.period, close - close , ignore_invalid_symbol=true), 0)
deltaOI = (binance ? nz(oid1, 0) : 0) + (binance2 ? nz(oid2, 0) / close : 0) + (binance3 ? nz(oid3, 0) : 0) + (bitmex ? nz(oid4, 0) / close : 0) + (bitmex2 ? nz(oid5, 0) / close : 0) + (kraken ? nz(oid6, 0) / close : 0)
// Volume, OI, box width
vol = volume
oitreshcond = oitresh > 0 ? math.abs(deltaOI ) > oitresh : true
voltreshcond = voltresh > 0 ? vol > voltresh : true
oicond = pnoid == 'Positive OI Delta' ? deltaOI > 0 : pnoid == 'Negative OI Delta' ? deltaOI < 0 : true
CLEAR = color.rgb(0, 0, 0, 100)
boxWid1 = 0.001 * boxWid
// Styles
boxStyle(x) =>
switch x
'TYPE 1' => h ? pivHi : lv ? pivLo : na
'TYPE 2' => h ? pivHi * (1 - boxWid1) : lv ? pivLo * (1 + boxWid1) : na
lineStyle(x) =>
switch x
'Solid' => line.style_solid
'Dashed' => line.style_dashed
'Dotted' => line.style_dotted
switchtextsize(textsize) =>
switch textsize
'Size: Normal' => size.normal
'Size: Small' => size.small
'Size: Tiny' => size.tiny
'Size: Auto' => size.auto
'Size: Large' => size.large
switchhalign(texthalign) =>
switch texthalign
'Middle' => text.align_center
'Right' => text.align_right
'Left' => text.align_left
// Swing level labels
var levelBoxes = array.new_box()
var levelLines = array.new_line()
if h and inRange and showhighs and oitreshcond and voltreshcond and oicond
hBox = box.new(prevHighIndex, pivHi * (1 + boxWid1), bar_index, boxStyle(boxStyle), border_color=na, bgcolor=showBoxes ? sellboxCol : CLEAR, text=(showVol ? str.tostring(vol, format.volume) : na) + ' ' + (showOId ? str.tostring(deltaOI , format.volume) : ''), text_halign=switchhalign(texthalign), text_valign=text.align_center, text_color=chart.fg_color, text_size=switchtextsize(labelsize))
hLine = line.new(prevHighIndex, pivHi, bar_index, pivHi, color=showSwingLines ? sellcol : CLEAR, style=lineStyle(lineStyle), width=lineWid)
array.push(levelBoxes, hBox)
array.push(levelLines, hLine)
if lv and inRange and showlows and oitreshcond and voltreshcond and oicond
lBox = box.new(prevLowIndex, pivLo * (1 - boxWid1), bar_index, boxStyle(boxStyle), border_color=na, bgcolor=showBoxes ? buyboxCol : CLEAR, text=(showVol ? str.tostring(vol, format.volume) : na) + ' ' + (showOId ? str.tostring(deltaOI , format.volume) : ''), text_halign=switchhalign(texthalign), text_valign=text.align_center, text_color=chart.fg_color, text_size=switchtextsize(labelsize))
lLine = line.new(prevLowIndex, pivLo, bar_index, pivLo, color=showSwingLines ? buycol : CLEAR, style=lineStyle(lineStyle), width=lineWid)
array.push(levelBoxes, lBox)
array.push(levelLines, lLine)
// Looping over the full array of lines and updating them, and deleting them if they have been touched
size = array.size(levelBoxes)
if size > 0
for i = 0 to size - 1
j = size - 1 - i
box = array.get(levelBoxes, j)
line = array.get(levelLines, j)
level = line.get_y2(line)
filled = (high >= level and low <= level)
if filled and extendtilfilled and not hidefilled
array.remove(levelLines, j)
array.remove(levelBoxes, j)
continue
box.set_right(box, bar_index + 1)
line.set_x2(line, bar_index + 1)
if filled and hidefilled
array.remove(levelLines, j)
array.remove(levelBoxes, j)
line.delete(line)
box.delete(box)
if not filled and not extendtilfilled
array.remove(levelLines, j)
array.remove(levelBoxes, j)
continue
// Deleting the oldest lines if array is too big
if array.size(levelBoxes) >= 500
int i = 0
while array.size(levelBoxes) >= 500
box = array.get(levelBoxes, i)
line = array.get(levelLines, i)
box.delete(box)
line.delete(line)
array.remove(levelBoxes, i)
array.remove(levelLines, i)
i += 1
// Plotting circle labels for SPL
plotshape(showhighs and showBubblesSPL and h and oitreshcond and voltreshcond and oicond ? high : na, style=shape.triangleup, location=location.absolute, offset=-swingSizeR, color=sellcolB, size=size.tiny)
plotshape(showlows and showBubblesSPL and lv and oitreshcond and voltreshcond and oicond ? low : na, style=shape.triangledown, location=location.absolute, offset=-swingSizeR, color=buycolB, size=size.tiny)
// Calculations for Bubbles AcadAlgo
volumeData = volume
priceSource = hl2
volumeInDollars = volumeData * close
selectedVolume = calculateInDollars ? volumeInDollars : volumeData
normalizedVolume = selectedVolume / ta.stdev(selectedVolume, 200)
gradientColor = not useHeatMap
? color.from_gradient(
normalizedVolume, 0, 8,
chart.bg_color == color.white ? color.new(mainColor, 100) : color.rgb(18, 34, 18, 50),
mainColor
)
:
(
normalizedVolume < 1
? color.from_gradient(normalizedVolume, 0, 1, heatMapColor1, heatMapColor2)
: normalizedVolume >= 1 and normalizedVolume < 4
? color.from_gradient(normalizedVolume, 1, 4, heatMapColor3, heatMapColor4)
: normalizedVolume >= 4
? color.from_gradient(normalizedVolume, 4, 8, heatMapColor4, heatMapColor5) : na
)
volumeCondition = volumeFilterOn ? (selectedVolume >= minVolumeDollars and selectedVolume < maxVolumeDollars) : true
conditionTiny = volumeCondition and normalizedVolume > 0 and normalizedVolume < 1 and showBubbles
conditionSmall = volumeCondition and normalizedVolume >= 1 and normalizedVolume < 2 and showBubbles
conditionNormal= volumeCondition and normalizedVolume >= 2 and normalizedVolume < 3 and showBubbles
conditionLarge = volumeCondition and normalizedVolume >= 3 and normalizedVolume < 4 and showBubbles
conditionHuge = volumeCondition and normalizedVolume >= 4 and showBubbles
// Plotting for Bubbles AcadAlgo
if conditionHuge and (showLevels or showBubbles)
label.new(showBubbles ? bar_index : last_bar_index, priceSource, str.tostring(selectedVolume, format.volume), xloc.bar_index, yloc.price,
#00000000, showBubbles ? label.style_label_center : label.style_label_left, chart.fg_color)
if conditionHuge and showLevels
line.new(bar_index, priceSource, last_bar_index, priceSource, xloc.bar_index, extend.none, gradientColor, width=2)
// figure
plotshape(conditionTiny ? priceSource : na, "", shape.square, location.absolute, gradientColor, 0, "", na, size=size.tiny)
plotshape(conditionSmall ? priceSource : na, "", shape.circle, location.absolute, gradientColor, 0, "", na, size=size.small)
plotshape(conditionNormal? priceSource : na, "", shape.circle, location.absolute, gradientColor, 0, "", na, size=size.normal)
plotshape(conditionLarge ? priceSource : na, "", shape.square, location.absolute, gradientColor, 0, "", na, size=size.normal)
plotshape(conditionHuge ? priceSource : na, "", shape.diamond, location.absolute, gradientColor, 0, "", na, size=size.huge)
// Manage the number of lines and labels on the chart
a_allLines = line.all
if array.size(a_allLines) > levelsCount
line.delete(array.shift(a_allLines))
a_allLabels = label.all
if array.size(a_allLabels) > levelsCount and not showBubbles
label.delete(array.shift(a_allLabels))
// Warning if no Volume data Provided
if ta.cum(volume) <= 0 and barstate.islast
label.new(bar_index, hl2, "No Volume Data Available Use Another Symbol",
style=label.style_label_left,
textcolor=chart.fg_color)
// Volume Profile Functions
get_label_size(x) =>
result = switch x
'Auto' => size.auto
'Tiny' => size.tiny
'Small' => size.small
'Normal' => size.normal
'Large' => size.large
'Huge' => size.huge
get_hvn() =>
if values.size() > hvn_strength
for i = 0 to values.size() - 1
start = values.get(i)
valid = true
for j = -hvn_strength to hvn_strength
k = i + j
if k < 0 or k > values.size() - 1
continue
else
if j != 0 and values.get(k) > start
valid := false
break
if valid
idx = values.indexof(start)
if idx != -1
y1 = y_vol.get(idx)
y2 = y_vol.get(idx)
val = y_vol.get(idx)
if i < values.size() - 1
for m = i to values.size() - 2
if values.get(m + 1) > values.get(m)
y1 := y_vol.get(m)
break
if i > 0
for m = i to 1
if values.get(m - 1) > values.get(m)
y2 := y_vol.get(m)
break
new_color = close > math.avg(y1, y2) ? hvn_color_bull : hvn_color_bear
if hvn_type == "Levels"
if hvn_Ly.indexof(val) == -1
hvn_Ly.unshift(val)
hvn_lines.unshift(line.new(time, val, time + timeframe.in_seconds(tf)*1000, val, xloc = xloc.bar_time, color = color.new(new_color, 0), style = start == values.max() ? line.style_solid : line.style_dotted, width = hvn_width))
else
if hvn_By.indexof(y1) == -1
hvn_By.unshift(y1)
hvn_boxes.unshift(box.new(time, y1, time + timeframe.in_seconds(tf)*1000, y2, xloc = xloc.bar_time, bgcolor = new_color, border_color = na))
ltf := timeframe.in_seconds(ltf) <= timeframe.in_seconds() ? ltf : ""
= request.security_lower_tf(syminfo.tickerid, ltf, )
if not na(lb_idx)
lb = bar_index - lb_idx > 0 ? (bar_index - lb_idx) : 1
y_max = ta.highest(high , lb)
y_min = ta.lowest(low , lb)
if timeframe.change(tf) or barstate.islast
x_vol.clear()
y_vol.clear()
values.clear()
for i = 0 to rows
y = y_min + i * (y_max - y_min) / rows
x_vol.push(lb_time)
y_vol.push(y)
values.push(0)
for i = bar_index - lb_idx to 1
vol = ltf_V ,
if vol.size() > 0
for j = 0 to values.size() - 1
temp = y_vol.get(j)
for k = 0 to vol.size() - 1
H = ltf_H
L = ltf_L
V = ltf_V
if H.get(k) >= temp and L.get(k) <= temp
add = math.floor(V.get(k) / ((H.get(k) - L.get(k)) / (y_max - y_min) / rows))
values.set(j, values.get(j) + add)
max_y = y_vol.get(values.indexof(values.max()))
sf = values.max() / (time - lb_time) / (extend / 100)
for j = 0 to values.size() - 1
set = (lb_time + math.floor(values.get(j) / sf))
x_vol.set(j, set)
PLA.clear()
PLA.push(chart.point.from_time(lb_time, y_min))
for i = 0 to x_vol.size() - 1
PLA.push(chart.point.from_time(x_vol.get(i), y_vol.get(i)))
PLA.push(chart.point.from_time(lb_time, y_max))
PL.delete()
if timeframe.change(tf)
polyline.new(PLA, curved = false, closed = true, line_color = vp_color, fill_color = vp_color, xloc = xloc.bar_time)
temp_vpoc.delete()
vpoc.unshift(line.new(lb_time, max_y, time, max_y, xloc = xloc.bar_time, color = show_vpoc ? vpoc_color : na, extend = ext_vpoc ? extend.right : extend.none, width = vpoc_width))
if ext_vpoc and timeframe.in_seconds(tf) >= timeframe.in_seconds(vpoc_label_above)
dates.unshift(label.new(bar_index, max_y, str.format("{0,date,short}", time("", session = "0000-0000", timezone = "America/New_York")), textcolor = show_vpoc ? vpoc_color : na, color = na, size = get_label_size(vpoc_label_size)))
else
PL := polyline.new(PLA, curved = false, closed = true, line_color = vp_color, fill_color = vp_color, xloc = xloc.bar_time)
if na(temp_vpoc)
temp_vpoc := line.new(lb_time, max_y, time, max_y, xloc = xloc.bar_time, color = show_vpoc ? vpoc_color : na, extend = ext_vpoc ? extend.right : extend.none, width = vpoc_width)
temp_vpoc.set_y1(max_y)
temp_vpoc.set_y2(max_y)
temp_vpoc.set_x2(time)
if timeframe.change(tf)
lb_idx := bar_index
lb_time := time
if show_hvn
hvn_lines.clear()
hvn_boxes.clear()
hvn_Ly.clear()
hvn_By.clear()
get_hvn()
if ext_vpoc and vpoc.size() > ext_n_vpoc
line.set_extend(vpoc.pop(), extend.none)
if timeframe.in_seconds(tf) >= timeframe.in_seconds(vpoc_label_above)
label.delete(dates.pop())
if dates.size() > 0
for i = 0 to dates.size() - 1
dates.get(i).set_x(bar_index + 20)
Time Zone & SessionsDa las sesiones de London, New York, Asia y Austr.
Además un time zone incorporado para marcar días
Jts Up/Down VolumeColour variation of volume indicator. Uses Green and blue so as not to reinforce the symbolism of the colour combination. Volume highlighted, with average overlay in green.
Advanced Multi-Timeframe Trading System (Risk Managed)Description:
This strategy is an original approach that combines two main analytical components to identify potential trade opportunities while simulating realistic trading conditions:
1. Market Trend Analysis via an Approximate Hurst Exponent
• What It Does:
The strategy computes a rough measure of market trending using an approximate Hurst exponent. A value above 0.5 suggests persistent, trending behavior, while a value below 0.5 indicates a tendency toward mean-reversion.
• How It’s Used:
The Hurst exponent is calculated on both the chart’s current timeframe and a higher timeframe (default: Daily) to capture both local and broader market dynamics.
2. Fibonacci Retracement Levels
• What It Does:
Using daily high and low data from a selected timeframe (default: Daily), the script computes key Fibonacci retracement levels.
• How It’s Used:
• The 61.8% level (Golden Ratio) serves as a key threshold:
• A long entry is signaled when the price crosses above this level if the daily Hurst exponent confirms a trending market.
• The 38.2% level is used to identify short-entry opportunities when the price crosses below it and the daily Hurst indicates non-trending conditions.
Signal Logic:
• Long Entry:
When the price crosses above the 61.8% Fibonacci level (Golden Ratio) and the daily Hurst exponent is greater than 0.5, suggesting a trending market.
• Short Entry:
When the price crosses below the 38.2% Fibonacci level and the daily Hurst exponent is less than 0.5, indicating a less trending or potentially reversing market.
Risk Management & Trade Execution:
• Stop-Loss:
Each trade is risk-managed with a stop-loss set at 2% below (for longs) or above (for shorts) the entry price. This ensures that no single trade risks more than a small, sustainable portion of the account.
• Take Profit:
A take profit order targets a risk-reward ratio of 1:2 (i.e., the target profit is twice the amount risked).
• Position Sizing:
Trades are executed with a fixed position size equal to 10% of account equity.
• Trade Frequency Limits:
• Daily Limit: A maximum of 5 trades per day
• Overall Limit: No more than 510 trades during the backtesting period (e.g., since 2019)
These limits are imposed to simulate realistic trading frequency and to avoid overtrading in backtest results.
Backtesting Parameters:
• Initial Capital: $10,000
• Commission: 0.1% per trade
• Slippage: 1 tick per bar
These settings aim to reflect the conditions faced by the average trader and help ensure that the backtesting results are realistic and not misleading.
Chart Overlays & Visual Aids:
• Fibonacci Levels:
The key Fibonacci retracement levels are plotted on the chart, and the zone between the 61.8% and 38.2% levels is highlighted to show a key retracement area.
• Market Trend Background:
The chart background is tinted green when the daily Hurst exponent indicates a trending market (value > 0.5) and red otherwise.
• Information Table:
An on-chart table displays key parameters such as the current Hurst exponent, daily Hurst value, the number of trades executed today, and the global trade count.
Disclaimer:
Past performance is not indicative of future results. This strategy is experimental and provided solely for educational purposes. It is essential that you backtest and paper trade using your own settings before considering any live deployment. The Hurst exponent calculation is an approximation and should be interpreted as a rough gauge of market behavior. Adjust the parameters and risk management settings according to your personal risk tolerance and market conditions.
Additional Notes:
• Originality & Usefulness:
This script is an original mashup that combines trend analysis with Fibonacci retracement methods. The description above explains how these components work together to provide trading signals.
• Realistic Results:
The strategy uses realistic account sizes, commission rates, slippage, and risk management rules to generate backtesting results that are representative of real-world trading.
• Educational Purpose:
This script is intended to support the TradingView community by offering insights into combining multiple analysis techniques in one strategy. It is not a “get-rich-quick” system but rather an educational tool to help traders understand risk management and trade signal logic.
By using this script, you acknowledge that trading involves risk and that you are responsible for testing and adjusting the strategy to fit your own trading environment. This publication is fully open source, and any modifications should include proper attribution if significant portions of the code are reused.
Median Deviation Bands | QuantumResearchIntroducing QuantumResearch’s Median Deviation Bands Indicator
The Median Deviation Bands indicator is an advanced volatility-based tool designed to help traders identify price trends, market reversals, and potential trading opportunities.
By using a percentile-based median baseline combined with standard deviation bands, this indicator provides a dynamic framework for analyzing price movements and assessing market volatility.
How It Works
Baseline Calculation:
The median price over a user-defined period (default: 50) is calculated using the 50th percentile of price data.
This serves as the central reference point for trend analysis.
Trend Identification:
Bullish Trend: Occurs when the price crosses above the baseline.
Bearish Trend: Occurs when the price crosses below the baseline.
Deviation Bands:
The indicator plots three sets of upper and lower bands, representing 1x, 2x, and 3x standard deviations from the median.
These bands act as dynamic support and resistance zones, helping traders identify overbought and oversold conditions.
Visual Representation
The Median Deviation Bands indicator offers a clear, customizable visual layout:
Color-Coded Baseline:
Green (Bullish): Price is above the median.
Red (Bearish): Price is below the median.
Deviation Bands:
First Band (Light Fill): Represents 1 standard deviation from the baseline.
Second Band (Medium Fill): Represents 2 standard deviations, highlighting stronger trends.
Third Band (Dark Fill): Represents 3 standard deviations, showing extreme price conditions.
Trend Markers:
Green Up Arrows: Indicate the start of a bullish trend when price crosses above the baseline.
Red Down Arrows: Indicate the start of a bearish trend when price crosses below the baseline.
Customization & Parameters
The Median Deviation Bands indicator includes multiple user-configurable settings to adapt to different trading strategies:
Baseline Length: Default set to 50, determines the lookback period for median calculation.
Source Price: Selectable input price for calculations (default: close).
Band Visibility: Traders can toggle individual deviation bands on or off to match their preferences.
Trend Markers: Option to enable or disable up/down trend arrows.
Color Modes: Choose from eight color schemes to customize the indicator’s appearance.
Trading Applications
This indicator is highly versatile and can be applied to multiple trading strategies, including:
Volatility-Based Trading: Price movement within and outside the bands helps traders gauge volatility and market conditions.
Trend Following: The baseline and deviation bands help confirm ongoing trends.
Mean Reversion Strategies: Traders can look for price reactions at extreme bands (±3 standard deviations).
Final Note
QuantumResearch’s Median Deviation Bands indicator provides a unique approach to market analysis by integrating percentile-based median price levels with standard deviation-based volatility bands.
This combination helps traders understand price behavior in relation to historical volatility, making it a valuable tool for both trend-following and mean-reversion strategies.
As always, backtesting and customization are recommended to optimize performance across different market conditions.
Bollinger Bands Long Strategy
This strategy is designed for identifying and executing long trades based on Bollinger Bands and RSI. It aims to capitalize on potential oversold conditions and subsequent price recovery.
Key Features:
- Bollinger Bands (10,2): The strategy uses Bollinger Bands with a 10-period moving average and a multiplier of 2 to define price volatility.
- RSI Filter: A trade is only triggered when the RSI (14-period) is below 30, ensuring entry during oversold conditions.
- Entry Condition: A long trade is entered immediately when the price crosses below the lower Bollinger Band and the RSI is under 30.
- Exit Condition: The position is exited when the price reaches or crosses above the Bollinger Band basis (20-period moving average).
Best Used For:
- Identifying oversold conditions with a strong potential for a rebound.
- Markets or assets with clear oscillations and volatility e.g., BTC.
**Disclaimer:** This strategy is for educational purposes and should be used with caution. Backtesting and risk management are essential before live trading.
Al Sat Sinyali ve Para Giriş Çıkışı//@version=5
indicator("Al Sat Sinyali ve Para Giriş Çıkışı", overlay=true)
// Parametreler
shortLength = input.int(13, title="Kısa Periyot MA (13 Gün)")
mediumLength = input.int(8, title="Orta Periyot MA (8 Gün)")
longLength = input.int(5, title="Kısa Orta MA (5 Gün)")
longTermLength = input.int(55, title="Uzun Periyot MA (55 Gün)")
src = input(close, title="Veri Kaynağı")
// Hareketli Ortalamalar
ma13 = ta.sma(src, shortLength)
ma8 = ta.sma(src, mediumLength)
ma5 = ta.sma(src, longLength)
ma55 = ta.sma(src, longTermLength)
// Al/Sat Sinyalleri
longSignal = ma13 > ma8 and ma8 > ma5 // Fiyat 13 MA, 8 MA ve 5 MA üstünde
shortSignal = ma13 < ma8 and ma8 < ma5 // Fiyat 13 MA, 8 MA ve 5 MA altında
// Temkinli tut sinyali
cautionSignal = ma13 > ma8 and ma8 < ma5 // Fiyat 13-8 üstü, 5-8 altı
// Arka Plan Renkleri
bgcolor(ma55 > src ? color.new(color.green, 90) : color.new(color.red, 90))
// Al/Sat ve Temkinli Tut Sinyalleri
plotshape(longSignal, color=color.green, style=shape.labelup, location=location.belowbar, text="AL", textcolor=color.white, size=size.small)
plotshape(shortSignal, color=color.red, style=shape.labeldown, location=location.abovebar, text="SAT", textcolor=color.white, size=size.small)
plotshape(cautionSignal, color=color.orange, style=shape.triangledown, location=location.abovebar, text="TEMKİN", textcolor=color.white, size=size.small)
// 55 Günlük Hareketli Ortalama
plot(ma55, color=color.blue, linewidth=2, title="55 Günlük MA")
// Para Giriş-Çıkış Farkı (Volatilite/Değişim farkı)
volumeDelta = volume - ta.sma(volume, 14) // 14 periyotluk hacim farkı
plot(volumeDelta, color=color.purple, style=plot.style_histogram, linewidth=2, title="Para Giriş/Çıkış Farkı")
AI区间震荡策略(修正版)📌 交易策略简介(区间震荡策略)
策略名称:区间震荡交易策略
适用市场:外汇、股票、加密货币等震荡市场
策略类型:高胜率短线交易
📌策略核心逻辑
识别震荡区间:使用布林带+ATR确定支撑和阻力位。
趋势过滤:采用EMA(指数移动均线)避免趋势行情误入。
入场信号:
做多:价格接近支撑位,且RSI < 30(超卖)+ KDJ超卖。
做空:价格接近阻力位,且RSI > 70(超买)+ KDJ 超买。
止盈 & 止损:
止盈:目标2× ATR。
止损:严格控制在1.5×ATR以内。
智能资金管理:
每笔交易动态调整仓位,控制风险,防止过度交易。
📌适用场景
✅适用于震荡行情(价格在一定范围内波动)
✅过滤趋势行情(防止资金回撤过大)
✅短线交易,高胜率策略(适合日内交易)
💡直接复制代码到TradingView,即可运行!🚀