커뮤니티
수식문의
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);
다음글
이전글