커뮤니티
240분봉으로 구현 요청 드립니다.
2013-12-18 18:40:53
205
글번호 70622
120분봉에서 적용할 수 있도록 아래 수식을 240분봉으로 변환 요청 드립니다.
1.
Input: Length(14);
Var: BBUp(0), BBDown(0);
Var: RV(0), RVH(0), RVL(0);
VALUE1 = Std(H,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF H[Var1] > H[Var1+1] THEN
VALUE10 = VALUE10 + VALUE1[Var1];
IF H[Var1] <= H[Var1+1] THEN
VALUE11 = VALUE11 + VALUE1[Var1];
}
}
IF Index > 23 THEN
{
IF H > H[1] THEN
VALUE10 = ((Length-1)*VALUE10[1]+VALUE1)/Length;
ELSE
VALUE10 = (Length-1)*VALUE10[1]/Length;
IF H < H[1] THEN
VALUE11 = ((Length-1)*VALUE11[1]+VALUE1)/Length;
ELSE
VALUE11 = (Length-1)*VALUE11[1]/Length;
RVH = 100 * (VALUE10)/(VALUE10+VALUE11);
}
VALUE2 = Std(L,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF L[Var1] > L[Var1+1] THEN
VALUE20 = VALUE20 + VALUE2[Var1];
IF L[Var1] <= L[Var1+1] THEN
VALUE21 = VALUE21 + VALUE2[Var1];
}
}
IF Index > 23 THEN
{
IF L > L[1] THEN
VALUE20 = ((Length-1)*VALUE20[1]+VALUE2)/Length;
ELSE
VALUE20 = (Length-1)*VALUE20[1]/Length;
IF L < L[1] THEN
VALUE21 = ((Length-1)*VALUE21[1]+VALUE2)/Length;
ELSE
VALUE21 = (Length-1)*VALUE21[1]/Length;
RVL = 100 * (VALUE20)/(VALUE20+VALUE21);
}
RV = AVERAGE((RVH+RVL)/2, 5);
BBUp = ma(RV, 20) + (2 * std(RV, 20));
BBDown = ma(RV, 20) - (2 * std(RV, 20));
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
variables: VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 ), VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
감사합니다.
답변 3
예스스탁 예스스탁 답변
2013-12-19 11:24:05
안녕하세요
예스스탁입니다.
Input: N(240),Length(14),stdP(10),BBperiod(20),Dv(2);
Var: BBUp(0), BBDown(0);
Var: TF(0),FF(0),cnt(0),Idx(0),V1(0);
var : count(0),counter(0);
var : sumH(0),mavH(0),SumSqrtH(0);
var : sumL(0),mavL(0),SumSqrtL(0);
var : sumRv(0),sum(0),mav(0),SumSqrt(0),Stdv(0);
Array : HH[50](0),LL[50](0),StdH[50](0),StdL[50](0);
Array : Val10[50](0),val11[50](0),Val20[50](0),val21[50](0);
Array : RVH[50](0),RVL[50](0),RV[50](0);
if date != date[1] Then
FF = TimeToMinutes(stime);
TF = (TimeToMinutes(stime)-FF)%N;
if index > 0 and (dayindex == 0 or (TF < TF[1] and stime > stime[1])) Then{
Idx = Idx+1;
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
StdH[cnt] = StdH[cnt-1][1];
StdL[cnt] = StdL[cnt-1][1];
val10[cnt] = val10[cnt-1][1];
val11[cnt] = val11[cnt-1][1];
val20[cnt] = val20[cnt-1][1];
val21[cnt] = val21[cnt-1][1];
RVH[cnt] = RVH[cnt-1][1];
RVL[cnt] = RVL[cnt-1][1];
RV[cnt] = RV[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
If HH[stdP-1] > 0 and LL[stdP-1] > 0 Then {
sumH = 0;
sumL = 0;
for count = 0 to stdP-1{
sumH = sumH+HH[count];
sumL = sumL+LL[count];
}
mavH = sumH/stdP;
mavL = sumL/stdP;
SumSqrtH = 0;
SumSqrtL = 0;
For Counter = 0 To stdP-1{
SumSqrtH = SumSqrtH + (HH[Counter] - mavH) * (HH[Counter] - mavH);
SumSqrtL = SumSqrtL + (LL[Counter] - mavL) * (LL[Counter] - mavL);
}
StdH[0] = SquareRoot(SumSqrtH / stdP);
StdL[0] = SquareRoot(SumSqrtL / stdP);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF HH[V1] > HH[V1+1] THEN
VAL10[0] = VAL10[0] + StdH[V1];
IF HH[V1] <= HH[V1+1] THEN
VAL11[0] = VAL11[0] + StdH[V1];
}
}
IF idx > 23 THEN
{
IF HH[0] > HH[1] THEN
VAL10[0] = ((Length-1)*VAL10[1]+StdH[0])/Length;
ELSE
VAL10[0] = (Length-1)*VAL10[1]/Length;
IF HH[0] < HH[1] THEN
VAL11[0] = ((Length-1)*VAL11[1]+StdH[0])/Length;
ELSE
VAL11[0] = (Length-1)*VAL11[1]/Length;
RVH[0] = 100 * (VAL10[0])/(VAL10[0]+VAL11[0]);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF LL[V1] > LL[V1+1] THEN
VAL20[0] = VAL20[0] + StdL[V1];
IF LL[V1] <= LL[V1+1] THEN
VAL21[0] = VAL21[0] + StdL[V1];
}
}
IF idx > 23 THEN
{
IF LL[0] > LL[1] THEN
VAL20[0] = ((Length-1)*VAL20[1]+StdL[0])/Length;
ELSE
VAL20[0] = (Length-1)*VAL20[1]/Length;
IF Ll[0] < LL[1] THEN
VAL21[0] = ((Length-1)*VAL21[1]+StdL[0])/Length;
ELSE
VAL21[0] = (Length-1)*VAL21[1]/Length;
RVL[0] = 100 * (VAL20[0])/(VAL20[0]+VAL21[0]);
}
if RVH[4] > 0 Then{
sumRV = 0;
for cnt = 0 to 4{
sumRV = sumRv+(RVH[cnt]+RVL[cnt])/2;
}
RV[0] = SumRv/5;
}
if RV[BBperiod-1] > 0 Then{
sum = 0;
for cnt = 0 to BBperiod-1{
sum = sum+RV[cnt];
}
mav = Sum/BBperiod;
SumSqrt = 0;
For Counter = 0 To BBperiod-1 {
SumSqrt = SumSqrt + (RV[Counter] - mav) * (RV[Counter] - mav);
}
Stdv = SquareRoot(SumSqrt / BBperiod);
BBUp = mav + (dv * stdv);
BBDown = mav - (dv * stdv);
plot1(BBup);
plot2(BBDown);
}
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
var : VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 );
var : VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
plot1(VPCI_Up);
plot2(VPCI_Down);
즐거운 하루되세요
> hugnkiss 님이 쓴 글입니다.
> 제목 : 240분봉으로 구현 요청 드립니다.
> 120분봉에서 적용할 수 있도록 아래 수식을 240분봉으로 변환 요청 드립니다.
1.
Input: Length(14);
Var: BBUp(0), BBDown(0);
Var: RV(0), RVH(0), RVL(0);
VALUE1 = Std(H,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF H[Var1] > H[Var1+1] THEN
VALUE10 = VALUE10 + VALUE1[Var1];
IF H[Var1] <= H[Var1+1] THEN
VALUE11 = VALUE11 + VALUE1[Var1];
}
}
IF Index > 23 THEN
{
IF H > H[1] THEN
VALUE10 = ((Length-1)*VALUE10[1]+VALUE1)/Length;
ELSE
VALUE10 = (Length-1)*VALUE10[1]/Length;
IF H < H[1] THEN
VALUE11 = ((Length-1)*VALUE11[1]+VALUE1)/Length;
ELSE
VALUE11 = (Length-1)*VALUE11[1]/Length;
RVH = 100 * (VALUE10)/(VALUE10+VALUE11);
}
VALUE2 = Std(L,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF L[Var1] > L[Var1+1] THEN
VALUE20 = VALUE20 + VALUE2[Var1];
IF L[Var1] <= L[Var1+1] THEN
VALUE21 = VALUE21 + VALUE2[Var1];
}
}
IF Index > 23 THEN
{
IF L > L[1] THEN
VALUE20 = ((Length-1)*VALUE20[1]+VALUE2)/Length;
ELSE
VALUE20 = (Length-1)*VALUE20[1]/Length;
IF L < L[1] THEN
VALUE21 = ((Length-1)*VALUE21[1]+VALUE2)/Length;
ELSE
VALUE21 = (Length-1)*VALUE21[1]/Length;
RVL = 100 * (VALUE20)/(VALUE20+VALUE21);
}
RV = AVERAGE((RVH+RVL)/2, 5);
BBUp = ma(RV, 20) + (2 * std(RV, 20));
BBDown = ma(RV, 20) - (2 * std(RV, 20));
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
variables: VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 ), VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
감사합니다.
hugnkiss
2013-12-19 12:27:59
답변 감사드립니다.
그런데 두번째 수식은 그대로인데요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 240분봉으로 구현 요청 드립니다.
>
안녕하세요
예스스탁입니다.
Input: N(240),Length(14),stdP(10),BBperiod(20),Dv(2);
Var: BBUp(0), BBDown(0);
Var: TF(0),FF(0),cnt(0),Idx(0),V1(0);
var : count(0),counter(0);
var : sumH(0),mavH(0),SumSqrtH(0);
var : sumL(0),mavL(0),SumSqrtL(0);
var : sumRv(0),sum(0),mav(0),SumSqrt(0),Stdv(0);
Array : HH[50](0),LL[50](0),StdH[50](0),StdL[50](0);
Array : Val10[50](0),val11[50](0),Val20[50](0),val21[50](0);
Array : RVH[50](0),RVL[50](0),RV[50](0);
if date != date[1] Then
FF = TimeToMinutes(stime);
TF = (TimeToMinutes(stime)-FF)%N;
if index > 0 and (dayindex == 0 or (TF < TF[1] and stime > stime[1])) Then{
Idx = Idx+1;
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
StdH[cnt] = StdH[cnt-1][1];
StdL[cnt] = StdL[cnt-1][1];
val10[cnt] = val10[cnt-1][1];
val11[cnt] = val11[cnt-1][1];
val20[cnt] = val20[cnt-1][1];
val21[cnt] = val21[cnt-1][1];
RVH[cnt] = RVH[cnt-1][1];
RVL[cnt] = RVL[cnt-1][1];
RV[cnt] = RV[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
If HH[stdP-1] > 0 and LL[stdP-1] > 0 Then {
sumH = 0;
sumL = 0;
for count = 0 to stdP-1{
sumH = sumH+HH[count];
sumL = sumL+LL[count];
}
mavH = sumH/stdP;
mavL = sumL/stdP;
SumSqrtH = 0;
SumSqrtL = 0;
For Counter = 0 To stdP-1{
SumSqrtH = SumSqrtH + (HH[Counter] - mavH) * (HH[Counter] - mavH);
SumSqrtL = SumSqrtL + (LL[Counter] - mavL) * (LL[Counter] - mavL);
}
StdH[0] = SquareRoot(SumSqrtH / stdP);
StdL[0] = SquareRoot(SumSqrtL / stdP);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF HH[V1] > HH[V1+1] THEN
VAL10[0] = VAL10[0] + StdH[V1];
IF HH[V1] <= HH[V1+1] THEN
VAL11[0] = VAL11[0] + StdH[V1];
}
}
IF idx > 23 THEN
{
IF HH[0] > HH[1] THEN
VAL10[0] = ((Length-1)*VAL10[1]+StdH[0])/Length;
ELSE
VAL10[0] = (Length-1)*VAL10[1]/Length;
IF HH[0] < HH[1] THEN
VAL11[0] = ((Length-1)*VAL11[1]+StdH[0])/Length;
ELSE
VAL11[0] = (Length-1)*VAL11[1]/Length;
RVH[0] = 100 * (VAL10[0])/(VAL10[0]+VAL11[0]);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF LL[V1] > LL[V1+1] THEN
VAL20[0] = VAL20[0] + StdL[V1];
IF LL[V1] <= LL[V1+1] THEN
VAL21[0] = VAL21[0] + StdL[V1];
}
}
IF idx > 23 THEN
{
IF LL[0] > LL[1] THEN
VAL20[0] = ((Length-1)*VAL20[1]+StdL[0])/Length;
ELSE
VAL20[0] = (Length-1)*VAL20[1]/Length;
IF Ll[0] < LL[1] THEN
VAL21[0] = ((Length-1)*VAL21[1]+StdL[0])/Length;
ELSE
VAL21[0] = (Length-1)*VAL21[1]/Length;
RVL[0] = 100 * (VAL20[0])/(VAL20[0]+VAL21[0]);
}
if RVH[4] > 0 Then{
sumRV = 0;
for cnt = 0 to 4{
sumRV = sumRv+(RVH[cnt]+RVL[cnt])/2;
}
RV[0] = SumRv/5;
}
if RV[BBperiod-1] > 0 Then{
sum = 0;
for cnt = 0 to BBperiod-1{
sum = sum+RV[cnt];
}
mav = Sum/BBperiod;
SumSqrt = 0;
For Counter = 0 To BBperiod-1 {
SumSqrt = SumSqrt + (RV[Counter] - mav) * (RV[Counter] - mav);
}
Stdv = SquareRoot(SumSqrt / BBperiod);
BBUp = mav + (dv * stdv);
BBDown = mav - (dv * stdv);
plot1(BBup);
plot2(BBDown);
}
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
var : VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 );
var : VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
plot1(VPCI_Up);
plot2(VPCI_Down);
즐거운 하루되세요
> hugnkiss 님이 쓴 글입니다.
> 제목 : 240분봉으로 구현 요청 드립니다.
> 120분봉에서 적용할 수 있도록 아래 수식을 240분봉으로 변환 요청 드립니다.
1.
Input: Length(14);
Var: BBUp(0), BBDown(0);
Var: RV(0), RVH(0), RVL(0);
VALUE1 = Std(H,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF H[Var1] > H[Var1+1] THEN
VALUE10 = VALUE10 + VALUE1[Var1];
IF H[Var1] <= H[Var1+1] THEN
VALUE11 = VALUE11 + VALUE1[Var1];
}
}
IF Index > 23 THEN
{
IF H > H[1] THEN
VALUE10 = ((Length-1)*VALUE10[1]+VALUE1)/Length;
ELSE
VALUE10 = (Length-1)*VALUE10[1]/Length;
IF H < H[1] THEN
VALUE11 = ((Length-1)*VALUE11[1]+VALUE1)/Length;
ELSE
VALUE11 = (Length-1)*VALUE11[1]/Length;
RVH = 100 * (VALUE10)/(VALUE10+VALUE11);
}
VALUE2 = Std(L,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF L[Var1] > L[Var1+1] THEN
VALUE20 = VALUE20 + VALUE2[Var1];
IF L[Var1] <= L[Var1+1] THEN
VALUE21 = VALUE21 + VALUE2[Var1];
}
}
IF Index > 23 THEN
{
IF L > L[1] THEN
VALUE20 = ((Length-1)*VALUE20[1]+VALUE2)/Length;
ELSE
VALUE20 = (Length-1)*VALUE20[1]/Length;
IF L < L[1] THEN
VALUE21 = ((Length-1)*VALUE21[1]+VALUE2)/Length;
ELSE
VALUE21 = (Length-1)*VALUE21[1]/Length;
RVL = 100 * (VALUE20)/(VALUE20+VALUE21);
}
RV = AVERAGE((RVH+RVL)/2, 5);
BBUp = ma(RV, 20) + (2 * std(RV, 20));
BBDown = ma(RV, 20) - (2 * std(RV, 20));
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
variables: VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 ), VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
감사합니다.
예스스탁 예스스탁 답변
2013-12-19 14:06:37
안녕하세요
예스스탁입니다.
잘못 붙여드렸습니다.
2번째 식입니다.
inputs : N(240),Length1(5), Length2(20), VPCIAvgLen(10), BBPeriod(20);
var : FF(0),TF(0),VolValue(0),cnt(0);
var : VolumeSum1(0),sumCv1(0),VWMA1(0),VolumeSum2(0),sumCV2(0),VWMA2(0);
var : sumC1(0),SumC2(0),sumV1(0),SumV2(0),maC1(0),maC2(0),maV1(0),maV2(0);
var : VP(0),VPR(0),VM(0),SumSqrt(0),Stdv(0),VPCI_Down(0),VPCI_up(0);
var : SumVPCI1(0),AvgVPCI(0),SumVPCI2(0),AvgVPC2(0);
Array : VV[50](0),CC[50](0),VPCI[50](0);
if date != date[1] Then
FF = TimeToMinutes(stime);
TF = (TimeToMinutes(stime)-FF)%N;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
if index > 0 and (dayindex == 0 or (TF < TF[1] and stime > stime[1])) Then{
VV[0] = 0;
for cnt = 1 to 49{
VV[cnt] = VV[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
VPCI[cnt] = VPCI[cnt-1][1];
}
}
VV[0] = VV[0]+VolValue;
CC[0] = C;
if VV[Length1-1] > 0 Then{
VolumeSum1 = 0;
SumCV1 = 0;
SumC1 = 0;
SumV1 = 0;
for cnt = 0 to Length1-1{
VolumeSum1 = VolumeSum1 +VV[cnt];
SumCV1 = sumCV1 + (CC[cnt]*VV[cnt]);
SumC1 = sumC1 + CC[cnt];
SumV1 = sumV1 + VV[cnt];
}
VWMA1 = sumCV1/VolumeSum1;
MAC1 = sumC1/Length1;
MAV1 = sumV1/Length1;
VPR = VWMA1 / maC1;
}
if VV[Length2-1] > 0 Then{
VolumeSum2 = 0;
SumCV2 = 0;
SumC2 = 0;
SumV2 = 0;
for cnt = 0 to Length2-1{
VolumeSum2 = VolumeSum2 +VV[cnt];
SumCV2 = sumCV2 + (CC[cnt]*VV[cnt]);
SumC2 = sumC2 + CC[cnt];
SumV2 = sumV2 + VV[cnt];
}
VWMA2 = sumCV2/VolumeSum2;
MAC2 = sumC2/Length2;
MAV2 = sumV2/Length2;
VP = VWMA2 - maC2 ;
VM = MaV1/MAV2;
VPCI[0] = VP * VPR * VM ;
SumVPCI1 = 0;
for cnt = 0 to VPCIAvgLen-1{
SumVPCI1 = SumVPCI1 + VPCI[cnt];
}
AvgVPCI = SumVPCI1/VPCIAvgLen;
SumVPCI2 = 0;
for cnt = 0 to BBPeriod-1{
SumVPCI2 = SumVPCI2 + VPCI[cnt];
}
AvgVPC2 = SumVPCI2/BBPeriod;
SumSqrt = 0;
For cnt = 0 To BBperiod-1 {
SumSqrt = SumSqrt + (VPCI[cnt] - AvgVPC2) * (VPCI[cnt] - AvgVPC2);
}
Stdv = SquareRoot(SumSqrt / BBperiod);
VPCI_Up = AvgVPC2 + (2 * Stdv);
VPCI_Down = AvgVPC2 - (2 * Stdv);
}
plot1(VPCI_Up);
plot2(VPCI_Down);
즐거운 하루되세요
> hugnkiss 님이 쓴 글입니다.
> 제목 : Re : 두번째 질문은 수정 안되어 있네요??
> 답변 감사드립니다.
그런데 두번째 수식은 그대로인데요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 240분봉으로 구현 요청 드립니다.
>
안녕하세요
예스스탁입니다.
Input: N(240),Length(14),stdP(10),BBperiod(20),Dv(2);
Var: BBUp(0), BBDown(0);
Var: TF(0),FF(0),cnt(0),Idx(0),V1(0);
var : count(0),counter(0);
var : sumH(0),mavH(0),SumSqrtH(0);
var : sumL(0),mavL(0),SumSqrtL(0);
var : sumRv(0),sum(0),mav(0),SumSqrt(0),Stdv(0);
Array : HH[50](0),LL[50](0),StdH[50](0),StdL[50](0);
Array : Val10[50](0),val11[50](0),Val20[50](0),val21[50](0);
Array : RVH[50](0),RVL[50](0),RV[50](0);
if date != date[1] Then
FF = TimeToMinutes(stime);
TF = (TimeToMinutes(stime)-FF)%N;
if index > 0 and (dayindex == 0 or (TF < TF[1] and stime > stime[1])) Then{
Idx = Idx+1;
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
StdH[cnt] = StdH[cnt-1][1];
StdL[cnt] = StdL[cnt-1][1];
val10[cnt] = val10[cnt-1][1];
val11[cnt] = val11[cnt-1][1];
val20[cnt] = val20[cnt-1][1];
val21[cnt] = val21[cnt-1][1];
RVH[cnt] = RVH[cnt-1][1];
RVL[cnt] = RVL[cnt-1][1];
RV[cnt] = RV[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
If HH[stdP-1] > 0 and LL[stdP-1] > 0 Then {
sumH = 0;
sumL = 0;
for count = 0 to stdP-1{
sumH = sumH+HH[count];
sumL = sumL+LL[count];
}
mavH = sumH/stdP;
mavL = sumL/stdP;
SumSqrtH = 0;
SumSqrtL = 0;
For Counter = 0 To stdP-1{
SumSqrtH = SumSqrtH + (HH[Counter] - mavH) * (HH[Counter] - mavH);
SumSqrtL = SumSqrtL + (LL[Counter] - mavL) * (LL[Counter] - mavL);
}
StdH[0] = SquareRoot(SumSqrtH / stdP);
StdL[0] = SquareRoot(SumSqrtL / stdP);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF HH[V1] > HH[V1+1] THEN
VAL10[0] = VAL10[0] + StdH[V1];
IF HH[V1] <= HH[V1+1] THEN
VAL11[0] = VAL11[0] + StdH[V1];
}
}
IF idx > 23 THEN
{
IF HH[0] > HH[1] THEN
VAL10[0] = ((Length-1)*VAL10[1]+StdH[0])/Length;
ELSE
VAL10[0] = (Length-1)*VAL10[1]/Length;
IF HH[0] < HH[1] THEN
VAL11[0] = ((Length-1)*VAL11[1]+StdH[0])/Length;
ELSE
VAL11[0] = (Length-1)*VAL11[1]/Length;
RVH[0] = 100 * (VAL10[0])/(VAL10[0]+VAL11[0]);
}
IF idx == 23 and TF > 0 THEN
{
FOR V1 = 0 TO Length-1
{
IF LL[V1] > LL[V1+1] THEN
VAL20[0] = VAL20[0] + StdL[V1];
IF LL[V1] <= LL[V1+1] THEN
VAL21[0] = VAL21[0] + StdL[V1];
}
}
IF idx > 23 THEN
{
IF LL[0] > LL[1] THEN
VAL20[0] = ((Length-1)*VAL20[1]+StdL[0])/Length;
ELSE
VAL20[0] = (Length-1)*VAL20[1]/Length;
IF Ll[0] < LL[1] THEN
VAL21[0] = ((Length-1)*VAL21[1]+StdL[0])/Length;
ELSE
VAL21[0] = (Length-1)*VAL21[1]/Length;
RVL[0] = 100 * (VAL20[0])/(VAL20[0]+VAL21[0]);
}
if RVH[4] > 0 Then{
sumRV = 0;
for cnt = 0 to 4{
sumRV = sumRv+(RVH[cnt]+RVL[cnt])/2;
}
RV[0] = SumRv/5;
}
if RV[BBperiod-1] > 0 Then{
sum = 0;
for cnt = 0 to BBperiod-1{
sum = sum+RV[cnt];
}
mav = Sum/BBperiod;
SumSqrt = 0;
For Counter = 0 To BBperiod-1 {
SumSqrt = SumSqrt + (RV[Counter] - mav) * (RV[Counter] - mav);
}
Stdv = SquareRoot(SumSqrt / BBperiod);
BBUp = mav + (dv * stdv);
BBDown = mav - (dv * stdv);
plot1(BBup);
plot2(BBDown);
}
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
var : VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 );
var : VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
plot1(VPCI_Up);
plot2(VPCI_Down);
즐거운 하루되세요
> hugnkiss 님이 쓴 글입니다.
> 제목 : 240분봉으로 구현 요청 드립니다.
> 120분봉에서 적용할 수 있도록 아래 수식을 240분봉으로 변환 요청 드립니다.
1.
Input: Length(14);
Var: BBUp(0), BBDown(0);
Var: RV(0), RVH(0), RVL(0);
VALUE1 = Std(H,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF H[Var1] > H[Var1+1] THEN
VALUE10 = VALUE10 + VALUE1[Var1];
IF H[Var1] <= H[Var1+1] THEN
VALUE11 = VALUE11 + VALUE1[Var1];
}
}
IF Index > 23 THEN
{
IF H > H[1] THEN
VALUE10 = ((Length-1)*VALUE10[1]+VALUE1)/Length;
ELSE
VALUE10 = (Length-1)*VALUE10[1]/Length;
IF H < H[1] THEN
VALUE11 = ((Length-1)*VALUE11[1]+VALUE1)/Length;
ELSE
VALUE11 = (Length-1)*VALUE11[1]/Length;
RVH = 100 * (VALUE10)/(VALUE10+VALUE11);
}
VALUE2 = Std(L,10);
IF Index == 23 THEN
{
FOR Var1 = 0 TO Length-1
{
IF L[Var1] > L[Var1+1] THEN
VALUE20 = VALUE20 + VALUE2[Var1];
IF L[Var1] <= L[Var1+1] THEN
VALUE21 = VALUE21 + VALUE2[Var1];
}
}
IF Index > 23 THEN
{
IF L > L[1] THEN
VALUE20 = ((Length-1)*VALUE20[1]+VALUE2)/Length;
ELSE
VALUE20 = (Length-1)*VALUE20[1]/Length;
IF L < L[1] THEN
VALUE21 = ((Length-1)*VALUE21[1]+VALUE2)/Length;
ELSE
VALUE21 = (Length-1)*VALUE21[1]/Length;
RVL = 100 * (VALUE20)/(VALUE20+VALUE21);
}
RV = AVERAGE((RVH+RVL)/2, 5);
BBUp = ma(RV, 20) + (2 * std(RV, 20));
BBDown = ma(RV, 20) - (2 * std(RV, 20));
2.
inputs:Length1( 5 ), Length2( 20 ), VPCIAvgLen( 10 ), BBPeriod(20);
variables: VolValue( 0 ), VolumeSum1( 0 ), VolumeSum2( 0 ), VWMA1( 0 ), VWMA2( 0 ), VP( 0 ), VPR( 0 ), VM( 0 ), VPCI( 0 ), AvgVPCI( 0 ), OSC(0), VPCI_Up(0), VPCI_Down(0) ;
if DataCompress >= 2 then
VolValue = Volume ;
else
VolValue = Ticks ;
VolumeSum1 = AccumN( VolValue, Length1 ) ;
if VolumeSum1 > 0 then
VWMA1 = AccumN( C * VolValue , Length1 ) / VolumeSum1 ;
VolumeSum2 = AccumN( VolValue, Length2 ) ;
if VolumeSum2 > 0 then
VWMA2 = AccumN( C * VolValue , Length2 ) / VolumeSum2 ;
VP = VWMA2 - Ma( C, Length2 ) ;
VPR = VWMA1 / Ma( C, Length1 ) ;
VM = Ma( VolValue, Length1 ) / MA( VolValue, Length2 ) ;
VPCI = VP * VPR * VM ;
AvgVPCI = Ma( VPCI, VPCIAvgLen ) ;
VPCI_Up = ma(VPCI, BBPeriod) + (2 * std(VPCI, BBPeriod));
VPCI_Down = ma(VPCI, BBPeriod) - (2 * std(VPCI, BBPeriod));
감사합니다.
다음글