[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Another question about how to use LinearReg()



PureBytes Links

Trading Reference Links

So does Dan ...

--- In amibroker@xxxxxxxxxxxxxxx, "Steve Dugas" <sjdugas@xxx> wrote:
>
> Thanks Dan - That is nice code and I have something similar...
> 
> The original question ( as I understand it ) is
> 
> "How do you use the LinearReg() function to draw a straight line?"
> 
> I wasn't aware that you could but Fred knows how...
> 
> Steve
> 
>   ----- Original Message ----- 
>   From: Dan Clark 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Saturday, February 04, 2006 4:07 PM
>   Subject: RE: [amibroker] Re: Another question about how to use 
LinearReg()
> 
> 
>   Steve and jnz,
> 
>    
> 
>   Here's some code that NW Trader provided.   I converted it to a 
function.  The first portion of the code is the function.  The second 
portion is the chart section that calls it.  
> 
>    
> 
>   It looks bad below, so copy it to AB's code editor and the tables 
should be correct.   Also, watch out for line wraps.   
> 
>    
> 
>   Regards,
> 
>    
> 
>   Dan.
> 
>    
> 
>    
> 
>   function PlotLinearRegression(CurSymbolPrice, PlotLRBool, 
PlotLRSD1Bool, PlotLRSD2Bool,
> 
>                                                                     
   DaysBack, Shift, LRSTitleUpColor, LRSTitleDownColor, LRColor, 
LRStyle, 
> 
>                                                                     
   LRSDPeriods, LRSDColor, LRSDStyle,
> 
>                                 LRSDPeriods2, LRSDColor2, 
LRSDStyle2,
> 
>                                                                     
   SmoothPds
> 
>                                                                     
   )
> 
>          {
> 
>          //P                                      = ParamField
("Price field",-1);
> 
>    
> 
>          //  =============================== Math Formula 
=============================================================
> 
>                 
> 
>          x = Cum(1);
> 
>          lastx = LastValue( x ) - shift; 
> 
>          aa = LastValue( Ref(LinRegIntercept( CurSymbolPrice , 
Daysback), -shift) ); 
> 
>          bb = LastValue( Ref(LinRegSlope( CurSymbolPrice , 
Daysback ), -shift) ); 
> 
>          y = Aa + bb * ( x - (Lastx - DaysBack +1 ) ); 
> 
>          
> 
>          LRSlope                            = LinRegSlope( 
CurSymbolPrice , Daysback) ;
> 
>          SlopeAngle                 = bb;
> 
>    
> 
>          //==================Plot the Linear Regression Line 
==========================================================
> 
>          //LRColor = ParamColor("LR Color", colorCycle ); 
> 
>          //LRStyle = ParamStyle("LR Style");
> 
>    
> 
>          LRLine =  IIf( x > (lastx - Daysback) AND BarIndex() < 
Lastx, y, Null );
> 
>    
> 
>          Plot( LRLine , "LinReg", LRCOLOR, LRSTyle + 
styleNoLabel ); //  styleDots ); 
> 
>   //     Plot( LRLine , "LinReg", LRCOLOR, LRSTYLE|styleLine + 
styleNoRescale + styleNoTitle + styleNoLabel ); //  styleDots ); 
> 
>          // ==========================  Plot 1st SD Channel 
===============================================================
> 
>    
> 
>          LRSDPeriods = Param("Standard Deviation", 1.5, 0, 6, 0.1);
> 
>          SD = LRSDPeriods/2;
> 
>    
> 
>          width = LastValue( Ref(SD * StDev(CurSymbolPrice , 
Daysback),-shift) );   // THIS IS WHERE THE WIDTH OF THE CHANELS IS 
SET  
> 
>          SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, 
y+width , Null ) ;
> 
>          SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, 
y-width , Null ) ;
> 
>    
> 
>          //LRSDColor = ParamColor("SD Color", colorCycle ); 
> 
>          //LRSDStyle = ParamStyle("SD Style");
> 
>    
> 
>          Plot( SDU , "Upper Lin Reg", LRSDColor, LRSDStyle + 
styleNoRescale + styleNoTitle + styleNoLabel ); 
> 
>          Plot( SDL , "Lower Lin Reg", LRSDColor, LRSDStyle + 
styleNoRescale +  styleNoTitle + styleNoLabel); 
> 
>          
> 
>    
> 
>          //  ==========================  Plot 2d SD Channel 
===============================================================
> 
>          ATRRaw = ATR(Daysback);
> 
>          ATRMultiplier = Param("ATR Multiplier", 1, .1, 10, .1, .1);
> 
>          //Make this a single value to 
> 
>          ATRWeighted = ATRRaw * ATRMultiplier;
> 
>          
> 
>          //LRSDPeriods2 = Param("2d Standard Deviation", 2.0, 0, 6, 
0.1);
> 
>          SD2 = LRSDPeriods2/2;
> 
>          
> 
>          //width2 = ATRWeighted * LastValue( Ref(SD2*StDev(p, 
Daysback),-shift) );   // THIS IS WHERE THE WIDTH OF THE CHANELS IS 
SET  
> 
>          width2 = LastValue( Ref(SD2*StDev(CurSymbolPrice , 
Daysback),-shift) );   // THIS IS WHERE THE WIDTH OF THE CHANELS IS 
SET  
> 
>          SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, 
y+width2 , Null ) ;
> 
>          SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, 
y-width2 , Null ) ;
> 
>          
> 
>          //LRSDColor2 = ParamColor("2 SD Color", colorCycle ); 
> 
>          //LRSDStyle2 = ParamStyle("2 SD Style");
> 
>          
> 
>          Plot( SDU2 , "Upper Lin Reg", LRSDColor2, LRSDStyle2  + 
styleNoRescale + styleNoTitle + styleNoLabel); 
> 
>          Plot( SDL2 , "Lower Lin Reg", LRSDColor2, LRSDStyle2  + 
styleNoRescale + styleNoTitle + styleNoLabel ); 
> 
>          // ============================ End Indicator Code 
==============================================================
> 
>    
> 
>          return SlopeAngle;
> 
>    
> 
>          }
> 
>    
> 
>    
> 
>   _SECTION_BEGIN("Linear Regression");
> 
>   //  Linear Regression Line with 2 Standard Deviation Channels 
Plotted Above and Below 
> 
>   //  Written by Patrick Hargus, with critical hints from Marcin 
Gorzynski, Amibroker.com Technical Support 
> 
>   //      Designed for use with AB 4.63 beta and above, using drag 
and drop feature.  
> 
>   //  Permits plotting a linear regression line of any price field 
available on the chart for a period determined by the user.  
> 
>   //     2 Channels, based on a standard deviation each determined 
by the user, are plotted above and below the linear regression line. 
> 
>   //            A look back feature is also provided for examining 
how the indicator would have appeared on a chart X periods in the 
past.    
> 
>     
> 
>   CurDatabase = GetDatabaseName();
> 
>   if (CurDatabase == "InteractiveBrokers")
> 
>          {
> 
>          DefaultLRPeriod      =      400;
> 
>          MinLRPeriod                =      10;
> 
>          MaxLRPeriod          =  1400;
> 
>          IncrementLRPeriod    =      10;
> 
>          }
> 
>   else
> 
>          {
> 
>          DefaultLRPeriod      =      21;
> 
>          MinLRPeriod                =      1;
> 
>          MaxLRPeriod          =  200;
> 
>          IncrementLRPeriod    =      1;
> 
>          }
> 
>    
> 
>   PlotLRSD1Bool              = ParamToggle("Plot LR Std Dev 
Narrow?", "No|Yes", 1); 
> 
>   PlotLRSD2Bool              = ParamToggle("Plot Std Dev 
Wide?", "No|Yes", 1); 
> 
>    
> 
>   Daysback                   = Param("Period for Liner Regression 
Line",DefaultLRPeriod,MinLRPeriod,MaxLRPeriod ,IncrementLRPeriod);
> 
>   shift                      = Param("Look back period",0,0,240,1); 
> 
>   LRSTitleUpColor      = ParamColor("LR Slope Title Up Color", 
colorLime );
> 
>   LRSTitleDownColor = ParamColor("LR Slope Title Down Color", 
colorRed );
> 
>    
> 
>   LRColor                           = ParamColor("LR Color", 
colorCycle ); 
> 
>   LRStyle                           = ParamStyle("LR Style");
> 
>    
> 
>   LRSDPeriods          = Param("LR Std Dev Wide", 1.5, 0, 6, 0.1);
> 
>   LRSDColor                  = ParamColor("SD Color", colorCycle ); 
> 
>   LRSDStyle                  = ParamStyle("SD Style");
> 
>          
> 
>   LRSDPeriods2         = Param("Std Dev Narrow", 2.0, 0, 6, 0.1);
> 
>   LRSDColor2                 = ParamColor("2 SD Color", 
colorCycle ); 
> 
>   LRSDStyle2                 = ParamStyle("2 SD Style");
> 
>    
> 
>    
> 
>   //Init
> 
>   CurSymbolPrice       =      0;
> 
>    
> 
>   if (   PlotLRBool 
> 
>          AND PlotSymbolBool
> 
>          AND CurSymbolType != "NewHiLow"
> 
>          AND CurSymbolType != "DMF"
> 
>          AND CurSymbolType != "AD"
> 
>      )   
> 
>          {
> 
>          //First get the Current Symbol price that we are using 
> 
>          if (   CurSymbolType == "Price" 
> 
>                 OR CurSymbolType == "Index" 
> 
>                 OR CurSymbolType == "MutualFund")
> 
>                 {
> 
>                 CurSymbolPrice = C; 
> 
>                 }
> 
>                 
> 
>          if (CurSymbolType == "DMF")
> 
>                 {
> 
>                 CurSymbolPrice       = C    ;
> 
>                 CurSymbolPrice       = EMA(CurSymbolPrice , 
SmoothPds);
> 
>                 }
> 
>          else if (CurSymbolType == "NewHiLow")
> 
>                 {
> 
>                 CurSymbolPrice =     0      ;
> 
>                 }
> 
>          else if (CurSymbolType == "AD")
> 
>                 {
> 
>                 AdvancingCount             =      C;
> 
>                 DecliningCount             =      O;
> 
>                 AdvancingVolume      =      H;
> 
>                 DecliningVolume      =      L;
> 
>    
> 
>                 if (ADVolumeBool)    //PlotVolume         
> 
>                        {
> 
>                        ADAdvancing   =      AdvancingVolume;
> 
>                        ADDeclining   =      DecliningVolume;
> 
>                        }
> 
>                 else
> 
>                        {
> 
>                        ADAdvancing   =      AdvancingCount;
> 
>                        ADDeclining   =      DecliningCount;
> 
>                        }
> 
>    
> 
>    
> 
>                 CurSymbolPrice = ADAdvancing - ADDeclining;
> 
>                 }
> 
>   //Title = NumToStr(DecliningCount);
> 
>          LRSlopeAngle = PlotLinearRegression(CurSymbolPrice, 
PlotLRBool, PlotLRSD1Bool, PlotLRSD2Bool,
> 
>                                                                     
   DaysBack, Shift, LRSTitleUpColor, LRSTitleDownColor, LRColor, 
LRStyle, 
> 
>                                                                     
   LRSDPeriods, LRSDColor, LRSDStyle,
> 
>                                 LRSDPeriods2, LRSDColor2, 
LRSDStyle2,
> 
>                                                                     
   SmoothPds);
> 
>                 
> 
>          }
> 
>    
> 
>    
> 
>    
> 
>   _SECTION_END();
> 
>    
> 
> 
> --------------------------------------------------------------------
----------
> 
>   From: amibroker@xxxxxxxxxxxxxxx 
[mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Steve Dugas
>   Sent: Saturday, February 04, 2006 12:11 PM
>   To: amibroker@xxxxxxxxxxxxxxx
>   Subject: Re: [amibroker] Re: Another question about how to use 
LinearReg()
> 
>    
> 
>   OK...Could you show me how you would do this?  Draw the line I 
mean...
> 
>   Steve
> 
>   ----- Original Message ----- 
>   From: "Fred" <ftonetti@xxx>
>   To: <amibroker@xxxxxxxxxxxxxxx>
>   Sent: Saturday, February 04, 2006 2:49 PM
>   Subject: [amibroker] Re: Another question about how to use 
LinearReg()
> 
> 
>   > It is ALSO for drawing straight lines around which one can plot 
among 
>   > other things such as parallel lines at +/- n Standard 
Deviations ... 
>   > 
>   > --- In amibroker@xxxxxxxxxxxxxxx, "Steve Dugas" <sjdugas@> 
wrote:
>   >>
>   >> Hi,
>   >> 
>   >> LinearReg is not for drawing straight lines - it is built by 
>   > plotting the 
>   >> endpoints of a LinReg line as it shifts forward through time. 
Use 
>   > it like a 
>   >> moving average - it hugs the price ( or whatever ) very 
tightly.
>   >> 
>   >> Steve
>   >> 
>   >> ----- Original Message ----- 
>   >> From: "jnz88" <jnz88@>
>   >> To: <amibroker@xxxxxxxxxxxxxxx>
>   >> Sent: Saturday, February 04, 2006 11:55 AM
>   >> Subject: [amibroker] Another question about how to use 
LinearReg()
>   >> 
>   >> 
>   >> > There is a library item in AFL libreary showing how to draw 
>   > linear reg
>   >> > line without using LinearReg() function.
>   >> >
>   >> > Could anybody show me how to use LinearReg() to do the same 
>   > thing. This
>   >> > could help me to understand further about this function
>   >> >
>   >> > thanks,
>   >> >
>   >> >
>   >> >
>   >> >
>   >> >
>   >> >
>   >> > Please note that this group is for discussion between users 
only.
>   >> >
>   >> > To get support from AmiBroker please send an e-mail directly 
to
>   >> > SUPPORT {at} amibroker.com
>   >> >
>   >> > For other support material please check also:
>   >> > http://www.amibroker.com/support.html
>   >> >
>   >> >
>   >> > Yahoo! Groups Links
>   >> >
>   >> >
>   >> >
>   >> >
>   >> >
>   >> >
>   >> >
>   >>
>   > 
>   > 
>   > 
>   > 
>   > 
>   > 
>   > 
>   > Please note that this group is for discussion between users 
only.
>   > 
>   > To get support from AmiBroker please send an e-mail directly to 
>   > SUPPORT {at} amibroker.com
>   > 
>   > For other support material please check also:
>   > http://www.amibroker.com/support.html
>   > 
>   > 
>   > Yahoo! Groups Links
>   > 
>   > 
>   > 
>   > 
>   > 
>   > 
>   >
> 
> 
> 
> 
>   Please note that this group is for discussion between users only.
> 
>   To get support from AmiBroker please send an e-mail directly to 
>   SUPPORT {at} amibroker.com
> 
>   For other support material please check also:
>   http://www.amibroker.com/support.html
> 
> 
> 
> 
> 
> 
> 
>   SPONSORED LINKS Investment management software  Real estate 
investment software  Investment property software  
>         Software support  Real estate investment analysis software  
Investment software  
> 
> 
> --------------------------------------------------------------------
----------
>   YAHOO! GROUPS LINKS 
> 
>     a..  Visit your group "amibroker" on the web.
>       
>     b..  To unsubscribe from this group, send an email to:
>      amibroker-unsubscribe@xxxxxxxxxxxxxxx
>       
>     c..  Your use of Yahoo! Groups is subject to the Yahoo! Terms 
of Service. 
> 
> 
> --------------------------------------------------------------------
----------
>






------------------------ Yahoo! Groups Sponsor --------------------~--> 
Try Online Currency Trading with GFT. Free 50K Demo. Trade 
24 Hours. Commission-Free. 
http://us.click.yahoo.com/RvFikB/9M2KAA/U1CZAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.html

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/