(*Description... By FundTimer posted at http://wl4.wealth-lab.com/cgi-bin/WealthLab.DLL/topic?id=27828 Results are the same as WLP when the rounding code is turned on. *) function RoundSeries( Series: integer ): integer; begin var Bar: integer; // Use next line for no rounding Result := Series ; // OR use next 2 lines for doing standard rounding //Result := CreateSeries; //for Bar := 0 to BarCount-1 do @Result[Bar] := Round( @Series[Bar] ); end; //.......................................................................... function GTZSeries( Series: integer ): integer; begin Result := DivideSeriesValue( AddSeries( Series, AbsSeries( Series ) ), 2 ); end; //.......................................................................... function LTZSeries( Series: integer ): integer; begin Result := DivideSeriesValue( AddSeries( MultiplySeriesValue( Series, -1 ), AbsSeries( Series ) ), 2 ); end; //.......................................................................... function GTZSelectSeries( Series, Select: integer ): integer; begin Result := MultiplySeries( Series, DivideSeries( GTZSeries( Select ), Select ) ); end; //.......................................................................... function LTZSelectSeries( Series, Select: integer ): integer; begin Result := MultiplySeries( Series, DivideSeries( LTZSeries( Select ), AbsSeries( Select ) ) ); end; //-------------------------------------------------------------------------- function DIPlusSeries1( SeriesHi, SeriesLo, Period: integer ): integer; begin Result := CreateSeries; var hidiff: integer = GTZSeries( MomentumSeries( SeriesHi, 1 ) ); var lodiff: integer = GTZSeries( MultiplySeriesValue( MomentumSeries( SeriesLo, 1 ), -1 ) ); var DM: integer = SubtractSeries( hidiff, lodiff ); Result := RoundSeries( MultiplySeriesValue( DivideSeries( WilderMASeries( GTZSelectSeries( hidiff, DM ), Period ), ATRSeries( Period ) ), 100 ) ); end; //--------------------------------------------------------------------------- function DIMinusSeries1( SeriesHi, SeriesLo, Period: integer ): integer; begin var bar: integer; Result := CreateSeries; var hidiff: integer = GTZSeries( MomentumSeries( SeriesHi, 1 ) ); var lodiff: integer = GTZSeries( MultiplySeriesValue( MomentumSeries( SeriesLo, 1 ), -1 ) ); var DM: integer = SubtractSeries( hidiff, lodiff ); Result := RoundSeries( MultiplySeriesValue( DivideSeries( WilderMASeries( LTZSelectSeries( lodiff, DM ), Period ), ATRSeries( Period ) ), 100 ) ); end; //--------------------------------------------------------------------------- function DXSeries1( SeriesHi, SeriesLo, Period: integer ): integer; begin Result := RoundSeries( MultiplySeriesValue( DivideSeries( ABSSeries( SubtractSeries( DIPlusSeries1 ( SeriesHi, SeriesLo, Period ), DIMinusSeries1( SeriesHi, SeriesLo, Period ) ) ), AddSeries( DIPlusSeries1 ( SeriesHi, SeriesLo, Period ), DIMinusSeries1( SeriesHi, SeriesLo, Period ) ) ), 100 ) ); end; //---------------------------------------------------------------------------- function ADXSeries1( SeriesHi, SeriesLo, Period: integer ): integer; begin Result := WilderMASeries( DXSeries1( SeriesHi, SeriesLo, Period ), Period ); end; { //Check: var P: integer = CreatePane(100, -1, -1 ); PlotSerieslabel( DXSeries1( #high, #Low, 13 ), P, 900, 0, 'MyDX' ); PlotSeriesLabel( ADXSeries1( #High, #Low, 13 ), p, #Black, 0, 'MyADX' ) ; PlotSeriesLabel( DXSeries( 13 ), p, 900, 0, 'DX' ); PlotSeriesLabel( WilderMASeries(DXSeries( 13 ),13), p, 800, 0, 'ADX' ); PlotSerieslabel( DIMinusSeries1( #high, #Low, 13 ), P, 60, 0, 'MyDIPlus' ); PlotSeriesLabel( DIMinusSeries( 13 ), p, 90, 0, 'DIMinus' ); PlotSerieslabel( DIPlusSeries1( #high, #Low, 13 ), P, 9, 0, 'MyDIMinus' ); PlotSeriesLabel( DIPlusSeries( 13 ), p, 9, 0, 'DIPlus' ); {}