예스스탁
예스스탁 답변
2026-09-28 15:19:05
안녕하세요
예스스탁입니다.
plot2.plot4.plot5는 속성에서 일자그래프로 지정하고 적용하셔야 합니다.
input : per(14);
input : dzper(70);
input : buy1(0.1);
input : buy2(0.25);
input : sell1(0.1);
input : sell2(0.25);
Function rsx
{
input : src(Numeric),len(Numeric);
var : src_out(0),mom0(0),moa0(0),kg(0),hg(0);
var : f28(0),f30(0),mom1(0);
var : f38(0),f40(0),mom2(0);
var : f48(0),f50(0),mom_out(0);
var : f58(0),f60(0),moa1(0);
var : f68(0),f70(0),moa2(0);
var : f78(0),f80(0),moa_out(0);
src_out = 100 * src;
mom0 = src_out-src_out[1];
moa0 = abs(mom0);
Kg = 3 / (len + 2.0);
Hg = 1 - Kg;
//mom
f28 = 0.0;
f30 = 0.0;
f28 = Kg * mom0 + Hg * iff(IsNan(f28[1])==true,0,f28[1]);
f30 = Hg * iff(IsNan(f30[1])==true,0,f30[1]) + Kg * f28;
mom1 = f28 * 1.5 - f30 * 0.5;
f38 = 0.0;
f40 = 0.0;
f38 = Hg * iff(IsNan(f38[1])==true,0,f38[1]) + Kg * mom1;
f40 = Kg * f38 + Hg * iff(IsNan(f40[1])==true,0,f40[1]);
mom2 = f38 * 1.5 - f40 * 0.5;
f48 = 0.0;
f50 = 0.0;
f48 = Hg * iff(IsNan(f48[1])==true,0,f48[1]) + Kg * mom2;
f50 = Kg * f48 + Hg * iff(IsNan(f50[1])==true,0,f50[1]);
mom_out = f48 * 1.5 - f50 * 0.5;
//moa
f58 = 0.0;
f60 = 0.0;
f58 = Hg * iff(IsNan(f58[1])==true,0,f58[1]) + Kg * moa0;
f60 = Kg * f58 + Hg * iff(IsNan(f60[1])==true,0,f60[1]);
moa1 = f58 * 1.5 - f60 * 0.5;
f68 = 0.0;
f70 = 0.0;
f68 = Hg * iff(IsNan(f68[1])==true,0,f68[1]) + Kg * moa1;
f70 = Kg * f68 + Hg * iff(IsNan(f70[1])==true,0,f70[1]);
moa2 = f68 * 1.5 - f70 * 0.5;
f78 = 0.0;
f80 = 0.0;
f78 = Hg * iff(IsNan(f78[1])==true,0,f78[1]) + Kg * moa2;
f80 = Kg * f78 + Hg * iff(IsNan(f80[1])==true,0,f80[1]);
moa_out = f78 * 1.5 - f80 * 0.5;
rsx = max(min((mom_out / moa_out + 1.0) * 50.0, 100.00), 0.00);
}
EndFunction
Function dzone
{
input : type(String),src(Numeric),pval(Numeric),per(Numeric);
var : left(0),right(0),eps(0),maxSteps(0),yval(0),delta(0);
var : count(0),prob(0),k(0);
left = -highest(high, per * 3)/PriceScale;
right = highest(high, per * 3)/PriceScale;
eps = min(PriceScale, 0.001);
maxSteps = 0;
yval = (left + right) / 2.0;
yval = IFF( IsNan(yval) == true,close , yval);
delta = yval - left;
while (delta > eps * 5 and maxSteps < per * 2)
{
maxSteps = maxSteps+ 1;
count = 0;
if type == "buy" Then
{
for k = 0 to per - 1 step 1
{ if src[k] < yval Then
{
count = count+1;
}
}
prob = count/per;
if prob > (pval + eps) Then
{
right = yval;
yval = (yval + left) / 2.;
}
if prob < (pval - eps) Then
{
left = yval;
yval = (yval + right) / 2.;
}
if prob < pval + eps and prob > (pval - eps) Then
{
right = yval;
yval = (yval + left) / 2.;
}
delta = yval - left;
}
else
{ for k = 0 to per - 1 step 1
{
if src[k] > yval Then
{
count = count+1;
}
}
prob = count/per;
if prob > (pval + eps) Then
{
left = yval;
yval = (yval + right) / 2.;
}
if prob < (pval - eps) Then
{
right = yval;
yval = (yval + left) / 2.;
}
if prob < pval + eps and prob > (pval - eps) Then
{
left = yval;
yval = (yval + right) / 2.;
}
delta = yval - left;
}
}
dzone = yval;
}
EndFunction
var : src(0);
var : rsxv(0);
var : buylout1(0),buylout2(0),sellout1(0),sellout2(0),midl(0);
src = (h+l+c)/3;
rsxv = rsx(src, per);
buylout1 = dZone("buy", rsxv, buy1, dzper);
buylout2 = dZone("buy", rsxv, buy2, dzper);
sellout1 = dZone("sell", rsxv, sell1, dzper);
sellout2 = dZone("sell", rsxv, sell2, dzper);
midl = dZone("sell", rsxv, 0.5, dzper);
plot1(buylout1, "buy lvl 1", green);
if Index%2 == 1 Then
plot2(buylout2, "buy lvl 2", green); //그래프 종류 일자그래프
Else
NoPlot(2);
plot3(sellout1, "sell lvl 1", red);
if Index%2 == 1 Then
plot4(sellout2, "sell lvl 2",red); //그래프 종류 일자그래프
Else
NoPlot(4);
if Index%2 == 1 Then
plot5(midl, "mid lvl", gray); //그래프 종류 일자그래프
Else
NoPlot(5);
var : colorout(0);
colorout = iff(rsxv < buylout1 ,green , IFf(rsxv > sellout1 , red , gray));
plot6(rsxv, "RSX", colorout,Def,2);
즐거운 하루되세요