MTF Liquidity Stack
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator mtf liquidity stack for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
«MTF Liquidity Stack» — это индикатор TradingView, который отображает уровни ликвидности на графике цены. Он рассчитывает точки разворота (swing high и swing low) с нескольких таймфреймов одновременно, а также отслеживает ликвидность торговых сессий (Азия, Лондон, Нью-Йорк) и предыдущего торгового дня (PDH/PDL). Когда цена проходит через уровень ликвидности, он помечается как проработанный и визуально изменяется.
Индикатор поддерживает до пяти пользовательских таймфреймов с возможностью автоматического повышения низких таймфреймов до значимых старших. Каждый уровень может быть помечен тегами и отображается линией и метками на графике. Доступна настройка цвета, стиля и толщины линий для проработанных и непроработанных уровней.
Встроенная система оповещений позволяет получать уведомления при появлении новых уровней ликвидности и при их проработке ценой. Поддерживается ежедневный сброс всех уровней и фильтрация по торговым сессиям с заданным UTC-смещением.
Настройки программы
| Настройка | Описание |
|---|---|
| au | Включает автоматическое повышение низких таймфреймов до значимых старших при дублировании. |
| nl | Количество последних непроработанных уровней swing high и swing low, сохраняемых для каждого активного таймфрейма. |
| e1 | Включает или отключает первый источник ликвидности по таймфрейму TF 1. |
| tf1 | Таймфрейм первого источника ликвидности. |
| e2 | Включает или отключает второй источник ликвидности по таймфрейму TF 2. |
| tf2 | Таймфрейм второго источника ликвидности. |
| e3 | Включает или отключает третий источник ликвидности по таймфрейму TF 3. |
| tf3 | Таймфрейм третьего источника ликвидности. |
| e4 | Включает или отключает четвёртый источник ликвидности по таймфрейму TF 4. |
| tf4 | Таймфрейм четвёртого источника ликвидности. |
| e5 | Включает или отключает пятый источник ликвидности по таймфрейму TF 5. |
| tf5 | Таймфрейм пятого источника ликвидности. |
| sm | Режим отображения торговых сессий: Full — полные региональные сессии, AM — только утренние ликвидностные окна. |
| utc | UTC-смещение, используемое для расчёта временных зон всех торговых сессий и ежедневных расчётов. |
| aOn | Включает или отключает отслеживание ликвидности сессии Азии. |
| aNm | Название региональной торговой сессии Азии, используемое в тегах. |
| aFull | Временной диапазон региональной сессии для режима Full (полное ликвидностное окно). |
| aAm | Временной диапазон региональной сессии для режима AM (утренний ликвидностный окно). |
| aCol | Цвет, используемый для отображения ликвидности сессии Азии. |
| lOn | Включает или отключает отслеживание ликвидности сессии Лондона. |
| lNm | Название региональной торговой сессии Лондона, используемое в тегах. |
| lFull | Временной диапазон региональной сессии Лондона для режима Full. |
| lAm | Временной диапазон региональной сессии Лондона для режима AM. |
| lCol | Цвет, используемый для отображения ликвидности сессии Лондона. |
| nOn | Включает или отключает отслеживание ликвидности сессии Нью-Йорка. |
| nNm | Название региональной торговой сессии Нью-Йорка, используемое в тегах. |
| nFull | Временной диапазон региональной сессии Нью-Йорка для режима Full. |
| nAm | Временной диапазон региональной сессии Нью-Йорка для режима AM. |
| nCol | Цвет, используемый для отображения ликвидности сессии Нью-Йорка. |
| rst | При включении очищает все уровни ликвидности (проработанные и непроработанные) в начале нового календарного дня. |
| pd | Включает или отключает отслеживание максимума и минимума предыдущего торгового дня (PDH/PDL) как уровней ликвидности. |
| lsz | Размер текста меток ликвидности и маркеров происхождения. |
| rtsz | Размер текста для активных меток ликвидности на правой стороне графика. |
| hist | Отображает или скрывает проработанные уровни ликвидности на графике. |
| hc | Цвет, используемый для отображения непроработанных уровней swing high. |
| lc | Цвет, используемый для отображения непроработанных уровней swing low. |
| sc | Цвет, ширина и стиль линий для проработанных уровней ликвидности (если не переопределён цветом сессии). |
| sw | Толщина линий, используемых для отображения уровней ликвидности на графике. |
| ss | Стиль линий для проработанных уровней ликвидности: сплошной, пунктирный или точечный. |
| alNew | Включает оповещение при подтверждении нового уровня ликвидности. |
| alMit | Включает оповещение при проработке ценой активного уровня ликвидности. |
| alHi | Разрешает отправку оповещений для уровней ликвидности High (swing high). |
| alLo | Разрешает отправку оповещений для уровней ликвидности Low (swing low). |
Поиск по коду файла
indicator("MTF Liquidity Stack", overlay=true, max_lines_count=500, max_labels_count=500)
var string t1 ="Automatically promotes enabled sources at or below the chart timeframe to a meaningful higher timeframe. Explicit higher-timeframe sources take priority if duplicates occur."
var string t2 ="Number of recent unmitigated swing highs and lows kept for each active timeframe."
var string t3 ="Enable or disable this timeframe liquidity source."
var string t4 ="Full tracks complete regional sessions. AM switches Asia, London and New York together to their AM liquidity windows."
var string t5 ="UTC offset used for all sessions and daily calculations. Session times are defined from UTC+0 and shifted automatically."
var string t6 ="Session window in UTC+0. The active Full or AM window is selected automatically by Session Mode."
var string t7 ="Clears all swept and unswept liquidity levels when a new calendar day begins."
var string t8 ="Tracks the previous day's high and low as liquidity levels."
var string t9 ="Text size used for liquidity origin markers and mitigated level labels."
var string t10="Text size used only for active right-side liquidity tags."
var string t11="Keep previous mitigated liquidity visible. Off keeps only the newest mitigated level."
var string t12="Color used for unmitigated swing-high liquidity."
var string t13="Color used for unmitigated swing-low liquidity."
var string t14="Color, width and style used for mitigated liquidity unless a session color overrides it."
var string t15="Alert when a brand-new liquidity price is confirmed. Additional tags merging into the same price do not trigger another New alert."
var string t16="Alert when price trades through an active liquidity level and the level becomes mitigated."
var string t17="Choose whether High or Low liquidity is allowed to trigger alerts."
gM="1. Timeframes"
gS="2. Sessions"
gR="3. Daily Levels"
gV="4. Style"
gA="5. Alerts"
au=input.bool(true,"Auto",inline="mtf",group=gM,tooltip=t1)
nl=input.int(5,"Levels",1,20,inline="mtf",group=gM,tooltip=t2)
e1=input.bool(true,"TF 1",inline="tf1",group=gM,tooltip=t3)
tf1=input.timeframe("60","",inline="tf1",group=gM)
e2=input.bool(true,"TF 2",inline="tf2",group=gM,tooltip=t3)
tf2=input.timeframe("240","",inline="tf2",group=gM)
e3=input.bool(true,"TF 3",inline="tf3",group=gM,tooltip=t3)
tf3=input.timeframe("D","",inline="tf3",group=gM)
e4=input.bool(false,"TF 4",inline="tf4",group=gM,tooltip=t3)
tf4=input.timeframe("W","",inline="tf4",group=gM)
e5=input.bool(false,"TF 5",inline="tf5",group=gM,tooltip=t3)
tf5=input.timeframe("M","",inline="tf5",group=gM)
sm=input.string("Full","Mode",["Full","AM"],inline="sess",group=gS,tooltip=t4)
utc=input.string("UTC+0","UTC",["UTC-12","UTC-11","UTC-10","UTC-9","UTC-8","UTC-7","UTC-6","UTC-5","UTC-4","UTC-3","UTC-2","UTC-1","UTC+0","UTC+1","UTC+2","UTC+3","UTC+4","UTC+5","UTC+6","UTC+7","UTC+8","UTC+9","UTC+10","UTC+11","UTC+12","UTC+13","UTC+14"],inline="sess",group=gS,tooltip=t5)
aOn=input.bool(true,"",inline="as",group=gS)
aNm=input.string("Asia","",inline="as",group=gS)
aFull=input.session("2200-0700","Full",inline="as",group=gS,tooltip=t6,active=sm=="Full")
aAm=input.session("0000-0400","AM",inline="as",group=gS,tooltip=t6,active=sm=="AM")
aCol=input.color(#55ff96,"",inline="as",group=gS)
lOn=input.bool(true,"",inline="lo",group=gS)
lNm=input.string("London","",inline="lo",group=gS)
lFull=input.session("0700-1530","Full",inline="lo",group=gS,tooltip=t6,active=sm=="Full")
lAm=input.session("0600-0900","AM",inline="lo",group=gS,tooltip=t6,active=sm=="AM")
lCol=input.color(#ff4040,"",inline="lo",group=gS)
nOn=input.bool(true,"",inline="ny",group=gS)
nNm=input.string("New York","",inline="ny",group=gS)
nFull=input.session("1330-2000","Full",inline="ny",group=gS,tooltip=t6,active=sm=="Full")
nAm=input.session("1330-1500","AM",inline="ny",group=gS,tooltip=t6,active=sm=="AM")
nCol=input.color(#4d9dff,"",inline="ny",group=gS)
rst=input.bool(false,"Daily Reset",inline="day",group=gR,tooltip=t7)
pd=input.bool(true,"PDH / PDL",inline="day",group=gR,tooltip=t8)
lsz=input.string("Tiny","Labels",["Tiny","Small","Normal"],inline="view",group=gV,tooltip=t9)
rtsz=input.string("Tiny","Live Tags",["Tiny","Small","Normal"],inline="view",group=gV,tooltip=t10)
hist=input.bool(true,"History",group=gV,tooltip=t11)
hc=input.color(#ff4040,"High",inline="p",group=gV,tooltip=t12)
lc=input.color(#55ff96,"Low",inline="p",group=gV,tooltip=t13)
sc=input.color(#6d6d6d,"Sweep",inline="s",group=gV,tooltip=t14)
sw=input.int(1,"",1,4,inline="s",group=gV,tooltip=t14)
ss=input.string("Solid","",["Solid","Dashed","Dotted"],inline="s",group=gV,tooltip=t14)
alNew=input.bool(false,"New",inline="al",group=gA,tooltip=t15)
alMit=input.bool(true,"Mitigated",inline="al",group=gA,tooltip=t16)
alHi=input.bool(true,"High",inline="side",group=gA,tooltip=t17)
alLo=input.bool(true,"Low",inline="side",group=gA,tooltip=t17)
const int MAX_SWEEPS=220
const int MAX_SCAN=5000
const int WICK_CACHE=8
type Level
float p
bool hi
int x
int born
string tags
bool swept
int sx
label mark
label rt
line ln
label txt
type Sess
float h
float l
int hx
int lx
type Track
int op
float h
float l
int hx
int lx
array<int> ops
array<int> hxs
array<int> lxs
var array<Level> live=array.new<Level>()
var array<Level> done=array.new<Level>()
var array<string> aQ=array.new_string()
var array<bool> aSig=array.from(false,false,false,false)
var int day0=na
var array<Sess> ses=array.from(
Sess.new(na,na,na,na),
Sess.new(na,na,na,na),
Sess.new(na,na,na,na))
var array<Track> tr=array.from(
Track.new(na,na,na,na,na,array.new_int(),array.new_int(),array.new_int()),
Track.new(na,na,na,na,na,array.new_int(),array.new_int(),array.new_int()),
Track.new(na,na,na,na,na,array.new_int(),array.new_int(),array.new_int()),
Track.new(na,na,na,na,na,array.new_int(),array.new_int(),array.new_int()),
Track.new(na,na,na,na,na,array.new_int(),array.new_int(),array.new_int()))
var array<string> sNames=array.from(aNm,lNm,nNm)
var array<color> sCols=array.from(aCol,lCol,nCol)
var array<string> tfs=array.from(tf1,tf2,tf3,tf4,tf5)
var array<bool> src=array.from(e1,e2,e3,e4,e5)
var array<string> useTf=array.new_string(5,"")
var array<bool> useSrc=array.new_bool(5,false)
var array<bool> movedTf=array.new_bool(5,false)
var string aSess=na
var string lSess=na
var string nSess=na
max_bars_back(time,MAX_SCAN)
max_bars_back(high,MAX_SCAN)
max_bars_back(low,MAX_SCAN)
lblSize()=>lsz=="Small"?size.small:lsz=="Normal"?size.normal:size.tiny
rtSize()=>rtsz=="Small"?size.small:rtsz=="Normal"?size.normal:size.tiny
lnStyle()=>ss=="Dashed"?line.style_dashed:ss=="Dotted"?line.style_dotted:line.style_solid
tfSec(string tf)=>timeframe.in_seconds(tf)
nextHTF()=>
cs=timeframe.in_seconds()
d=timeframe.in_seconds("D")
w=timeframe.in_seconds("W")
m=timeframe.in_seconds("M")
out="12M"
if cs<=60
out:="5"
else if cs<=5*60
out:="15"
else if cs<=15*60
out:="60"
else if cs<=30*60
out:="120"
else if cs<=45*60
out:="180"
else if cs<=60*60
out:="240"
else if cs<=90*60
out:="360"
else if cs<=120*60
out:="480"
else if cs<=180*60
out:="720"
else if cs<=240*60
out:="D"
else if cs<=480*60
out:="D"
else if cs<=720*60
out:="2D"
else if cs<=3*d
out:="W"
else if cs<=6*d
out:="2W"
else if cs<=2*w
out:="M"
else if cs<=m
out:="3M"
else if cs<=3*m
out:="12M"
else if cs<=6*m
out:="12M"
out
autoTF(string tf)=>au and tfSec(tf)<=timeframe.in_seconds()?nextHTF():tf
sameTF(string a,string b)=>tfSec(a)==tfSec(b)
hasTF(array<string> a,string tf)=>
hit=false
if a.size()>0
for i=0 to a.size()-1
if sameTF(a.get(i),tf)
hit:=true
break
hit
resolveSources()=>
used=array.new_string()
cs=timeframe.in_seconds()
for i=0 to tfs.size()-1
base=tfs.get(i)
on=src.get(i)
rt=autoTF(base)
mv=au and on and tfSec(base)<=cs
useTf.set(i,rt)
movedTf.set(i,mv)
useSrc.set(i,false)
if not au
for i=0 to src.size()-1
useSrc.set(i,src.get(i))
else
for i=0 to src.size()-1
if src.get(i) and not movedTf.get(i)
rt=useTf.get(i)
if not hasTF(used,rt)
useSrc.set(i,true)
used.push(rt)
for i=0 to src.size()-1
if src.get(i) and movedTf.get(i)
rt=useTf.get(i)
valid=tfSec(rt)>cs
if valid and not hasTF(used,rt)
useSrc.set(i,true)
used.push(rt)
for i=0 to useSrc.size()-1
if not useSrc.get(i)
useTf.set(i,timeframe.period)
0
tfText(string tf)=>
out=tf
n=str.tonumber(tf)
if tf=="M" or tf=="1M"
out:="1M"
else if tf=="W" or tf=="1W"
out:="1W"
else if tf=="D" or tf=="1D"
out:="1D"
else if not na(n)
m=int(n)
if m<60
out:=str.tostring(m)+"m"
else if m<1440 and m%60==0
out:=str.tostring(int(m/60))+"h"
else if m>=10080 and m%10080==0
out:=str.tostring(int(m/10080))+"W"
else if m>=1440 and m%1440==0
out:=str.tostring(int(m/1440))+"D"
else
out:=str.tostring(m)+"m"
out
utcMin(string z)=>
s=str.replace_all(z,"UTC","")
s:=str.replace_all(s,"+","")
h=str.tonumber(s)
int(math.round(nz(h,0.0)*60.0))
pad(int v)=>(v<10?"0":"")+str.tostring(v)
shiftSession(string s,int off)=>
a=str.substring(s,0,4)
b=str.substring(s,5,9)
ah=int(nz(str.tonumber(str.substring(a,0,2)),0))
am=int(nz(str.tonumber(str.substring(a,2,4)),0))
bh=int(nz(str.tonumber(str.substring(b,0,2)),0))
bm=int(nz(str.tonumber(str.substring(b,2,4)),0))
x=(ah*60+am+off)%1440
y=(bh*60+bm+off)%1440
x:=x<0?x+1440:x
y:=y<0?y+1440:y
pad(int(math.floor(x/60)))+pad(x%60)+"-"+pad(int(math.floor(y/60)))+pad(y%60)
dayKey(int t)=>year(t,utc)*10000+month(t,utc)*100+dayofmonth(t,utc)
hasTag(string tags,string tag)=>str.contains("|"+tags+"|","|"+tag+"|")
addTag(string tags,string tag)=>hasTag(tags,tag)?tags:str.length(tags)==0?tag:tags+"|"+tag
delTag(string tags,string tag)=>
s=str.replace_all("|"+tags+"|","|"+tag+"|","|")
str.length(s)<=2?"":str.substring(s,1,str.length(s)-1)
tagText(string tags)=>str.replace_all(tags,"|","+")
alertMsg(string ev,Level x)=>
side=x.hi?"HIGH":"LOW"
ev+" | "+syminfo.ticker+" | "+side+" | "+tagText(x.tags)+" | "+str.tostring(x.p,format.mintick)+" | TF "+timeframe.period
pushAlert(string ev,Level x)=>
eventOn=ev=="NEW"?alNew:alMit
sideOn=x.hi?alHi:alLo
if eventOn and sideOn
aQ.push(alertMsg(ev,x))
id=ev=="NEW"?(x.hi?0:1):(x.hi?2:3)
aSig.set(id,true)
0
sendAlerts()=>
if barstate.isconfirmed and aQ.size()>0
msg=aQ.get(0)
if aQ.size()>1
for i=1 to aQ.size()-1
msg+="\n"+aQ.get(i)
alert(msg,alert.freq_once_per_bar_close)
0
lvlColor(Level x)=>
c=x.swept?sc:x.hi?hc:lc
for i=0 to sNames.size()-1
if hasTag(x.tags,sNames.get(i))
c:=sCols.get(i)
c
markText(Level x)=>
s=tagText(x.tags)
x.hi?s+"\n⊙\n ":" \n⊙\n"+s
anchorSlow(float p,bool hi,int op,int cl)=>
out=op
if not na(p) and not na(op) and not na(cl)
lim=math.min(bar_index,MAX_SCAN-1)
i=0
while i<=lim
bt=time[i]
if bt<op
break
if bt>=op and bt<cl
bp=hi?high[i]:low[i]
if math.abs(bp-p)<=syminfo.mintick*0.5
out:=bt
break
i+=1
out
method archive(Track x)=>
if not na(x.op)
x.ops.unshift(x.op)
x.hxs.unshift(x.hx)
x.lxs.unshift(x.lx)
if x.ops.size()>WICK_CACHE
x.ops.pop()
x.hxs.pop()
x.lxs.pop()
0
method trackWick(Track x,int op)=>
if not na(op)
if na(x.op)
x.op:=op
Показано первые 50% кода (символов: 18685)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.