예스스탁
예스스탁 답변
2022-06-08 15:13:12
안녕하세요
예스스탁입니다.
input : Length(14),Shift(0),ShowMiddle(1),ZeroBind(1),Normalize(0);
var : price(0),vprice(0),cprice(0),hprice(0),lprice(0),len1(0),pow1(0),del1(0),del2(0);
var : volty(0),vsum(0),avgv(0),avolty(0),bsmax(0),bsmin(0),avgLen(0),k(0),Diff(0);
var : dVolty(0),pow2(0),len2(0),kv(0),dnValue(0),upValue(0),dnValues(0),upValues(0),miValue(0),miValues(0);
Price = c;
if barindex > Length then
{
vprice = ma(price,1)[shift];
cprice = ma(price,1);
hprice = highest(vprice,length);
lprice = lowest(vprice,length);
len1 = Max(Log(Sqrt(0.5*(length-1)))/Log(2.0)+2.0,0);
pow1 = Max(len1-2.0,0.5);
del1 = hprice - bsmax[1];
del2 = lprice - bsmin[1];
volty = 0;
if(Abs(del1) > Abs(del2)) then
volty = Abs(del1);
if(Abs(del1) < Abs(del2)) then
volty = Abs(del2);
vsum = vsum[1] + 0.1*(volty-volty[10]);
avgv = vsum;
avgLen = 65;
for k=1 to avgLen-1
{
avgv = avgv+vsum[k];
}
avgv = avgv/k;
avolty = avgv;
if avolty > 0 then
dVolty = volty/avolty;
else
dVolty = 0;
if dVolty>exp((1/pow1)*log(len1)) then
dVolty=exp((1/pow1)*log(len1));
if (dVolty < 1) then
dVolty = 1.0;
pow2 = exp(pow1*log(dVolty));
len2 = Sqrt(0.5*(length-1))*len1;
Kv = exp(sqrt(pow2)*log(len2/(len2+1)));
if (del1 > 0) then
bsmax = hprice;
else
bsmax = hprice - Kv*del1;
if (del2 < 0) then
bsmin = lprice;
else
bsmin = lprice - Kv*del2;
dnValue = bsmin;
upValue = bsmax;
miValue = (upValue+dnValue)/2.0;
if (ZeroBind) then
{
if (Normalize) then
{
upValues = 1;
dnValues = -1;
diff = (upValue-miValue);
if (diff <> 0) then
price = (cprice-miValue)/diff;
else
price = 0;
}
else
{
upValues = upValue-miValue;
dnValues = dnValue-miValue;
price = (cprice-miValue);
}
}
else
{
upValues = upValue;
dnValues = dnValue;
price = cprice;
}
if (ShowMiddle) then
{
if (ZeroBind) then
miValues = 0;
else
miValues = miValue;
}
}
Plot1(upvalues);
Plot2(mivalues);
Plot3(dnvalues);
즐거운 하루되세요
> 흑수돌 님이 쓴 글입니다.
> 제목 : 수식 문의
> 아래는 Jurik Volatility Bands 라는 지표입니다.
아래 수식을 예트 수식으로 변환하고 싶습니다.
링크를 첨부 하였으니 한번 읽어보시고
여러 회원님들께도 도움되시기 바랍니다.
부탁 드리겠습니다. 감사합니다.
//PRC_Jurik Volatility Bands | indicator
//31.08.2020
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
//converted from MT4
//https://www.prorealcode.com/topic/jurik-volatility-bands/
//// --- settings
Length = 14
Shift = 0
ShowMiddle = 1
ZeroBind = 1
Normalize = 0
// --- end of settings
Price = customclose
if barindex>Length then
vprice = average[1](Price)[shift]
cprice = average[1](Price)
hprice = highest[length](vprice)
lprice = lowest[length](vprice)
len1 = Max(Log(Sqrt(0.5*(length-1)))/Log(2.0)+2.0,0)
pow1 = Max(len1-2.0,0.5)
del1 = hprice - bsmax[1]
del2 = lprice - bsmin[1]
volty = 0
if(Abs(del1) > Abs(del2)) then
volty = Abs(del1)
endif
if(Abs(del1) < Abs(del2)) then
volty = Abs(del2)
endif
vsum = vsum[1] + 0.1*(volty-volty[10])
avg = vsum
avgLen=65
for k=1 to avgLen-1 do
avg = avg+vsum[k]
next
avg = avg/k
avolty = avg
if avolty > 0 then
dVolty = volty/avolty
else
dVolty = 0
endif
if dVolty>exp((1/pow1)*log(len1)) then
dVolty=exp((1/pow1)*log(len1))
endif
if (dVolty < 1) then
dVolty = 1.0
endif
pow2 = exp(pow1*log(dVolty))
len2 = Sqrt(0.5*(length-1))*len1
Kv = exp(sqrt(pow2)*log(len2/(len2+1)))
if (del1 > 0) then
bsmax = hprice
else
bsmax = hprice - Kv*del1
endif
if (del2 < 0) then
bsmin = lprice
else
bsmin = lprice - Kv*del2
endif
dnValue = bsmin
upValue = bsmax
miValue = (upValue+dnValue)/2.0
////
if (ZeroBind) then
if (Normalize) then
upValues = 1
dnValues = -1
diff = (upValue-miValue)
if (diff <> 0) then
price = (cprice-miValue)/diff
else
price = 0
endif
else
upValues = upValue-miValue
dnValues = dnValue-miValue
price = (cprice-miValue)
endif
else
upValues = upValue
dnValues = dnValue
price = cprice
endif
if (ShowMiddle) then
if (ZeroBind) then
miValues = 0
else
miValues = miValue
endif
endif
endif
return upValues coloured(0,191,255) as "up value", dnValues coloured(219,112,147) as "dn value", miValues coloured(105,105,105) style(dottedline) as "mi value", price coloured(0,191,255) style(line,2) as "price"