Changing a TS Trendlind into a Radar alert

Discussion in 'Strategy Development' started by Robert Weinstein, Nov 14, 2009.

  1. I have been able to "modify" the following real code to give alerts when a price breaks a trendline in a chart but would like to scan a population of stocks in radar.

    This code also makes lines that are needed on a chart that I think could go away with the proper code.

    Can anyone that knows Tradestation easylanguage modify this code to work with radar?

    A current stock that will give a signal is AGO as it broke out friday at 20.11.

    Obviously I am not using the right tool for the job but I was hoping to be able to just modify some code so I would not have to reinvent the wheel.


    Thanks




    {
    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 ),
    UpBreakoutPrice(0),

    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 (c) 2001 - 2009 TradeStation Technologies, Inc. All rights reserved. **
    ** TradeStation reserves the right to modify or overwrite this analysis technique
    with each release. ** }
    if DnTLRef > 0 then
    UpBreakoutPrice = TL_GetValue(DnTLRef, currentdate, currentTime);
    if High > UpBreakoutPrice and
    highest(high[1],2)< UpBreakoutPrice then
    begin
    Plot1(UpBreakoutPrice, "HighBreak",white);
    { Plot3(CurrentBar,"current bar");}
    alert;
    end;

    if UpTLRef > 0 then
    If Low < TL_GetValue(UpTLRef, Date, Time) and
    lowest(low[1],2)> TL_GetValue(DnTLRef, Date, Time) then

    begin
    Plot2(TL_GetValue(UpTLREF,Date, Time), "LowBreak");
    end;
     
  2. CORRECTION, the code makes lines that are NOT needed on the chart