커뮤니티

부탁드려요..

프로필 이미지
무료한나날
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