커뮤니티

수식문의

프로필 이미지
ksks
2026-06-07 23:09:41
64
글번호 232297
답변완료

아래 수식은

TRADING VIEW에서  SESSION VWAP으로 종가가 LOW3선(중심선-3표준편차) 돌파를 구하는 것입니다.

이를 중심선돌파를 검색(전일종가대비 5%이상 상승하는 봉으로)하는 것으로 변경요청드립니다.(A)

또, 지수이평처럼 그 중심선을 한번 더 평활화(?)하고, 그 "중심선값이 3봉(2봉전, 1봉전, 0봉)간 상승+5%상승종가가 0봉에 그 평활된 중심선돌파"하는 것을 검색하는 게 가능한가요?

(현 중심선을 3봉간 상승으로 볼 시 나오는 속임수를 피하고자)(B)

- (B)가 된다면 (A)는 생략


Input:

  SigMode(3),    // 1=-1sig, 2=-2sig, 3=-3sig(표준), 4=+1sig, 5=+2sig, 6=+3sig

  WinLen(20),

  Mult1(1.0),

  Mult2(2.0),

  Mult3(3.0);


Vars:

  src(0), pv(0), ppv(0),

  sumPV(0), sumVol(0), sumPPV(0),

  vwapVal(0), vrnc(0), stdv(0),

  up1(0), lo1(0), up2(0), lo2(0), up3(0), lo3(0),

  valid(false),

  hit(false);


// ── 한 봉 값 + 롤링 합산 ──

src = (H + L + C) / 3;

pv  = src * V;

ppv = src * src * V;


sumPV  = AccumN(pv, WinLen);

sumVol = AccumN(V, WinLen);

sumPPV = AccumN(ppv, WinLen);


valid = sumVol > 0;

if valid then

{

  vwapVal = sumPV / sumVol;

  vrnc = sumPPV / sumVol - vwapVal * vwapVal;

  if vrnc < 0 then

  {

    vrnc = 0;

  }

  stdv = SqRt(vrnc);

}

else

{

  vwapVal = src;

  stdv = 0;

}


up1 = vwapVal + stdv * Mult1;

lo1 = vwapVal - stdv * Mult1;

up2 = vwapVal + stdv * Mult2;

lo2 = vwapVal - stdv * Mult2;

up3 = vwapVal + stdv * Mult3;

lo3 = vwapVal - stdv * Mult3;


// ── 신호 조건(지표와 동일 정의) ──

// 하단(1~3): 저가<=밴드 이고 종가>밴드 (상승 반전)

// 상단(4~6): 고가>=밴드 이고 종가<밴드 (하락 반전)

hit = false;


if valid then

{

  if SigMode == 1 then

  {

    if L <= lo1 and C > lo1 then { hit = true; }

  }

  else if SigMode == 2 then

  {

    if L <= lo2 and C > lo2 then { hit = true; }

  }

  else if SigMode == 3 then

  {

    // 표준: -3sig 하단밴드 반전

    if L <= lo3 and C > lo3 then { hit = true; }

  }

  else if SigMode == 4 then

  {

    if H >= up1 and C < up1 then { hit = true; }

  }

  else if SigMode == 5 then

  {

    if H >= up2 and C < up2 then { hit = true; }

  }

  else

  {

    // SigMode == 6 (+3sig)

    if H >= up3 and C < up3 then { hit = true; }

  }

}


if hit then

{

  Find(1);

}

종목검색
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2026-06-08 14:01:36

안녕하세요 예스스탁입니다.
기존식에 돌파가 저가<=값 이고 종가>값으로 되어 있어
해당 방식으로 작성해 드립니다.
1 Input: SigMode(0),//0:중심 1=-1sig, 2=-2sig, 3=-3sig(표준), 4=+1sig, 5=+2sig, 6=+3sig WinLen(20), Mult1(1.0), Mult2(2.0), Mult3(3.0), signal(20); Vars: src(0), pv(0), ppv(0), sumPV(0), sumVol(0), sumPPV(0), vwapVal(0), vrnc(0), stdv(0), up1(0), lo1(0), up2(0), lo2(0), up3(0), lo3(0), valid(false), hit(false),sig(0); // ── 한 봉 값 + 롤링 합산 ── src = (H + L + C) / 3; pv= src * V; ppv = src * src * V; sumPV= AccumN(pv, WinLen); sumVol = AccumN(V, WinLen); sumPPV = AccumN(ppv, WinLen); valid = sumVol > 0; if valid then { vwapVal = sumPV / sumVol; vrnc = sumPPV / sumVol - vwapVal * vwapVal; if vrnc < 0 then { vrnc = 0; } stdv = SqRt(vrnc); } else { vwapVal = src; stdv = 0; } up1 = vwapVal + stdv * Mult1; lo1 = vwapVal - stdv * Mult1; up2 = vwapVal + stdv * Mult2; lo2 = vwapVal - stdv * Mult2; up3 = vwapVal + stdv * Mult3; lo3 = vwapVal - stdv * Mult3; // ── 신호 조건(지표와 동일 정의) ── // 하단(1~3): 저가<=밴드 이고 종가>밴드 (상승 반전) // 상단(4~6): 고가>=밴드 이고 종가<밴드 (하락 반전) hit = false; if valid then { if SigMode == 1 then { if L <= lo1 and C > lo1 then { hit = true; } } else if SigMode == 2 then { if L <= lo2 and C > lo2 then { hit = true; } } else if SigMode == 3 then { // 표준: -3sig 하단밴드 반전 if L <= lo3 and C > lo3 then { hit = true; } } else if SigMode == 4 then { if H >= up1 and C < up1 then { hit = true; } } else if SigMode == 5 then { if H >= up2 and C < up2 then { hit = true; } } else { // SigMode == 6 (+3sig) if H >= up3 and C < up3 then { hit = true; } } } sig = ma(vwapVal,signal); if hit and C >= C[1]*1.05 then { Find(1); } 2 Input: SigMode(0),//0:중심 1=-1sig, 2=-2sig, 3=-3sig(표준), 4=+1sig, 5=+2sig, 6=+3sig WinLen(20), Mult1(1.0), Mult2(2.0), Mult3(3.0), signal(20); Vars: src(0), pv(0), ppv(0), sumPV(0), sumVol(0), sumPPV(0), vwapVal(0), vrnc(0), stdv(0), up1(0), lo1(0), up2(0), lo2(0), up3(0), lo3(0), valid(false), hit(false),sig(0); // ── 한 봉 값 + 롤링 합산 ── src = (H + L + C) / 3; pv= src * V; ppv = src * src * V; sumPV= AccumN(pv, WinLen); sumVol = AccumN(V, WinLen); sumPPV = AccumN(ppv, WinLen); valid = sumVol > 0; if valid then { vwapVal = sumPV / sumVol; vrnc = sumPPV / sumVol - vwapVal * vwapVal; if vrnc < 0 then { vrnc = 0; } stdv = SqRt(vrnc); } else { vwapVal = src; stdv = 0; } up1 = vwapVal + stdv * Mult1; lo1 = vwapVal - stdv * Mult1; up2 = vwapVal + stdv * Mult2; lo2 = vwapVal - stdv * Mult2; up3 = vwapVal + stdv * Mult3; lo3 = vwapVal - stdv * Mult3; // ── 신호 조건(지표와 동일 정의) ── // 하단(1~3): 저가<=밴드 이고 종가>밴드 (상승 반전) // 상단(4~6): 고가>=밴드 이고 종가<밴드 (하락 반전) hit = false; if valid then { if SigMode == 1 then { if L <= lo1 and C > lo1 then { hit = true; } } else if SigMode == 2 then { if L <= lo2 and C > lo2 then { hit = true; } } else if SigMode == 3 then { // 표준: -3sig 하단밴드 반전 if L <= lo3 and C > lo3 then { hit = true; } } else if SigMode == 4 then { if H >= up1 and C < up1 then { hit = true; } } else if SigMode == 5 then { if H >= up2 and C < up2 then { hit = true; } } else { // SigMode == 6 (+3sig) if H >= up3 and C < up3 then { hit = true; } } } sig = ma(vwapVal,signal); if C > sig and L <= sig and CountIf(vwapVal>vwapVal[1],3) == 3 and C >= C[1]*1.05 then { Find(1); } 즐거운 하루되세요
프로필 이미지

ksks

2026-06-08 14:25:18

C > sig and L <= sig 대신 Crossup(C, sig)로 해도 되지요?
또, sig = ma(vwapVal,signal)는 중간선을 평활화한건가요?
프로필 이미지

예스스탁 예스스탁 답변

2026-06-08 14:26:14

예 sig가 중간선을 평균한 선이고 Crossup으로 변경하셔도 됩니다.