커뮤니티

240분봉으로 구현 요청 드립니다.

프로필 이미지
hugnkiss
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)); 감사합니다.