Jump to content

Recommended Posts

Posted

{

This indicator:

(1) INSERTS DnTL's/UpTL's connecting each new SwingHi/SwingLo with the next most

recent higher/lower SwingHi/SwingLo within the last 10 SwingHi's/SwingLo's;

(2) EXTENDS each new TL to the right and SETS it's color and alert type;

(3) TRUNCATES a DnTL/UpTL on the right when the next new DnTL/UpTL is drawn (if the

History input is set to "Yes"), or BarsPast bars after it has been breached,

whichever comes first.

(4) DELETES a DnTL/UpTL when the next new DnTL/UpTL is drawn, if the History input

is set to "No".

 

NOTE: This indicator may not work well with low-count tick bars, such as 10-tick bars,

etc., because the time resolution of the bars may not be high enough for each bar to

have a distinct time stamp.

}

 

inputs:

SwHiStrength( 4 ),

SwLoStrength( 4 ),

BarsPast( 10 ),

History( "Yes" ),

DnTLColor( Red ),

UpTLColor( Cyan ),

AlertType( "IntraBar" ) ;

 

variables:

DnTLRef( -1 ),

DnTLEndBar( 0 ),

DnTLBreak( false ),

DnTLColorNum( DnTLColor ),

 

UpTLRef( -1 ),

UpTLEndBar( 0 ),

UpTLBreak( false ),

UpTLColorNum( UpTLColor ),

 

Index( 0 ),

BarNum( 0 ),

HistoryTF( false ),

AlertTypeCAPS( UpperStr( AlertType ) ) ;

 

arrays:

SwHiDate[10]( 0 ),

SwHiTime[10]( 0 ),

SwHiVal[10]( -1000000 ),

SwLoDate[10]( 0 ),

SwLoTime[10]( 0 ),

SwLoVal[10]( 1000000 ) ;

 

if CurrentBar = 1 then

HistoryTF = UpperStr( History ) = "YES" or UpperStr( History ) = "Y" ;

{ should also be able to do this via declaration above }

 

BarNum = BarNumber ;

 

if SwingHighBar( 1, High, SwHiStrength, SwHiStrength + 1 ) = SwHiStrength then

{ ie, if just confirmed SwHi }

begin

 

{ push arrays back }

for Value1 = 9 downto 0

begin

SwHiDate[ Value1 + 1 ] = SwHiDate[Value1] ;

SwHiTime[ Value1 + 1 ] = SwHiTime[Value1] ;

SwHiVal[ Value1 + 1 ] = SwHiVal[Value1] ;

end ;

 

{ read in parameters of new SwHi into 0-elements of arrays }

SwHiDate[0] = Date[swHiStrength] ;

SwHiTime[0] = Time[swHiStrength] ;

SwHiVal[0] = High[swHiStrength] ;

 

{ find and save the index of the next-most-recent higher SwHi if it exists }

for Value2 = 1 to 10

begin

if SwHiVal[Value2] > SwHiVal[0] then

begin

Index = Value2 ;

Value2 = 11 ; { short circuit the looping with 11 instead of 10; the 11

will become 12 in the final pass }

end ;

end ;

 

if Value2 = 12 then { ie, if next-most-recent higher SwHi exists }

begin

if DnTLRef >= 0 then { ie, if previous DnTL exists }

begin

if HistoryTF and DnTLBreak = false then

{ if history reqd and most recent DnTL not already truncated

elsewhere, truncate it now }

begin

TL_SetEnd( DnTLRef, Date, Time, TL_GetValue( DnTLRef, Date, Time ) ) ;

TL_SetExtRight( DnTLRef, false ) ;

end

else if HistoryTF = false then

{ if history not reqd, delete most recent DnTL }

TL_Delete( DnTLRef ) ;

end ;

{ draw new DnTL, reset break flag, save endbar, set extents/color/alert }

DnTLRef = TL_New( SwHiDate[index], SwHiTime[index], SwHiVal[index],

SwHiDate[0], SwHiTime[0], SwHiVal[0] ) ;

if DnTLBreak = true then

DnTLBreak = false ;

DnTLEndBar = BarNum - SwHiStrength ;

TL_SetExtLeft( DnTLRef, false ) ;

TL_SetExtRight( DnTLRef, true ) ;

if DnTLColorNum <> 99 then

TL_SetColor( DnTLRef, DnTLColorNum ) ;

if AlertTypeCAPS = "ONCLOSE" then

TL_SetAlert( DnTLRef, 2 )

else if AlertTypeCAPS = "INTRABAR" then

TL_SetAlert( DnTLRef, 1 )

else

TL_SetAlert( DnTLRef, 0 ) ;

end ;

end ;

 

if SwingLowBar( 1, Low, SwLoStrength, SwLoStrength + 1 ) = SwLoStrength then

{ ie, if just confirmed SwLo }

begin

 

{ push arrays back }

for Value1 = 9 downto 0

begin

SwLoDate[Value1+1] = SwLoDate[Value1] ;

SwLoTime[Value1+1] = SwLoTime[Value1] ;

SwLoVal[Value1+1] = SwLoVal[Value1] ;

end ;

 

{ read in parameters of new SwLo into 0-elements of arrays }

SwLoDate[0] = Date[swLoStrength] ;

SwLoTime[0] = Time[swLoStrength] ;

SwLoVal[0] = Low[swLoStrength] ;

 

{ find and save the index of the next-most-recent lower SwLo if it exists }

for Value2 = 1 to 10

begin

if SwLoVal[Value2] < SwLoVal[0] then

begin

Index = Value2 ;

Value2 = 11 ;{ short circuit the looping with 11 instead of 10; the 11

will become 12 in the final pass }

end ;

end ;

 

if Value2 = 12 then { ie, if next-most-recent lower SwLo exists }

begin

if UpTLRef >= 0 then { ie, if previous UpTL exists }

begin

if HistoryTF and UpTLBreak = false then

{ if history reqd and most recent UpTL not already truncated

elsewhere, truncate it now }

begin

TL_SetEnd( UpTLRef, Date, Time, TL_GetValue( UpTLRef, Date, Time ) ) ;

TL_SetExtRight( UpTLRef, false ) ;

end

else if HistoryTF = false then

{ if history not reqd, delete most recent UpTL }

TL_Delete( UpTLRef ) ;

end ;

{ draw new UpTL, reset break flag, save endbar, set extents/color/alert }

UpTLRef = TL_New( SwLoDate[index], SwLoTime[index], SwLoVal[index],

SwLoDate[0], SwLoTime[0], SwLoVal[0] ) ;

if UpTLBreak = true then

UpTLBreak = false ;

UpTLEndBar = BarNum - SwLoStrength ;

TL_SetExtLeft( UpTLRef, false ) ;

TL_SetExtRight( UpTLRef, true ) ;

if UpTLColorNum <> 99 then

TL_SetColor( UpTLRef, UpTLColorNum ) ;

if AlertTypeCAPS = "ONCLOSE" then

TL_SetAlert( UpTLRef, 2 )

else if AlertTypeCAPS = "INTRABAR" then

TL_SetAlert( UpTLRef, 1 )

else

TL_SetAlert( UpTLRef, 0 ) ;

end ;

end ;

 

{ if most recent DnTL/UpTL exists AND has not yet been truncated here AND was drawn

at least BarsPast ago AND was breached BarsPast bars ago THEN truncate it here and

set break flag }

 

if DnTLRef >= 0

and DnTLBreak = false

and BarNum > DnTLEndBar + SwHiStrength + BarsPast

and ( Close > TL_GetValue( DnTLRef, Date, Time ) )[barsPast]

then

begin

TL_SetEnd( DnTLRef, Date, Time, TL_GetValue( DnTLRef, Date, Time ) ) ;

TL_SetExtRight( DnTLRef, false ) ;

DnTLBreak = true ;

end ;

 

if UpTLRef >= 0

and UpTLBreak = false

and BarNum > UpTLEndBar + SwLoStrength + BarsPast

and ( Close < TL_GetValue( UpTLRef, Date, Time ) )[barsPast]

then

begin

TL_SetEnd( UpTLRef, Date, Time, TL_GetValue( UpTLRef, Date, Time ) ) ;

TL_SetExtRight( UpTLRef, false ) ;

UpTLBreak = true ;

end ;

Posted
{

This indicator:

(1) INSERTS DnTL's/UpTL's connecting each new SwingHi/SwingLo with the next most

recent higher/lower SwingHi/SwingLo within the last 10 SwingHi's/SwingLo's;

(2) EXTENDS each new TL to the right and SETS it's color and alert type;

(3) TRUNCATES a DnTL/UpTL on the right when the next new DnTL/UpTL is drawn (if the

History input is set to "Yes"), or BarsPast bars after it has been breached,

whichever comes first.

(4) DELETES a DnTL/UpTL when the next new DnTL/UpTL is drawn, if the History input

is set to "No".

 

NOTE: This indicator may not work well with low-count tick bars, such as 10-tick bars,

etc., because the time resolution of the bars may not be high enough for each bar to

have a distinct time stamp.

}

 

inputs:

SwHiStrength( 4 ),

SwLoStrength( 4 ),

BarsPast( 10 ),

History( "Yes" ),

DnTLColor( Red ),

UpTLColor( Cyan ),

AlertType( "IntraBar" ) ;

 

variables:

DnTLRef( -1 ),

DnTLEndBar( 0 ),

DnTLBreak( false ),

DnTLColorNum( DnTLColor ),

 

UpTLRef( -1 ),

UpTLEndBar( 0 ),

UpTLBreak( false ),

UpTLColorNum( UpTLColor ),

 

Index( 0 ),

BarNum( 0 ),

HistoryTF( false ),

AlertTypeCAPS( UpperStr( AlertType ) ) ;

 

arrays:

SwHiDate[10]( 0 ),

SwHiTime[10]( 0 ),

SwHiVal[10]( -1000000 ),

SwLoDate[10]( 0 ),

SwLoTime[10]( 0 ),

SwLoVal[10]( 1000000 ) ;

 

if CurrentBar = 1 then

HistoryTF = UpperStr( History ) = "YES" or UpperStr( History ) = "Y" ;

{ should also be able to do this via declaration above }

 

BarNum = BarNumber ;

 

if SwingHighBar( 1, High, SwHiStrength, SwHiStrength + 1 ) = SwHiStrength then

{ ie, if just confirmed SwHi }

begin

 

{ push arrays back }

for Value1 = 9 downto 0

begin

SwHiDate[ Value1 + 1 ] = SwHiDate[Value1] ;

SwHiTime[ Value1 + 1 ] = SwHiTime[Value1] ;

SwHiVal[ Value1 + 1 ] = SwHiVal[Value1] ;

end ;

 

{ read in parameters of new SwHi into 0-elements of arrays }

SwHiDate[0] = Date[swHiStrength] ;

SwHiTime[0] = Time[swHiStrength] ;

SwHiVal[0] = High[swHiStrength] ;

 

{ find and save the index of the next-most-recent higher SwHi if it exists }

for Value2 = 1 to 10

begin

if SwHiVal[Value2] > SwHiVal[0] then

begin

Index = Value2 ;

Value2 = 11 ; { short circuit the looping with 11 instead of 10; the 11

will become 12 in the final pass }

end ;

end ;

 

if Value2 = 12 then { ie, if next-most-recent higher SwHi exists }

begin

if DnTLRef >= 0 then { ie, if previous DnTL exists }

begin

if HistoryTF and DnTLBreak = false then

{ if history reqd and most recent DnTL not already truncated

elsewhere, truncate it now }

begin

TL_SetEnd( DnTLRef, Date, Time, TL_GetValue( DnTLRef, Date, Time ) ) ;

TL_SetExtRight( DnTLRef, false ) ;

end

else if HistoryTF = false then

{ if history not reqd, delete most recent DnTL }

TL_Delete( DnTLRef ) ;

end ;

{ draw new DnTL, reset break flag, save endbar, set extents/color/alert }

DnTLRef = TL_New( SwHiDate[index], SwHiTime[index], SwHiVal[index],

SwHiDate[0], SwHiTime[0], SwHiVal[0] ) ;

if DnTLBreak = true then

DnTLBreak = false ;

DnTLEndBar = BarNum - SwHiStrength ;

TL_SetExtLeft( DnTLRef, false ) ;

TL_SetExtRight( DnTLRef, true ) ;

if DnTLColorNum <> 99 then

TL_SetColor( DnTLRef, DnTLColorNum ) ;

if AlertTypeCAPS = "ONCLOSE" then

TL_SetAlert( DnTLRef, 2 )

else if AlertTypeCAPS = "INTRABAR" then

TL_SetAlert( DnTLRef, 1 )

else

TL_SetAlert( DnTLRef, 0 ) ;

end ;

end ;

 

if SwingLowBar( 1, Low, SwLoStrength, SwLoStrength + 1 ) = SwLoStrength then

{ ie, if just confirmed SwLo }

begin

 

{ push arrays back }

for Value1 = 9 downto 0

begin

SwLoDate[Value1+1] = SwLoDate[Value1] ;

SwLoTime[Value1+1] = SwLoTime[Value1] ;

SwLoVal[Value1+1] = SwLoVal[Value1] ;

end ;

 

{ read in parameters of new SwLo into 0-elements of arrays }

SwLoDate[0] = Date[swLoStrength] ;

SwLoTime[0] = Time[swLoStrength] ;

SwLoVal[0] = Low[swLoStrength] ;

 

{ find and save the index of the next-most-recent lower SwLo if it exists }

for Value2 = 1 to 10

begin

if SwLoVal[Value2] < SwLoVal[0] then

begin

Index = Value2 ;

Value2 = 11 ;{ short circuit the looping with 11 instead of 10; the 11

will become 12 in the final pass }

end ;

end ;

 

if Value2 = 12 then { ie, if next-most-recent lower SwLo exists }

begin

if UpTLRef >= 0 then { ie, if previous UpTL exists }

begin

if HistoryTF and UpTLBreak = false then

{ if history reqd and most recent UpTL not already truncated

elsewhere, truncate it now }

begin

TL_SetEnd( UpTLRef, Date, Time, TL_GetValue( UpTLRef, Date, Time ) ) ;

TL_SetExtRight( UpTLRef, false ) ;

end

else if HistoryTF = false then

{ if history not reqd, delete most recent UpTL }

TL_Delete( UpTLRef ) ;

end ;

{ draw new UpTL, reset break flag, save endbar, set extents/color/alert }

UpTLRef = TL_New( SwLoDate[index], SwLoTime[index], SwLoVal[index],

SwLoDate[0], SwLoTime[0], SwLoVal[0] ) ;

if UpTLBreak = true then

UpTLBreak = false ;

UpTLEndBar = BarNum - SwLoStrength ;

TL_SetExtLeft( UpTLRef, false ) ;

TL_SetExtRight( UpTLRef, true ) ;

if UpTLColorNum <> 99 then

TL_SetColor( UpTLRef, UpTLColorNum ) ;

if AlertTypeCAPS = "ONCLOSE" then

TL_SetAlert( UpTLRef, 2 )

else if AlertTypeCAPS = "INTRABAR" then

TL_SetAlert( UpTLRef, 1 )

else

TL_SetAlert( UpTLRef, 0 ) ;

end ;

end ;

 

{ if most recent DnTL/UpTL exists AND has not yet been truncated here AND was drawn

at least BarsPast ago AND was breached BarsPast bars ago THEN truncate it here and

set break flag }

 

if DnTLRef >= 0

and DnTLBreak = false

and BarNum > DnTLEndBar + SwHiStrength + BarsPast

and ( Close > TL_GetValue( DnTLRef, Date, Time ) )[barsPast]

then

begin

TL_SetEnd( DnTLRef, Date, Time, TL_GetValue( DnTLRef, Date, Time ) ) ;

TL_SetExtRight( DnTLRef, false ) ;

DnTLBreak = true ;

end ;

 

if UpTLRef >= 0

and UpTLBreak = false

and BarNum > UpTLEndBar + SwLoStrength + BarsPast

and ( Close < TL_GetValue( UpTLRef, Date, Time ) )[barsPast]

then

begin

TL_SetEnd( UpTLRef, Date, Time, TL_GetValue( UpTLRef, Date, Time ) ) ;

TL_SetExtRight( UpTLRef, false ) ;

UpTLBreak = true ;

end ;

 

This was already available with Andreybbrv's MC.Just check the indicators list for Trendline Automatic

be helpful

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...