예스스탁
예스스탁 답변
2020-12-07 14:42:58
안녕하세요
예스스탁입니다.
정적vi를 수식으로 정확히 판별이 가능하지 않습니다.
시가대비 10% 변동된 값이지만 발동될때 호가에 체결가능한 수량까지 함께 판단해 적용되는 부분으로
실제 정적vi가격은 2900이지만 2895까지 체결되고
나머지는 호가수량으로 2900에 체결될 수량이 있으면 발동되게 됩니다.
랭귀지에 호가정보는 제공되지 않아 해당 부분은 판단이 불가능합니다.
수식내에 허수봉으로 vi를 판별하게 되어 있는데
실제 거래가 없어 허수봉이 생길수도 있습니다.
허수봉에서 종가가 정적vi의 상하단값에 1틱 이내이면 정적vi로 보고 값 변동되게 작성해 드립니다.
1
var : upv(0),dnv(0),tx1(0),tx2(0);
var : a1(0),a2(0),b1(0),b2(0);
if Bdate != Bdate[1] Then
{
var1 = O;
}
Else
{
if H[1] == L[1] and v[1] == 0 and
v >= 1 and
(abs(C[1]-A1[1]) <= PriceScale*1 or
abs(C[1]-A1[1]) <= PriceScale*1) Then
var1 = O;
}
Var2 = Floor((var1*0.1)/PriceScale)*PriceScale;
if var1*0.1 > Var2 Then
{
Var2 = Var2+PriceScale;
}
a1 = var1+Var2;
b1 = var1-Var2;
Plot1(a1,"상단",RED);
Plot2(b1,"하단",BLUE);
Text_Delete(tx1);
tx1 = Text_New(NextBarSdate,NextBarStime,a1,NumToStr(a1,2));
Text_SetStyle(tx1,0,1);
Text_SetColor(tx1,RED);
Text_Delete(tx2);
tx2 = Text_New(NextBarSdate,NextBarStime,b1,NumToStr(b1,2));
Text_SetStyle(tx2,0,1);
Text_SetColor(tx2,BLUE);
2
var : upv(0),dnv(0),tx1(0),tx2(0);
var : a1(0),a2(0),b1(0),b2(0);
if Bdate != Bdate[1] Then
{
var1 = O;
}
Else
{
if H[1] == L[1] and v[1] == 0 and
v >= 1 and
(abs(C[1]-A1[1]) <= PriceScale*1 or
abs(C[1]-A1[1]) <= PriceScale*1) Then
var1 = O;
}
Var2 = Floor((var1*0.1)/PriceScale)*PriceScale;
if var1*0.1 > Var2 Then
{
Var2 = Var2+PriceScale;
}
a1 = var1+Var2;
b1 = var1-Var2;
if C >= a1 and C[1] < a1[1] Then
{
PlotPaintBar(H,L,"강조",YELLOW);
tx1 = Text_New(sDate,sTime,H,"+");
Text_SetStyle(tx1,2,1);
}
if C <= b1 and C[1] > b1[1] Then
{
PlotPaintBar(H,L,"강조",YELLOW);
tx1 = Text_New(sDate,sTime,L,"-");
Text_SetStyle(tx1,2,0);
}
3
var : upv(0),dnv(0),tx1(0),tx2(0);
var : a1(0),a2(0),b1(0),b2(0);
if Bdate != Bdate[1] Then
{
var1 = O;
}
Else
{
if H[1] == L[1] and v[1] == 0 and
v >= 1 and
(abs(C[1]-A1[1]) <= PriceScale*1 or
abs(C[1]-A1[1]) <= PriceScale*1) Then
var1 = O;
}
Var2 = Floor((var1*0.1)/PriceScale)*PriceScale;
if var1*0.1 > Var2 Then
{
Var2 = Var2+PriceScale;
}
a1 = var1+Var2;
b1 = var1-Var2;
if C >= a1 and C[1] < a1[1] Then
Buy();
if C <= b1 and C[1] > b1[1] Then
Sell();
즐거운 하루되세요
> 하리마우 님이 쓴 글입니다.
> 제목 : 정적 VI
> 하이투자증권 변동성완화장치 발동현황의 가격과 지표식이 아래 그림1과 2처럼 일치가 되지 않아 문의드립니다.
1. 지표식 : 일치가 되도록 부탁드립니다~~ 그리고 수평선 끝 상단에 가격(0.00%)을 적색으로 표시
2. 강조식 : 봉을 노란색, 봉 상단에 * 표시
3. 시스템식 : 분봉에서 돌파시 매수, 이탈시 매도
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : a1(0),a2(0),b1(0),b2(0);
if o[1]==h[1]&&o[1]==l[1]&&(v[1]==0||v[1]>=1)&&v>=1 Then{
a1 = o*1.1;
b1 = o*0.9;
}
if date >= 19981207 then
{
if CodeCategory() == 2 then
{
if date >= 20030721 then
{
up1 = int(a1/100+0.00001)*100;
up2 = int(a1/100+0.00001)*100;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/5+0.00001)*5;
up7 = int(a1/1+0.00001)*1;
}
else {
up1 = int(a1/1000+0.00001)*1000;
up2 = int(a1/500+0.00001)*500;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/10+0.00001)*10;
up7 = int(a1/1+0.00001)*1;
}
}
Else
{
up1 = int(a1/1000+0.00001)*1000;
up2 = int(a1/500+0.00001)*500;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/5+0.00001)*5;
up7 = int(a1/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then
{
if sdate < 20101004 Then
{
If a1 >= 500000 Then
a2 = up1;
Else If a1 >= 100000 Then
a2 = iff(up2>=500000, up1, up2);
Else If a1 >= 50000 Then
a2 = iff(up3>=100000, up2, up3);
Else If a1 >= 10000 Then
a2 = iff(up4>=50000, up3, up4);
Else If a1 >= 5000 Then
a2 = iff(up5>=10000, up4, up5);
Else If a1 >= 1000 Then
a2 = iff(up5>=5000, up5, up6);
Else
a2 = iff(up6>=1000, up6, up6);
}
Else
{
If a1 >= 500000 Then
a2 = up1;
Else If a1 >= 100000 Then
a2 = iff(up2>=500000, up1, up2);
Else If a1 >= 50000 Then
a2 = iff(up3>=100000, up2, up3);
Else If a1 >= 10000 Then
a2 = iff(up4>=50000, up3, up4);
Else If a1 >= 5000 Then
a2 = iff(up5>=10000, up4, up5);
Else If a1 >= 1000 Then
a2 = iff(up5>=5000, up5, up6);
Else
a2 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
a2 = up6;
}
}
if date >= 19981207 then
{
if CodeCategory() == 2 then
{
if date >= 20030721 then
{
dn1 = int(b1/100+0.00001)*100;
dn2 = int(b1/100+0.00001)*100;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/5+0.00001)*5;
dn7 = int(b1/1+0.00001)*1;
}
else {
dn1 = int(b1/1000+0.00001)*1000;
dn2 = int(b1/500+0.00001)*500;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/10+0.00001)*10;
dn7 = int(b1/1+0.00001)*1;
}
}
Else
{
dn1 = int(b1/1000+0.00001)*1000;
dn2 = int(b1/500+0.00001)*500;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/5+0.00001)*5;
dn7 = int(b1/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then
{
if sdate < 20101004 Then
{
If b1 >= 500000 Then
b2 = dn1;
Else If b1 >= 100000 Then
b2 = iff(dn2>=500000, dn1, dn2);
Else If b1 >= 50000 Then
b2 = iff(dn3>=100000, dn2, dn3);
Else If b1 >= 10000 Then
b2 = iff(dn4>=50000, dn3, dn4);
Else If b1 >= 5000 Then
b2 = iff(dn5>=10000, dn4, dn5);
Else If b1 >= 1000 Then
b2 = iff(dn5>=5000, dn5, dn6);
Else
b2 = iff(dn6>=1000, dn6, dn6);
}
Else
{
If b1 >= 500000 Then
b2 = dn1;
Else If b1 >= 100000 Then
b2 = iff(dn2>=500000, dn1, dn2);
Else If b1 >= 50000 Then
b2 = iff(dn3>=100000, dn2, dn3);
Else If b1 >= 10000 Then
b2 = iff(dn4>=50000, dn3, dn4);
Else If b1 >= 5000 Then
b2 = iff(dn5>=10000, dn4, dn5);
Else If b1 >= 1000 Then
b2 = iff(dn5>=5000, dn5, dn6);
Else
b2 = iff(dn6>=1000, dn6, dn7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
b2 = dn6;
}
}
plot1(floor(a2));
plot2(Ceiling(b2));