求助:高手老手改个简单的ts指标为策略,多谢了

Discussion in 'TradeStation' started by freebird, Jan 1, 2010.

  1. 价格上穿趋势线买入,价格下穿趋势线卖出,邮件imakebest@qq.com,谢谢

    指标源码如下
    {
    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 (c) 2001 - 2009 TradeStation Technologies, Inc. All rights reserved. **
    ** TradeStation reserves the right to modify or overwrite this analysis technique
    with each release. ** }
     
  2. 这个类似于分析家中的自动波段线
     
  3. 看起来像江恩的趋势线一样