价格上穿趋势线买入,价格下穿趋势线卖出,邮件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. ** }