Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.
indicator-master
-
Content Count
2 -
Joined
-
Last visited
Posts posted by indicator-master
-
-
this is what i have in my system:
[LegacyColorValue = true];
{=======================================HEADER=======================
Study based on Connors & Raschke's "Wolfe Waves"
================================== DECLARATIONS =======================}
INPUTS:
TICKCHG(0), {Change (number of ticks) required to set up a new swing high/low.}
PCTCHG(.2), {Percent change in price to set up a new swing high/low}
OCCUR(1),
PLOTBARS(20),
ETALINE(TRUE),
ZIGZAG(TRUE);
ARRAY:
PBAR[50](0),
P[50](0);
VARS:
X(0),
PP(1),
JA_SLOPE1(0),
JLA_CTR(0),
JLA_LINE(0),
JAIRHBAR(0), { LAST SWING HIGH BAR}
JAIRLBAR(0), {LAST SWING LOW BAR}
LOWSEEK(FALSE), {LOOKING FOR A LOW OR A HIGH?}
W(0), {COUNTER}
JLA_IRH(0), {LAST SWING HIGH VALUE}
JLA_IRL(99999), {LAST SWING LOW VALUE}
JA_SLOPE2(0),
JA_SLOPE3(0),
JLA_PT1(0),
WOLFE(0);
{==================MAIN PROGRAM=========================}
IF CURRENTBAR = 1 THEN P[50] = C;
IF LOWSEEK = FALSE AND P[50] <= H THEN
BEGIN
P[50] = H;
PBAR[50] = 0;
END;
IF LOWSEEK = TRUE AND P[50] >= L THEN
BEGIN
P[50] = L;
PBAR[50] = 0;
END;
IF (LOWSEEK = FALSE AND PBAR[50] <> 0) THEN
BEGIN
IF (TICKCHG = 0
AND L < P[50] * ( 1 - PCTCHG / 100) )
OR (TICKCHG <> 0
AND L < ( P[50] - tickchg * minmove points)) THEN
BEGIN
IF ZIGZAG = TRUE THEN PLOT4[PBAR[50]](P[50],"SWINGS");
LOWSEEK = TRUE;
FOR W = 1 TO 49
BEGIN
PBAR[W] = PBAR[W+1];
P[W] = P[W+1];
END;
P[50] = L;
PBAR[50] = 0;
END;
END;
IF (LOWSEEK = TRUE AND PBAR[50] <> 0) THEN
BEGIN
IF (TICKCHG = 0
AND H> P[50] * ( 1 + PCTCHG / 100))
OR (TICKCHG <> 0
AND H > (P[50] + tickchg * minmove points )) THEN
BEGIN
IF ZIGZAG = TRUE THEN PLOT4[PBAR[50]](P[50],"SWINGS");
LOWSEEK = FALSE;
FOR W = 1 TO 49
BEGIN
PBAR[W] = PBAR[W+1];
P[W] = P[W+1];
END;
P[50] = H;
PBAR[50] = 0;
END;
END;
IF TIME = LASTCALCTIME
AND DATE = LASTCALCDATE
AND P[48 - PP] <> 0 THEN
BEGIN
PP = -1;
WOLFE = 0;
WHILE WOLFE < OCCUR AND PP < 46
BEGIN
PP = PP + 1;
VALUE1 = P[47-PP];
VALUE2 = P[48-PP];
VALUE3 = P[49-PP];
VALUE4 = P[50-PP];
CONDITION1 =
VALUE2 > VALUE1
AND VALUE4 > VALUE3
AND VALUE4 < VALUE2
AND VALUE3 < VALUE1
AND VALUE4 > VALUE1;
CONDITION2 =
VALUE2 < VALUE1
AND VALUE4 < VALUE3
AND VALUE4 > VALUE2
AND VALUE3 > VALUE1
AND VALUE4 < VALUE1;
IF CONDITION1 OR CONDITION2 THEN WOLFE = WOLFE + 1;
END;
JA_SLOPE1 = (P[49-PP] - P[47-PP]) / (PBAR[47-PP] - PBAR[49-PP]);
JA_SLOPE2 = (P[50-PP] - P[47-PP]) / (PBAR[47-PP] - PBAR[50-PP]);
{LINE 1-3}
VALUE90 = TL_New(DATE[PBAR[47-PP]],TIME[PBAR[47-PP]],P[47-PP],
DATE[PBAR[49-PP]], TIME[PBAR[49-PP]],P[49-PP]);
Value14=TL_SetColor(VALUE90, 5);
{VALUE93 = TL_SetExtRight(VALUE90,TRUE);}
VALUE94 = TL_SETEND(VALUE90,DATE[PBAR[49-PP]-PLOTBARS],TIME[PBAR[49-PP]-PLOTBARS],TL_GETVALUE(VALUE90,DATE[PBAR[49-PP]-PLOTBARS],TIME[PBAR[49-PP]-PLOTBARS]));
{LINE 1-4}
VALUE91 = TL_NEW(DATE[PBAR[47-PP]],TIME[PBAR[47-PP]],P[47-PP],
DATE[PBAR[50-PP]], TIME[PBAR[50-PP]],P[50-PP]);
Value14=TL_SetColor(VALUE91, 16);
TL_SETEND(VALUE91,DATE[PBAR[49-PP]-PLOTBARS],TIME[PBAR[49-PP]-PLOTBARS],TL_GETVALUE(VALUE91,DATE[PBAR[49-PP]-PLOTBARS],TIME[PBAR[49-PP]-PLOTBARS]));
{ETA LINE}
IF ETALINE THEN
BEGIN
VALUE92 = TL_NEW(DATE[PBAR[48-PP]],TIME[PBAR[48-PP]],P[48-PP],
DATE[PBAR[50-PP]], TIME[PBAR[50-PP]],P[50-PP]);
Value14=TL_SetColor(VALUE92, 4);
TL_SETEND(VALUE92,DATE[PBAR[50-PP]-PLOTBARS],TIME[PBAR[50-PP]-PLOTBARS],TL_GETVALUE(VALUE92,DATE[PBAR[50-PP]-PLOTBARS],TIME[PBAR[50-PP]-PLOTBARS]));
END;
END;
IF DATE = LASTCALCDATE
AND TIME = LASTCALCTIME
AND ZIGZAG = TRUE THEN
BEGIN
JA_SLOPE3 = (P[50] - P[49]) / (PBAR[49] - PBAR[50]);
FOR JLA_CTR = PBAR[49] DOWNTO PBAR[50]
BEGIN
PLOT4[JLA_CTR](P[49] + (PBAR[49] - JLA_CTR) * JA_SLOPE3,"Swings");
END;
END;
FOR W = 1 TO 50
BEGIN
PBAR[W] = PBAR[W]+1;
END;
Auto Trendlines
in Technical Analysis
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 ;
{ ** Copyright © 1991-2003 TradeStation Technologies, Inc. All rights reserved. **
** TradeStation reserves the right to modify or overwrite this analysis technique
with each release. ** }