예스스탁
예스스탁 답변
2023-07-18 11:02:47
안녕하세요
예스스탁입니다.
input : prd(10),conslen(5),paintcons(true),zonecol(blue);
var : hb_(0),lb_(0),dir(0),zz(0),pp(0),x(0);
hb_ = iff(nthhighestbar(1,h,prd) == 0 , high , 0);
lb_ = iff(nthlowestbar(1,l,prd) == 0 , low , 0);
zz = Nan;
pp = Nan;
dir = iff(nthhighestbar(1,h,prd) == 0, 1, iff(nthlowestbar(1,l,prd) == 0, -1, dir));
if hb_ > 0 and lb_ > 0 Then
{
if dir == 1 Then
zz = hb_;
else
zz = lb_;
}
else
{
zz = iff(hb_ > 0, hb_, iff(lb_ > 0, lb_, nan));
}
for x = 0 to 1000
{
if dir != dir[x] Then
{
x = 1001;
}
if zz[x] Then
{
if IsNan(pp) == true Then
{
pp = zz[x];
}
else
{
if dir[x] == 1 and zz[x] > pp Then
pp = zz[x];
if dir[x] == -1 and zz[x] < pp Then
pp = zz[x];
}
}
}
var : conscnt(0),condhigh(0),condlow(0),H_(0),L_(0);
H_ = highest(h,conslen);
L_ = lowest(l,conslen);
var : upline(0),dnline(0),breakoutup(false),breakoutdown(false);
if pp != pp[1] Then
{
if conscnt > conslen Then
{
if pp > condhigh Then
breakoutup = true;
if pp < condlow then
breakoutdown = true;
}
if conscnt > 0 and pp <= condhigh and pp >= condlow Then
conscnt = conscnt + 1;
else
conscnt = 0;
}
else
conscnt = conscnt + 1;
if conscnt >= conslen Then
{
if conscnt == conslen Then
{
condhigh = H_;
condlow = L_;
upline = TL_New(sDate[conscnt],sTime[conscnt], condhigh, sDate,sTime, condhigh);
TL_SetColor(upline,Red);
dnline = TL_New(sDate[conscnt],sTime[conscnt], condlow , sDate,sTime, condlow);
TL_SetColor(dnline,Blue);
}
else
{
condhigh = max(condhigh, high);
condlow = min(condlow, low);
}
TL_SetEnd(upline,NextBarSdate,NextBarStime,condhigh);
TL_SetEnd(dnline,NextBarSdate,NextBarStime,condlow);
}
즐거운 하루되세요
> 다올 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 변형 부탁 드립니다.
study("Consolidation Zones - Live", overlay = true, max_bars_back = 1100)
prd = input(defval = 10, title="Loopback Period", minval = 2, maxval = 50)
conslen = input(defval = 5, title="Min Consolidation Length", minval = 2, maxval = 20)
paintcons = input(defval = true, title = "Paint Consolidation Area ")
zonecol = input(defval = color.new(color.blue, 70), title = "Zone Color")
float hb_ = highestbars(prd) == 0 ? high : na
float lb_ = lowestbars(prd) == 0 ? low : na
var int dir = 0
float zz = na
float pp = na
dir := iff(hb_ and na(lb_), 1, iff(lb_ and na(hb_), -1, dir))
if hb_ and lb_
if dir == 1
zz := hb_
else
zz := lb_
else
zz := iff(hb_, hb_, iff(lb_, lb_, na))
for x = 0 to 1000
if na(close) or dir != dir[x]
break
if zz[x]
if na(pp)
pp := zz[x]
else
if dir[x] == 1 and zz[x] > pp
pp := zz[x]
if dir[x] == -1 and zz[x] < pp
pp := zz[x]
var int conscnt = 0
var float condhigh = na
var float condlow = na
float H_ = highest(conslen)
float L_ = lowest(conslen)
var line upline = na
var line dnline = na
bool breakoutup = false
bool breakoutdown = false
if change(pp)
if conscnt > conslen
if pp > condhigh
breakoutup := true
if pp < condlow
breakoutdown := true
if conscnt > 0 and pp <= condhigh and pp >= condlow
conscnt := conscnt + 1
else
conscnt := 0
else
conscnt := conscnt + 1
if conscnt >= conslen
if conscnt == conslen
condhigh := H_
condlow := L_
else
line.delete(upline)
line.delete(dnline)
condhigh := max(condhigh, high)
condlow := min(condlow, low)
upline := line.new(bar_index, condhigh, bar_index - conscnt, condhigh, color = color.red, style = line.style_dashed)
dnline := line.new(bar_index, condlow , bar_index - conscnt, condlow, color = color.lime, style = line.style_dashed)
fill(plot(condhigh, color = na, style = plot.style_stepline),
plot(condlow, color = na, style = plot.style_stepline),
color = paintcons and conscnt > conslen ? zonecol : color.new(color.white, 100))
alertcondition(breakoutup, title='Breakout Up', message='Breakout Up')
alertcondition(breakoutdown, title='Breakout Down', message='Breakout Down')