на базе статьи:
https://smart-lab.ru/blog/548810.php
Рассчитывается как произведение горизонтальных объемов на отклонение цены относительно текущей позиции
Данный индикатор позволяет понимать в какую сторону торговать, чтоб получить прибыль, какой выставлять TP и SL
Чем больше величина горизонтальной лини, тем больше вероятность заработка относительно текущей позиции цены
формула индикатора такая: Ij = Vj*abs(Pj-P0), где Vj -горизонтальный объем, Pj -цена на уровне горизонтального объема, P0 — текущая цена
рекомендации по TP и SL:
код:
Settings={
Name="TPSL",
period=200,
maxline=20,
width=4,
count=50,
xshift=0,
vlm=1,
line={}
}
--[[
описание свойств:
xshift - сдвиг по горизонтали
count - количество черточек по вертикали
period- сколько баров берутся в подсчет
maxline - количество баров для максимальной черточки
width - толщина черточки
vlm - 1-c учетом оъема 0-просто распределение без объема,
--]]
function Init()
n=Settings.count
vol={}
for j = 1, n do
vol[j]=0
Settings.line[j] = {Color=RGB(190,50,50),Type=TYPE_LINE,Width=Settings.width}
--for i=Size()-Settings.xshift-Settings.maxline, Size()-Settings.xshift do
for i=1, Size() do
SetValue(i, j, nil)
end
end
return Settings.count
end
function OnCalculate(index)
sz = Size()
sumv = 0
if (index < Size()-Settings.xshift)or(index > Size()-Settings.xshift) then
return nil
else
n=Settings.count
maxv=0
maxc=0
minc=9999
for i=Size()-Settings.xshift-Settings.period, Size()-Settings.xshift do
if C(i) ~= nil then
if maxc < C(i) then
maxc = C(i)
end
if minc > C(i) then
minc = C(i)
end
end
end
delta = (maxc - minc)/n
for i=Size()-Settings.xshift-Settings.period, Size()-Settings.xshift do
for j = 1, n do
if C(i) ~= nil then
if (C(i) > minc + (j-1)*delta) and (C(i) <= minc + j*delta) then
if Settings.vlm == 1 then
if V(i) ~= nil then
vol[j]=vol[j]+V(i)
end
else
vol[j]=vol[j]+1
end
end
end
end
end
for j = 1, n do
sumv = sumv + vol[j]
end
for j = 1, n do
if C(sz) < minc + j*delta then
vol[j]=(minc + j*delta - C(sz))*vol[j]/sumv
else
vol[j]=(C(sz) - (minc + j*delta))*vol[j]/sumv
end
end
for j = 1, n do
if maxv < vol[j] then
maxv = vol[j]
end
end
k = 0
for i=Size()-Settings.xshift-Settings.maxline+1, Size()-Settings.xshift do
k = k + 1
for j = 1, n do
if vol[j] >= (Settings.maxline - k)*maxv/Settings.maxline then
SetValue(i, j, minc + (j-0.5)*delta)
else
SetValue(i, j, nil)
end
end
end
end
end
Ага, теперь понятно. Спасибо.
По классике ММ это же слив.
можешь любой свой установить