커뮤니티
부탁드려요..
2010-01-29 22:29:38
1056
글번호 27758
지표식입니다.
메일로 부탁드립니다. 부탁드려요..
일단 TS 용 함수와 지표입니다. 두개로 분류되어져있습니다.
이 함수를 YT 형식으로.. 지표화 해보고 싶은데요.
좀 길지만.. 부탁드리겠습니다 ㅠㅠ
함수부터....
"PriceMTF"
Inputs: Factor( numericsimple ), Price( numericseries );
If Factor > 1 Then
Begin
If Price = High Then
PriceMTF = Highest( High, Factor )
Else If Price = Low Then
PriceMTF = Lowest( Low, Factor )
Else If Price = Div( ( High + Low ), 2 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) ), 2 )
Else If Price = Range Then
PriceMTF = ( Highest( High, Factor ) - Lowest( Low, Factor ) )
Else If Price = Div( ( High + Low + Close ), 3 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) + Close ), 3 )
Else If Price = Div( ( High + Low + Open + Close ), 4 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) + Open[ Factor ] + Close ), 4 )
Else
PriceMTF = Average( Price, Factor );
End
Else
PriceMTF = Price;
"MTF"
Inputs: Factor( numericsimple );
If FracPortion( Div( CurrentBar, Factor ) ) = 0 Then
MTF = True
Else
MTF = False;
"Div "
Inputs: Divend( numericsimple ), Divisor( numericsimple );
If Divend <> 0 AND Divisor <> 0 Then
Div = Divend / Divisor
Else
Div = 0;
"Natural "
Inputs: Vector( numericsimple );
Value1 = AbsValue( IntPortion( Vector ) );
If Value1 = 0 Then
Natural = 1
Else
Natural = Value1;
"Hilbert"
Inputs: Factor( numericsimple ), Price(numericseries);
Vars: Smoother(0), Detrender(0), i1(0),Q1(0),j1(0),Jq(0),i2(0),Q2(0),
x1(0),x2(0),y1(0),Y2(0),Re(0),iM(0),Period(0), p1(0), inphase( 0 ), Phase( 0 ), dp( 0 ), dp2( 0 ), quad( 0 );
If CurrentBar > 5 * Factor AND
MTF( Factor ) then
Begin
Smoother = ( 4 * Price + 3 * Price[ Factor ] + 2 * Price[ 2 * Factor ] + Price[ 3 * Factor ] ) / 10;
Detrender = ( .25 * Smoother + .75 * Smoother[ 2 * Factor ] - .75 * Smoother[ 4 * Factor ]- .25 * Smoother[ 6 * Factor ]) * ( .046 * Period[ Factor ] + .332 );
{Compute InPhase and Quadrature components}
Q1= ( .25 * Detrender + .75 * Detrender[ 2 * Factor ] - .75 * Detrender[ 4 * Factor ] - .25 * Detrender[ 6 * Factor ]) * (.046 * Period[ Factor ] + .332 );
i1 = Detrender[ 3 * Factor ];
{Advance the phase of i1 and Q1 by 90 degrees}
j1 = .25 * i1 + .75 * i1[ 2 * Factor ] - .75 * i1[ 2 * Factor ] - .25 * i1[ 2 * Factor ];
jQ = .25 * Q1 + .75 * Q1[ 2 * Factor ] - .75 * Q1[ 2 * Factor ] - .25 * Q1[ 2 * Factor ];
{Phasor addition to equalize amplitude due to
quadrature calculations (and 3 bar averaging}
i2 = i1 - jQ;
q2 = Q1 + j1;
{Smooth the i and Q components before applying the discrinator}
i2 = .15 * i2 + .85 * i2[ Factor ];
Q2 = .15 * Q2 + .85 * Q2[ Factor ];
{Homodyne Discriminator}
{Complex Conjugate Multiply}
X1 = i2 * i2[ Factor ];
x2 = i2 * Q2[ Factor ];
Y1 = Q2 * Q2[ Factor ];
Y2 = Q2 * i2[ Factor ];
Re = X1 + Y1;
im = X2 - Y2;
{Smooth to remove undesired cross products}
Re = .2 * Re + .8 * Re[ Factor ];
im = .2 * im + .8 * im[ Factor ];
{Compute Cycle Period}
If im <> 0 AND
Re <> 0 then
Period = Div( 360, ArcTangent( im / Re ) );
If Period > 1.5 * Period[ Factor ] then
Period = 1.5 * Period[ Factor ];
If Period < .67 * Period[ Factor ] then
Period = .67*Period[ Factor ];
If Period < 6 then
Period = 6;
If Period > 50 then
Period =50;
Period = .2 * Period + .8 * Period[ Factor ];
{end core code}
Hilbert=Period;
end;
"TypeAverageMTF "
Inputs: Factor( numericsimple ), Price( numericseries ), Length( numericsimple ), Type( numericsimple ), Optional( numericsimple );
Variables: Count( 0 ), Vector( 0 ),
b(0), b2(0), b3(0), e1(Price), e2(Price), e3(Price),
e4(Price), e5(Price), e6(Price), c1(0), c2(0), c3(0),
c4(0), f1(0), f2(0), Hot(0.7);
Vector = PriceMTF( Factor, Price );
If {Factor > 1 AND} MTF( Factor ) AND CurrentBar >= 2 * Factor * Length Then
Begin
If Type = 1 Then {SMA}
Begin
Value1 = 0;
For Count = 0 to Length - 1
Begin
Value1 = Value1 + Vector[ Count * Factor ];
End;
TypeAverageMTF = Div( Value1, Length );
End;
If Type = 2 Then {EMA}
Begin
If CurrentBar = Factor Then
TypeAverageMTF = Vector
Else
TypeAverageMTF = TypeAverageMTF[ Factor ] + Div( 2, ( Length + 1 ) ) * ( Price - TypeAverageMTF[ Factor ] );
End;
If Type = 3 Then {EMA - Orig}
Begin
If CurrentBar = Factor Then
TypeAverageMTF = Vector
Else
TypeAverageMTF = TypeAverageMTF[ Factor ] + Div( 1, Length ) * ( Price - TypeAverageMTF[ Factor ] );
End;
If Type = 4 Then {WMA}
Begin
Value1 = 0;
For Count = 0 to Length - 1
Begin
Value1 = Value1 + ( Length - Count ) * Vector[ Count * Factor ];
End;
Value2 = ( Length + 1 ) * Length * 0.5;
If Value2 > 0 Then
TypeAverageMTF = Div( Value1, Value2 );
End;
If Type = 5 Then {Triangular Average}
Begin
Value1 = Round( Div( Length, 2 ), 0 );
If MTF( Factor ) Then
Begin
Value2 = 0;
For Count = 0 to Length - 1 - Value1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
Value3 = Div( Value2, Length - Value1 );
Value2 = 0;
For Count = 0 to Value1 - 1
Begin
Value2 = Value2 + Value3[ Count * Factor ];
End;
TypeAverageMTF = Div( Value2, Value1 );
End
Else
TypeAverageMTF = TypeAverageMTF[1];
End;
If Type = 6 Then {Smoothed Average}
Begin
If CurrentBar = Factor Then
Begin
Value2 = 0;
For Count = 0 to Length - 1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
TypeAverageMTF = Div( Value2, Length );
End
Else
Begin
Value2 = 0;
For Count = 0 to Length - 1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
Value3 = Div( Value2, Length );
TypeAverageMTF = Div( ( Value3 * ( Length + 1 ) ) - TypeAverageMTF[ Factor ], Length );
End;
End;
If Type = 7 Then {IIR Lagless Average}
Begin
TypeAverageMTF = Div( 1, Length ) * ( 2 * Vector - Vector[ IntPortion( Div( 1, Div( 1, Length ) - 1 ) ) * Factor ] ) + ( 1 - Div( 1, Length ) ) * TypeAverageMTF[ 1 ];
End;
If Type = 8 Then {Linear Reg Line - Optional Input is TargetBar}
Begin
if Length > 1 then
Begin
Value1 = Length * ( Length - 1 ) * .5 ;
Value2 = Length * ( Length - 1 ) * ( 2 * Length - 1 ) / 6 ;
Value3 = Square( Value1 ) - Length * Value2 ;
Value4 = 0;
Value5 = 0;
for Value6 = 0 to Length - 1
begin
Value4 = Value4 + Value1 * Vector[ Value6 * Factor ] ;
Value5 = Value5 + Vector[ Value6 * Factor ];
end ;
Value7 = Div( ( Length * Value4 - Value1 * Value5), Value3 ) ;
Value8 = Div( ( Value5 - Value7 * Value1 ), Length ) ;
TypeAverageMTF = Value8 + Value7 * ( Length - 1 + - Optional ) ;
End
Else
TypeAverageMTF = 0;
End;
If Type = 9 Then {Regular MA with Optional Input as Lambda}
Begin
TypeAverageMTF =( TypeAverageMTF[Factor] * ( 1 + 2 * Optional ) + ( 2 / ( Length + 1 ) ) * ( Price - TypeAverageMTF[Factor] ) - Optional * TypeAverageMTF[2 * Factor]) / ( 1 + Optional );
End;
If Type = 10 Then {T3 Average with Optional = 1 > Series, otherwise Simple}
Begin
If Optional = 1 Then
Begin
if Length + 1 <> 0 then
begin
if CurrentBar <= 1 then
begin
b = Hot;
b2 = b * b;
b3 = b * b * b;
c1 = -b3;
c2 = 3 * b2 + 3 * b3;
c3 = -6 * b2 - 3 * b - 3 * b3;
c4 = 1 + 3 * b + b3 + 3 * b2;
f1 = 2 / (Length + 1);
f2 = 1 - f1;
end
else
begin
e1 = f1 * Vector + f2 * e1[1];
e2 = f1 * e1 + f2 * e2[1];
e3 = f1 * e2 + f2 * e3[1];
e4 = f1 * e3 + f2 * e4[1];
e5 = f1 * e4 + f2 * e5[1];
e6 = f1 * e5 + f2 * e6[1];
end;
TypeAverageMTF = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;
end;
End
Else
Begin
if Length + 1 <> 0 then
begin
if CurrentBar <= 1 then
begin
b = Hot;
b2 = b * b;
b3 = b * b * b;
c1 = -b3;
c2 = 3 * b2 + 3 * b3;
c3 = -6 * b2 - 3 * b - 3 * b3;
c4 = 1 + 3 * b + b3 + 3 * b2;
end
else
begin
f1 = 2 / (Length + 1);
f2 = 1 - f1;
e1 = f1 * Vector + f2 * e1;
e2 = f1 * e1 + f2 * e2;
e3 = f1 * e2 + f2 * e3;
e4 = f1 * e3 + f2 * e4;
e5 = f1 * e4 + f2 * e5;
e6 = f1 * e5 + f2 * e6;
end;
TypeAverageMTF = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;
End;
End;
End;
End
{Else If Factor = 1 Then
TypeAverageMTF = TypeAverage( Price, Length, Type, Optional )}
Else
TypeAverageMTF = TypeAverageMTF[1];
"_MACD "
inputs:
Factor( numericsimple ),
Price( numericseries ),
FastLength( numericsimple ), { this input assumed to be a constant >= 1 }
SlowLength( numericsimple ), { this input assumed to be a constant >= 1 }
Type( numericsimple );
Variables:
Series( 0 );
If MTF( Factor ) Then
Begin
Series = PriceMTF( Factor, Price );
_MACD = TypeAverageMTF( Factor, Series, FastLength, Type, 1 ) - TypeAverageMTF( Factor, Series, SlowLength, Type, 1 ) ;
End
Else
_MACD = _MACD[1];
"Schaff "
Input: Factor( numericsimple ),
Period( numericsimple ),{0 = Hilbert - For Stoch }
Fast( numeric ),{0 = Hilbert - For MACD }
Slow( numeric ) {0 = Hilbert - For MACD };
Variables: SFastK(0),
Series( 0 ),
StochLength( 0 ),
StochLength2( 0 ),
HH( 0 ),
LL( 0 ),
Num1( 0 ),
Den1( 0 ),
HH2( 0 ),
LL2( 0 ),
Num2( 0 ),
Den2( 0 ),Natura(0),Natura1(0), Natura2(0);
Natura=Natural( Hilbert( Factor, MedianPrice ));
If Fast<1 then
Natura1=Natura*.5
else
Natura1=fast;
If Slow<1 then
Natura2=Natura*2
else
Natura2=slow;
If MTF( Factor ) Then
Begin
Series = _MACD(Factor, medianprice, Natura1, Natura2 ,2 );
If Period < 1 Then
StochLength = Natural( Hilbert( Factor, Series ) ) * Factor / 2
Else
StochLength = Period * Factor;
If Series = Close OR
Series = medianprice Then
Begin
LL = Lowest( Low, StochLength ) ;
HH = Highest( High, StochLength ) ;
End
Else
Begin
LL = Lowest( Series, StochLength ) ;
HH = Highest( Series, StochLength ) ;
End;
Num1 = Series - LL ;
Den1 = HH - LL ;
SFastK = Div( Num1, Den1 ) * 100;
If Period < 1 Then
StochLength = Natural( Hilbert( Factor, SFastK ) ) * Factor / 2
Else
StochLength = Period * Factor;
LL2 = Lowest( SFastK, StochLength ) ;
HH2 = Highest( SFastK, StochLength ) ;
Num2 = SFastK - LL2 ;
Den2 = HH2 - LL2 ;
Schaff = Div( Num2, Den2 ) * 100 ;
End
Else
Schaff = Schaff[1]
여기까지는 함수 파일이구요
이제는 인디케이터입니다.. 파일은 하나구요.
"Schaff Indicator"
Inputs: Factor( 1 ),
Period( 0 ),
Fast( 5 ),
Slow( 34 ),
Type( 7 ),
Length( 3 ), OverSold( 20 ),
OverBought( 80 ),
OverSColor( Cyan ),
OverBColor( Red ) ;
If MTF( Factor ) Then
Begin
If Length < 1 Then
Value1 = Natural( Hilbert( Factor, Value2 ) * Factor )
Else
Value1 = Length;
Value2 = TypeAverageMTF( Factor, Schaff( Factor, Period, Fast, Slow ), Value1, Type, 0 );
Plot1( Value2, "DS" );
Plot2( OverSold, "OverSld" ) ;
Plot3( OverBought, "OverBot" ) ;
if Plot1 > OverBought then
SetPlotColor( 1, OverBColor )
else if Plot1 < OverSold then
SetPlotColor( 1, OverSColor ) ;
End;
메일주소 : jinred9@empal.com
답변 1
예스스탁 예스스탁 답변
2010-02-01 09:30:15
> 무료한나날 님이 쓴 글입니다.
> 제목 : 부탁드려요..
> 지표식입니다.
메일로 부탁드립니다. 부탁드려요..
일단 TS 용 함수와 지표입니다. 두개로 분류되어져있습니다.
이 함수를 YT 형식으로.. 지표화 해보고 싶은데요.
좀 길지만.. 부탁드리겠습니다 ㅠㅠ
함수부터....
"PriceMTF"
Inputs: Factor( numericsimple ), Price( numericseries );
If Factor > 1 Then
Begin
If Price = High Then
PriceMTF = Highest( High, Factor )
Else If Price = Low Then
PriceMTF = Lowest( Low, Factor )
Else If Price = Div( ( High + Low ), 2 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) ), 2 )
Else If Price = Range Then
PriceMTF = ( Highest( High, Factor ) - Lowest( Low, Factor ) )
Else If Price = Div( ( High + Low + Close ), 3 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) + Close ), 3 )
Else If Price = Div( ( High + Low + Open + Close ), 4 ) Then
PriceMTF = Div( ( Highest( High, Factor ) + Lowest( Low, Factor ) + Open[ Factor ] + Close ), 4 )
Else
PriceMTF = Average( Price, Factor );
End
Else
PriceMTF = Price;
"MTF"
Inputs: Factor( numericsimple );
If FracPortion( Div( CurrentBar, Factor ) ) = 0 Then
MTF = True
Else
MTF = False;
"Div "
Inputs: Divend( numericsimple ), Divisor( numericsimple );
If Divend <> 0 AND Divisor <> 0 Then
Div = Divend / Divisor
Else
Div = 0;
"Natural "
Inputs: Vector( numericsimple );
Value1 = AbsValue( IntPortion( Vector ) );
If Value1 = 0 Then
Natural = 1
Else
Natural = Value1;
"Hilbert"
Inputs: Factor( numericsimple ), Price(numericseries);
Vars: Smoother(0), Detrender(0), i1(0),Q1(0),j1(0),Jq(0),i2(0),Q2(0),
x1(0),x2(0),y1(0),Y2(0),Re(0),iM(0),Period(0), p1(0), inphase( 0 ), Phase( 0 ), dp( 0 ), dp2( 0 ), quad( 0 );
If CurrentBar > 5 * Factor AND
MTF( Factor ) then
Begin
Smoother = ( 4 * Price + 3 * Price[ Factor ] + 2 * Price[ 2 * Factor ] + Price[ 3 * Factor ] ) / 10;
Detrender = ( .25 * Smoother + .75 * Smoother[ 2 * Factor ] - .75 * Smoother[ 4 * Factor ]- .25 * Smoother[ 6 * Factor ]) * ( .046 * Period[ Factor ] + .332 );
{Compute InPhase and Quadrature components}
Q1= ( .25 * Detrender + .75 * Detrender[ 2 * Factor ] - .75 * Detrender[ 4 * Factor ] - .25 * Detrender[ 6 * Factor ]) * (.046 * Period[ Factor ] + .332 );
i1 = Detrender[ 3 * Factor ];
{Advance the phase of i1 and Q1 by 90 degrees}
j1 = .25 * i1 + .75 * i1[ 2 * Factor ] - .75 * i1[ 2 * Factor ] - .25 * i1[ 2 * Factor ];
jQ = .25 * Q1 + .75 * Q1[ 2 * Factor ] - .75 * Q1[ 2 * Factor ] - .25 * Q1[ 2 * Factor ];
{Phasor addition to equalize amplitude due to
quadrature calculations (and 3 bar averaging}
i2 = i1 - jQ;
q2 = Q1 + j1;
{Smooth the i and Q components before applying the discrinator}
i2 = .15 * i2 + .85 * i2[ Factor ];
Q2 = .15 * Q2 + .85 * Q2[ Factor ];
{Homodyne Discriminator}
{Complex Conjugate Multiply}
X1 = i2 * i2[ Factor ];
x2 = i2 * Q2[ Factor ];
Y1 = Q2 * Q2[ Factor ];
Y2 = Q2 * i2[ Factor ];
Re = X1 + Y1;
im = X2 - Y2;
{Smooth to remove undesired cross products}
Re = .2 * Re + .8 * Re[ Factor ];
im = .2 * im + .8 * im[ Factor ];
{Compute Cycle Period}
If im <> 0 AND
Re <> 0 then
Period = Div( 360, ArcTangent( im / Re ) );
If Period > 1.5 * Period[ Factor ] then
Period = 1.5 * Period[ Factor ];
If Period < .67 * Period[ Factor ] then
Period = .67*Period[ Factor ];
If Period < 6 then
Period = 6;
If Period > 50 then
Period =50;
Period = .2 * Period + .8 * Period[ Factor ];
{end core code}
Hilbert=Period;
end;
"TypeAverageMTF "
Inputs: Factor( numericsimple ), Price( numericseries ), Length( numericsimple ), Type( numericsimple ), Optional( numericsimple );
Variables: Count( 0 ), Vector( 0 ),
b(0), b2(0), b3(0), e1(Price), e2(Price), e3(Price),
e4(Price), e5(Price), e6(Price), c1(0), c2(0), c3(0),
c4(0), f1(0), f2(0), Hot(0.7);
Vector = PriceMTF( Factor, Price );
If {Factor > 1 AND} MTF( Factor ) AND CurrentBar >= 2 * Factor * Length Then
Begin
If Type = 1 Then {SMA}
Begin
Value1 = 0;
For Count = 0 to Length - 1
Begin
Value1 = Value1 + Vector[ Count * Factor ];
End;
TypeAverageMTF = Div( Value1, Length );
End;
If Type = 2 Then {EMA}
Begin
If CurrentBar = Factor Then
TypeAverageMTF = Vector
Else
TypeAverageMTF = TypeAverageMTF[ Factor ] + Div( 2, ( Length + 1 ) ) * ( Price - TypeAverageMTF[ Factor ] );
End;
If Type = 3 Then {EMA - Orig}
Begin
If CurrentBar = Factor Then
TypeAverageMTF = Vector
Else
TypeAverageMTF = TypeAverageMTF[ Factor ] + Div( 1, Length ) * ( Price - TypeAverageMTF[ Factor ] );
End;
If Type = 4 Then {WMA}
Begin
Value1 = 0;
For Count = 0 to Length - 1
Begin
Value1 = Value1 + ( Length - Count ) * Vector[ Count * Factor ];
End;
Value2 = ( Length + 1 ) * Length * 0.5;
If Value2 > 0 Then
TypeAverageMTF = Div( Value1, Value2 );
End;
If Type = 5 Then {Triangular Average}
Begin
Value1 = Round( Div( Length, 2 ), 0 );
If MTF( Factor ) Then
Begin
Value2 = 0;
For Count = 0 to Length - 1 - Value1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
Value3 = Div( Value2, Length - Value1 );
Value2 = 0;
For Count = 0 to Value1 - 1
Begin
Value2 = Value2 + Value3[ Count * Factor ];
End;
TypeAverageMTF = Div( Value2, Value1 );
End
Else
TypeAverageMTF = TypeAverageMTF[1];
End;
If Type = 6 Then {Smoothed Average}
Begin
If CurrentBar = Factor Then
Begin
Value2 = 0;
For Count = 0 to Length - 1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
TypeAverageMTF = Div( Value2, Length );
End
Else
Begin
Value2 = 0;
For Count = 0 to Length - 1
Begin
Value2 = Value2 + Vector[ Count * Factor ];
End;
Value3 = Div( Value2, Length );
TypeAverageMTF = Div( ( Value3 * ( Length + 1 ) ) - TypeAverageMTF[ Factor ], Length );
End;
End;
If Type = 7 Then {IIR Lagless Average}
Begin
TypeAverageMTF = Div( 1, Length ) * ( 2 * Vector - Vector[ IntPortion( Div( 1, Div( 1, Length ) - 1 ) ) * Factor ] ) + ( 1 - Div( 1, Length ) ) * TypeAverageMTF[ 1 ];
End;
If Type = 8 Then {Linear Reg Line - Optional Input is TargetBar}
Begin
if Length > 1 then
Begin
Value1 = Length * ( Length - 1 ) * .5 ;
Value2 = Length * ( Length - 1 ) * ( 2 * Length - 1 ) / 6 ;
Value3 = Square( Value1 ) - Length * Value2 ;
Value4 = 0;
Value5 = 0;
for Value6 = 0 to Length - 1
begin
Value4 = Value4 + Value1 * Vector[ Value6 * Factor ] ;
Value5 = Value5 + Vector[ Value6 * Factor ];
end ;
Value7 = Div( ( Length * Value4 - Value1 * Value5), Value3 ) ;
Value8 = Div( ( Value5 - Value7 * Value1 ), Length ) ;
TypeAverageMTF = Value8 + Value7 * ( Length - 1 + - Optional ) ;
End
Else
TypeAverageMTF = 0;
End;
If Type = 9 Then {Regular MA with Optional Input as Lambda}
Begin
TypeAverageMTF =( TypeAverageMTF[Factor] * ( 1 + 2 * Optional ) + ( 2 / ( Length + 1 ) ) * ( Price - TypeAverageMTF[Factor] ) - Optional * TypeAverageMTF[2 * Factor]) / ( 1 + Optional );
End;
If Type = 10 Then {T3 Average with Optional = 1 > Series, otherwise Simple}
Begin
If Optional = 1 Then
Begin
if Length + 1 <> 0 then
begin
if CurrentBar <= 1 then
begin
b = Hot;
b2 = b * b;
b3 = b * b * b;
c1 = -b3;
c2 = 3 * b2 + 3 * b3;
c3 = -6 * b2 - 3 * b - 3 * b3;
c4 = 1 + 3 * b + b3 + 3 * b2;
f1 = 2 / (Length + 1);
f2 = 1 - f1;
end
else
begin
e1 = f1 * Vector + f2 * e1[1];
e2 = f1 * e1 + f2 * e2[1];
e3 = f1 * e2 + f2 * e3[1];
e4 = f1 * e3 + f2 * e4[1];
e5 = f1 * e4 + f2 * e5[1];
e6 = f1 * e5 + f2 * e6[1];
end;
TypeAverageMTF = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;
end;
End
Else
Begin
if Length + 1 <> 0 then
begin
if CurrentBar <= 1 then
begin
b = Hot;
b2 = b * b;
b3 = b * b * b;
c1 = -b3;
c2 = 3 * b2 + 3 * b3;
c3 = -6 * b2 - 3 * b - 3 * b3;
c4 = 1 + 3 * b + b3 + 3 * b2;
end
else
begin
f1 = 2 / (Length + 1);
f2 = 1 - f1;
e1 = f1 * Vector + f2 * e1;
e2 = f1 * e1 + f2 * e2;
e3 = f1 * e2 + f2 * e3;
e4 = f1 * e3 + f2 * e4;
e5 = f1 * e4 + f2 * e5;
e6 = f1 * e5 + f2 * e6;
end;
TypeAverageMTF = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;
End;
End;
End;
End
{Else If Factor = 1 Then
TypeAverageMTF = TypeAverage( Price, Length, Type, Optional )}
Else
TypeAverageMTF = TypeAverageMTF[1];
"_MACD "
inputs:
Factor( numericsimple ),
Price( numericseries ),
FastLength( numericsimple ), { this input assumed to be a constant >= 1 }
SlowLength( numericsimple ), { this input assumed to be a constant >= 1 }
Type( numericsimple );
Variables:
Series( 0 );
If MTF( Factor ) Then
Begin
Series = PriceMTF( Factor, Price );
_MACD = TypeAverageMTF( Factor, Series, FastLength, Type, 1 ) - TypeAverageMTF( Factor, Series, SlowLength, Type, 1 ) ;
End
Else
_MACD = _MACD[1];
"Schaff "
Input: Factor( numericsimple ),
Period( numericsimple ),{0 = Hilbert - For Stoch }
Fast( numeric ),{0 = Hilbert - For MACD }
Slow( numeric ) {0 = Hilbert - For MACD };
Variables: SFastK(0),
Series( 0 ),
StochLength( 0 ),
StochLength2( 0 ),
HH( 0 ),
LL( 0 ),
Num1( 0 ),
Den1( 0 ),
HH2( 0 ),
LL2( 0 ),
Num2( 0 ),
Den2( 0 ),Natura(0),Natura1(0), Natura2(0);
Natura=Natural( Hilbert( Factor, MedianPrice ));
If Fast<1 then
Natura1=Natura*.5
else
Natura1=fast;
If Slow<1 then
Natura2=Natura*2
else
Natura2=slow;
If MTF( Factor ) Then
Begin
Series = _MACD(Factor, medianprice, Natura1, Natura2 ,2 );
If Period < 1 Then
StochLength = Natural( Hilbert( Factor, Series ) ) * Factor / 2
Else
StochLength = Period * Factor;
If Series = Close OR
Series = medianprice Then
Begin
LL = Lowest( Low, StochLength ) ;
HH = Highest( High, StochLength ) ;
End
Else
Begin
LL = Lowest( Series, StochLength ) ;
HH = Highest( Series, StochLength ) ;
End;
Num1 = Series - LL ;
Den1 = HH - LL ;
SFastK = Div( Num1, Den1 ) * 100;
If Period < 1 Then
StochLength = Natural( Hilbert( Factor, SFastK ) ) * Factor / 2
Else
StochLength = Period * Factor;
LL2 = Lowest( SFastK, StochLength ) ;
HH2 = Highest( SFastK, StochLength ) ;
Num2 = SFastK - LL2 ;
Den2 = HH2 - LL2 ;
Schaff = Div( Num2, Den2 ) * 100 ;
End
Else
Schaff = Schaff[1]
여기까지는 함수 파일이구요
이제는 인디케이터입니다.. 파일은 하나구요.
"Schaff Indicator"
Inputs: Factor( 1 ),
Period( 0 ),
Fast( 5 ),
Slow( 34 ),
Type( 7 ),
Length( 3 ), OverSold( 20 ),
OverBought( 80 ),
OverSColor( Cyan ),
OverBColor( Red ) ;
If MTF( Factor ) Then
Begin
If Length < 1 Then
Value1 = Natural( Hilbert( Factor, Value2 ) * Factor )
Else
Value1 = Length;
Value2 = TypeAverageMTF( Factor, Schaff( Factor, Period, Fast, Slow ), Value1, Type, 0 );
Plot1( Value2, "DS" );
Plot2( OverSold, "OverSld" ) ;
Plot3( OverBought, "OverBot" ) ;
if Plot1 > OverBought then
SetPlotColor( 1, OverBColor )
else if Plot1 < OverSold then
SetPlotColor( 1, OverSColor ) ;
End;
메일주소 : jinred9@empal.com