1. Welcome to the international stock forum - forex forum ! Chào mừng đến với diễn đàn quốc tế chứng khoán - forex ! www.Traders.vn
    Dismiss Notice

Automatic Linear Trend Channel

Thảo luận trong 'Amibroker' bắt đầu bởi stock, 25/6/17.

  1. stock

    stock Member

    Tham gia ngày:
    1/5/17
    Bài viết:
    73
    Đã được thích:
    0
    Điểm thành tích:
    6
    Giới tính:
    Nam
    Automatic Linear Trend Channel.png Code : Automatic Linear Trend Channel
    Copy code và dán
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    // Automatic Linear Trend Channel (edited)
    // original author Edward Pottasch
    // Trend is defined using code found on the net
    // Amibroker AFL code by Edward Pottasch, November 2011
    // edited by Anderson Wilson, July 2012
    // some symbols makes yybull and yybear infinite,
    // added IsFinite(yybull) AND IsFinite(yybear)
    // before plotting Channel
    _SECTION_BEGIN("Parameters");
    kk = Optimize( "mult", Param( "mult", 1.25, 0.25, 8, 0.25 ), 1, 8, 0.25 );
    Per = Optimize( "period", Param( "period", 10, 1, 300, 1 ), 5, 300, 1 );
    sdfact = Param( "Standard Deviation Factor", 2, 0.5, 5, 0.1 );
    offset = Param( "Offset", 2, 1, 50, 1 );
    tc = ParamList( "Channel Display", List = "No Channel|Channel|ChannelRT|Both
    Channels", 1 );
    ms = ParamToggle( "Trend", "Regular|Smoothed", 1 );

    x = Cum( 1 );
    HaClose = ( O + H + L + C ) / 4;
    HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );
    HaHigh = Max( H, Max( HaClose, HaOpen ) );
    HaLow = Min( L, Min( HaClose, HaOpen ) );

    if ( ms == 0 )
    {
    nm = ( H - L );
    j = ( O + H + L + C ) / 4;
    }
    else
    {
    nm = ( HaHigh - HaLow );
    j = ( HaOpen + HaHigh + HaLow + HaClose ) / 4;
    }

    rfsctor = WMA( nm, Per );

    revers = kk * rfsctor;
    Trend = 1;
    NW[0] = 0;

    for ( i = 1;i < BarCount;i++ )
    {
    if ( Trend[i-1] == 1 )
    {
    if ( j < NW[i-1] )
    {
    Trend = -1;
    NW = j + Revers;
    }
    else
    {
    Trend = 1;

    if ( ( j - Revers ) > NW[i-1] )
    {
    NW = j - Revers;
    }
    else
    {
    NW = NW[i-1];
    }
    }
    }

    if ( Trend[i-1] == -1 )
    {
    if ( j > NW[i-1] )
    {
    Trend = 1;
    NW = j - Revers;
    }
    else
    {
    Trend = -1;

    if ( ( j + Revers ) < NW[i-1] )
    {
    NW[i] = j[i] + Revers[i];
    }
    else
    {
    NW[i] = NW[i-1];
    }
    }
    }
    }

    cp = ( H + L ) / 2;

    TrendUp = IIf( Trend == 1, Trend, 0 );
    TrendDown = IIf( Trend == -1, Trend, 0 );
    totalTrend = IIf( TrendUp, TrendUp, TrendDown );
    dtotalTrend = totalTrend - Ref( totalTrend, -1 );
    vtotalTrend = ValueWhen( dtotalTrend, dtotalTrend );
    cbull = vtotalTrend > 0 AND Ref( vtotalTrend, -1 ) < 0;
    cbull = Ref( cbull, 1 );
    cbear = vtotalTrend < 0 AND Ref( vtotalTrend, -1 ) > 0;
    cbear = Ref( cbear, 1 );
    cbull = vtotalTrend > 0 AND Ref( vtotalTrend, -1 ) < 0;
    cbull = Ref( cbull, 1 );
    cbull[BarCount-1] = 1;
    cbear = vtotalTrend < 0 AND Ref( vtotalTrend, -1 ) > 0;
    cbear = Ref( cbear, 1 );
    cbear[BarCount-1] = 1;
    nwbull = Ref( Flip( cbull, cbear ), -1 );
    nwbear = Ref( Flip( cbear, cbull ), -1 );

    xxbull = BarsSince( cbull );
    xxbull[BarCount-1] = xxbull[BarCount-2] + 1;
    aaabull = LinRegIntercept( cp, xxbull );
    bbbbull = LinRegSlope( cp, xxbull );
    daabull = Ref( ValueWhen( cbear, aaabull, 0 ), -1 );
    dbbbull = Ref( ValueWhen( cbear, bbbbull, 0 ), -1 );
    yybull = daabull + dbbbull * ( xxbull - 1 );
    yybull = IIf( xxbull > Max( offset, 1 ), yybull, Null );
    wdbull = sdfact * StdErr( cp, xxbull );
    wdbull = Ref( ValueWhen( cbear, wdbull, 0 ), -1 );

    xxbear = BarsSince( cbear );
    xxbear[BarCount-1] = xxbear[BarCount-2] + 1;
    aaabear = LinRegIntercept( cp, xxbear );
    bbbbear = LinRegSlope( cp, xxbear );
    daabear = Ref( ValueWhen( cbull, aaabear, 0 ), -1 );
    dbbbear = Ref( ValueWhen( cbull, bbbbear, 0 ), -1 );
    yybear = daabear + dbbbear * ( xxbear - 1 );
    yybear = IIf( xxbear > Max( offset, 1 ), yybear, Null );
    wdbear = sdfact * StdErr( cp, xxbear );
    wdbear = Ref( ValueWhen( cbull, wdbear, 0 ), -1 );

    llbull = LinearReg( cp, xxbull );
    llbull = IIf( xxbull > Max( Offset, 1 ), llbull, Null );
    llbullp = LinearReg( cp, xxbull ) + sdfact * StdErr( cp, xxbull );
    llbullp = IIf( xxbull > Max( Offset, 2 ), llbullp, Null );
    llbullm = LinearReg( cp, xxbull ) - sdfact * StdErr( cp, xxbull );
    llbullm = IIf( xxbull > Max( Offset, 2 ), llbullm, Null );
    llbear = LinearReg( cp, xxbear );
    llbear = IIf( xxbear > Max( Offset, 1 ), llbear, Null );
    llbearp = LinearReg( cp, xxbear ) + sdfact * StdErr( cp, xxbear );
    llbearp = IIf( xxbear > Max( Offset, 2 ), llbearp, Null );
    llbearm = LinearReg( cp, xxbear ) - sdfact * StdErr( cp, xxbear );
    llbearm = IIf( xxbear > Max( Offset, 2 ), llbearm, Null );

    SetChartBkColor( ParamColor( "Background Color", colorBlack ) );
    SetChartOptions( 0, chartShowDates );
    SetBarFillColor( IIf( C > O, ParamColor( "Candle UP Color", colorGreen ), IIf(
    C <= O, ParamColor( "Candle Down Color", colorRed ), colorLightGrey ) ) );
    Plot( C, "Price", IIf( C > O, ParamColor( "Wick UP Color", colorDarkGreen ),
    IIf( C <= O, ParamColor( "Wick Down Color", colorDarkRed ), colorLightGrey ) ),
    64, 0, 0, 0, 0 );
    PlotShapes( IIf( x == BarCount, shapeSmallSquare, shapeNone ), colorWhite, 0,
    j, 0 );
    Plot( IIf( NW < j, NW, Null ), "\ntrailLong", ParamColor( "ColorTrailLong",
    colorGreen ), styleStaircase | styleDots );
    Plot( IIf( NW > j, NW, Null ), "\ntrailShort", ParamColor( "ColorTrailShort",
    colorRed ), styleStaircase | styleDots );


    Buy = trend==1; Sell = trend==-1;
    Buy = ExRem(Buy,Sell); Sell = ExRem(Sell,Buy);
    PlotShapes(Buy+2*Sell, colorBrightGreen, 0,IIf(Buy,L,H),-30);


    switch ( tc )
    {
    case( "No Channel" ):
    break;
    case( "Channel" ):
    Plot( IIf( nwbull AND IsFinite(yybull), yybull, Null ), "", bbb = ColorRGB(
    0, 255, 0 ), styleDashed );
    Plot( IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ), "", bbb,
    styleThick );
    Plot( IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ), "", bbb,
    styleThick );
    Plot( IIf( nwbear AND IsFinite(yybear), yybear, Null ), "", sss =
    ColorRGB( 255, 0, 0 ), styleDashed );
    Plot( IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ), "", sss,
    styleThick );
    Plot( IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ), "", sss,
    styleThick );
    PlotOHLC( IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ),
    IIf( nwbull AND IsFinite(yybull), yybull + wdbull, Null ),
    IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ),
    IIf( nwbull AND IsFinite(yybull), yybull - wdbull, Null ),
    "", ColorRGB( 10, 15, 10 ), styleCloud | styleNoLabel, 0, 0, 0, -1 );
    PlotOHLC( IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ),
    IIf( nwbear AND IsFinite(yybear), yybear + wdbear, Null ),
    IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ),
    IIf( nwbear AND IsFinite(yybear), yybear - wdbear, Null ),
    "", ColorRGB( 15, 10, 10 ), styleCloud | styleNoLabel, 0, 0, 0, -1 );

    _N(Title = VarGetText("Title") +
    StrFormat(
    ", nwbull %g, yybull %g, nwbear %g, yybear %g wdbull %g",
    nwbull, yybull, nwbear, yybear, wdbull

    )
    );
    break;
    case( "ChannelRT" ):
    Plot( IIf( nwbull, llbull, Null ), "", colorGreen, styleDashed,
    0, 1, 0, 1 );
    Plot( IIf( nwbull, llbullp, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbull, llbullm, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbear, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbearp, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbearm, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    PlotOHLC( IIf( nwbull, llbullp, Null ), IIf( nwbull, llbullp, Null ), IIf(
    nwbull, llbullm, Null ),
    IIf( nwbull, llbullm, Null ), "", ColorRGB( 10, 15, 10 ),
    styleCloud | styleNoLabel, 0, 0, 0, -1 );
    PlotOHLC( IIf( nwbear, llbearp, Null ), IIf( nwbear, llbearp, Null ), IIf(
    nwbear, llbearm, Null ),
    IIf( nwbear, llbearm, Null ), "", ColorRGB( 15, 10, 10 ),
    styleCloud | styleNoLabel, 0, 0, 0, -1 );
    break;
    case( "Both Channels" ):
    Plot( IIf( nwbull, yybull, Null ), "", bbb = ColorRGB( 0, 255,
    0 ), styleLine );
    Plot( IIf( nwbull, yybull + wdbull, Null ), "", bbb, styleThick );
    Plot( IIf( nwbull, yybull - wdbull, Null ), "", bbb, styleThick );
    Plot( IIf( nwbear, yybear, Null ), "", sss = ColorRGB( 255, 0, 0 ),
    styleLine );
    Plot( IIf( nwbear, yybear + wdbear, Null ), "", sss, styleThick );
    Plot( IIf( nwbear, yybear - wdbear, Null ), "", sss, styleThick );
    Plot( IIf( nwbull, llbull, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbull, llbullp, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbull, llbullm, Null ), "", colorGreen, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbear, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbearp, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    Plot( IIf( nwbear, llbearm, Null ), "", colorRed, styleDashed, 0, 1, 0, 1
    );
    break;

    }

    _SECTION_END();



    -----------------------------------------------------------------------------------

    Chúc bạn thành công !
    [ATTACH=full]40[/ATTACH][/i][/i][/i][/i]
     
    Chỉnh sửa cuối: 25/6/17

Chia sẻ trang này

Đang tải...