커뮤니티

수식문의

프로필 이미지
백진강
2015-01-12 17:39:46
177
글번호 82191
답변완료
###아래식에서 median 선언되지않는것이사용되어다고나오는데요 사용하게해주시고 수식 설명좀부탁합니다 Inputs: LineR(255), LineG(255), LineB(0), FuzzR(255), FuzzG(0), FuzzB(0), ShowDC(1); Vars: price(0), delta(0.1), gamma(0), alpha(0), beta(0), N(0), Period(0), MaxAmpl(0), Num(0), Denom(0), DC(0), DomCyc(0), Color1(0), Color2(0), Color3(0), alpha1(0), HP(0), SmoothHP(0); Arrays: II[60](0), OldI[60](0), OlderI[60](0), Q[60](0), OldQ[60](0), OlderQ[60](0), Real[60](0), OldReal[60](0), OlderReal[60](0), Imag[60](0), OldImag[60](0), OlderImag[60](0), Ampl[60](0), OldAmpl[60](0), DB[65](0), OldDB[60](0); if Currentbar > 1 then { Price = (H+L)/2; alpha1 = (1 - Sine (360 / 30)) / Cosine(360 / 30); HP = 0.5*(1 + alpha1)*(Price - Price[1]) + alpha1*HP[1]; SmoothHP = (HP + 2*HP[1] + 3*HP[2] + 3*HP[3] + 2*HP[4] + HP[5]) / 12; } IF CurrentBar < 7 Then SmoothHP = Price - Price[1]; IF CurrentBar == 1 THEN SmoothHP = 0; delta = -0.015*CurrentBar + 0.5; If delta < 0.1 then delta = 0.1; If CurrentBar > 12 Then { For N = 12 to 60 { beta = Cosine(720 / N); gamma = 1 / Cosine(1440*delta / N); alpha = gamma - SquareRoot(gamma*gamma - 1); Q[N] = (0.5*N / 6.28318)*(SmoothHP - SmoothHP[1]); II[N] = SmoothHP; Real[N] = 0.5*(1 - alpha)*(II[N] - OlderI[N]) + beta*(1 + alpha)*OldReal[N] - alpha*OlderReal[N]; Imag[N] = 0.5*(1 - alpha)*(Q[N] - OlderQ[N]) + beta*(1 + alpha)*OldImag[N] - alpha*OlderImag[N]; Ampl[N] = (Real[N]*Real[N] + Imag[N]*Imag[N]); } } For N = 12 to 60 { OlderI[N] = OldI[N]; OldI[N] = II[N]; OlderQ[N] = OldQ[N]; OldQ[N] = Q[N]; OlderReal[N] = OldReal[N]; OldReal[N] = Real[N]; OlderImag[N] = OldImag[N]; OldImag[N] = Imag[N]; OldAmpl[N] = Ampl[N]; OldDB[N] = DB[N]; } MaxAmpl = Ampl[12]; For N = 12 to 60 { If Ampl[N] > MaxAmpl then MaxAmpl = Ampl[N]; } For N = 12 to 60 { //IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -60*Log(Ampl[N] / MaxAmpl) / Log(10); IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -10*Log(0.01 / (1 - 0.99*Ampl[N] / MaxAmpl)) / Log(10); DB[N] = 0.33*DB[N] + 0.67*OldDB[N]; If DB[N] > 20 then DB[N] = 20; } Num = 0; Denom = 0; For N = 12 to 60 { If DB[N] <= 6 Then { Num = Num + N*(20 - DB[N]); Denom = Denom + (20 - DB[N]); } If Denom <> 0 Then DC = 0.5*Num / Denom; } DomCyc = median(DC, 5); If ShowDC == True Then { Plot1(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2); Plot61(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2); } For N = 12 to 60 { IF DB[N] <= 10 THEN { Color1 = LineR + DB[N]*(FuzzR - LineR) / 10; Color2 = LineG + DB[N]*(FuzzG - LineG) / 10; Color3 = LineB + DB[N]*(FuzzB - LineB) / 10; } IF DB[N] > 10 THEN { Color1 = FuzzR*(2 - DB[N] / 10); Color2 = FuzzG*(2 - DB[N] / 10); Color3 = FuzzB*(2 - DB[N] / 10); } If N == 12 Then Plot60(N/2, "S12", RGB(Color1, Color2, Color3),0,5); If N == 13 Then Plot59(N/2, "S13", RGB(Color1, Color2, Color3),0,5); If N == 14 Then Plot58(N/2, "S14", RGB(Color1, Color2, Color3),0,5);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-01-13 08:34:47

안녕하세요 예스스탁입니다. 아래내용을 사용자함수로 만드시면 됩니다. 사용자함수명 : Median 반환값형 : 숫자형 Inputs: Price(Numeric), Length(Numeric); Variables: HalfLength(0); HalfLength = Length * 0.5; IF FracPortion(HalfLength) == 0 Then Median = (NthHighest(HalfLength, Price, Length) + NthHighest(HalfLength + 1, Price, Length)) * 0.5; Else Median = NthHighest(IntPortion(HalfLength + 1), Price, Length); 즐거운 하루되세요 > 백진강 님이 쓴 글입니다. > 제목 : 수식문의 > ###아래식에서 median 선언되지않는것이사용되어다고나오는데요 사용하게해주시고 수식 설명좀부탁합니다 Inputs: LineR(255), LineG(255), LineB(0), FuzzR(255), FuzzG(0), FuzzB(0), ShowDC(1); Vars: price(0), delta(0.1), gamma(0), alpha(0), beta(0), N(0), Period(0), MaxAmpl(0), Num(0), Denom(0), DC(0), DomCyc(0), Color1(0), Color2(0), Color3(0), alpha1(0), HP(0), SmoothHP(0); Arrays: II[60](0), OldI[60](0), OlderI[60](0), Q[60](0), OldQ[60](0), OlderQ[60](0), Real[60](0), OldReal[60](0), OlderReal[60](0), Imag[60](0), OldImag[60](0), OlderImag[60](0), Ampl[60](0), OldAmpl[60](0), DB[65](0), OldDB[60](0); if Currentbar > 1 then { Price = (H+L)/2; alpha1 = (1 - Sine (360 / 30)) / Cosine(360 / 30); HP = 0.5*(1 + alpha1)*(Price - Price[1]) + alpha1*HP[1]; SmoothHP = (HP + 2*HP[1] + 3*HP[2] + 3*HP[3] + 2*HP[4] + HP[5]) / 12; } IF CurrentBar < 7 Then SmoothHP = Price - Price[1]; IF CurrentBar == 1 THEN SmoothHP = 0; delta = -0.015*CurrentBar + 0.5; If delta < 0.1 then delta = 0.1; If CurrentBar > 12 Then { For N = 12 to 60 { beta = Cosine(720 / N); gamma = 1 / Cosine(1440*delta / N); alpha = gamma - SquareRoot(gamma*gamma - 1); Q[N] = (0.5*N / 6.28318)*(SmoothHP - SmoothHP[1]); II[N] = SmoothHP; Real[N] = 0.5*(1 - alpha)*(II[N] - OlderI[N]) + beta*(1 + alpha)*OldReal[N] - alpha*OlderReal[N]; Imag[N] = 0.5*(1 - alpha)*(Q[N] - OlderQ[N]) + beta*(1 + alpha)*OldImag[N] - alpha*OlderImag[N]; Ampl[N] = (Real[N]*Real[N] + Imag[N]*Imag[N]); } } For N = 12 to 60 { OlderI[N] = OldI[N]; OldI[N] = II[N]; OlderQ[N] = OldQ[N]; OldQ[N] = Q[N]; OlderReal[N] = OldReal[N]; OldReal[N] = Real[N]; OlderImag[N] = OldImag[N]; OldImag[N] = Imag[N]; OldAmpl[N] = Ampl[N]; OldDB[N] = DB[N]; } MaxAmpl = Ampl[12]; For N = 12 to 60 { If Ampl[N] > MaxAmpl then MaxAmpl = Ampl[N]; } For N = 12 to 60 { //IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -60*Log(Ampl[N] / MaxAmpl) / Log(10); IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -10*Log(0.01 / (1 - 0.99*Ampl[N] / MaxAmpl)) / Log(10); DB[N] = 0.33*DB[N] + 0.67*OldDB[N]; If DB[N] > 20 then DB[N] = 20; } Num = 0; Denom = 0; For N = 12 to 60 { If DB[N] <= 6 Then { Num = Num + N*(20 - DB[N]); Denom = Denom + (20 - DB[N]); } If Denom <> 0 Then DC = 0.5*Num / Denom; } DomCyc = median(DC, 5); If ShowDC == True Then { Plot1(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2); Plot61(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2); } For N = 12 to 60 { IF DB[N] <= 10 THEN { Color1 = LineR + DB[N]*(FuzzR - LineR) / 10; Color2 = LineG + DB[N]*(FuzzG - LineG) / 10; Color3 = LineB + DB[N]*(FuzzB - LineB) / 10; } IF DB[N] > 10 THEN { Color1 = FuzzR*(2 - DB[N] / 10); Color2 = FuzzG*(2 - DB[N] / 10); Color3 = FuzzB*(2 - DB[N] / 10); } If N == 12 Then Plot60(N/2, "S12", RGB(Color1, Color2, Color3),0,5); If N == 13 Then Plot59(N/2, "S13", RGB(Color1, Color2, Color3),0,5); If N == 14 Then Plot58(N/2, "S14", RGB(Color1, Color2, Color3),0,5);