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

Re: [amibroker] Fw: [AmiBroker-at] Can any AFL expert add buy and sell condition for auto-analyses in this afl ?


  • To: amibroker@xxxxxxxxxxxxxxx
  • Subject: Re: [amibroker] Fw: [AmiBroker-at] Can any AFL expert add buy and sell condition for auto-analyses in this afl ?
  • From: reinsley <reinsley@xxxxxxxx>
  • Date: Mon, 31 Aug 2009 17:51:50 +0200

PureBytes Links

Trading Reference Links

Hi,

A good usage of the forum is to answer in the same list.
Your question is in the AB user list and your answer is in AB auto trade...
It is useless to create a new topic every time you answer as long as the 
topic is the same. Somebody that wants to retrieve the topic in the 
archives will be lost.

Be cool, it takes few minutes before to see your message. No need to 
send it 4 times in a minute.

You could use Thunderbird from Mozilla to read the AB posts.

Best regards



subhas mishra a écrit :
>  
> 
> Dear Ram Vel,
> 
> You have added a buy/sell condition in other afl given by me for 
> auto-analyses scan and I am thankful to you for that. Here is another 
> one with the same problem, if you please add buy/sell condition in this 
> afl  for auto-analyses scan, It will be a great help of mine and I will 
> be grateful to you for this act of kindness.
> 
> Regards
> 
> Subhas Chand Mishra
> 
> 
> ----- Forwarded Message ----
> *From:* subhaschandmishra <subhaschandmishra@xxxxxxxxx>
> *To:* AmiBroker-at@xxxxxxxxxxxxxxx
> *Sent:* Sunday, 30 August, 2009 9:01:54 PM
> *Subject:* [AmiBroker-at] Can any AFL expert add buy and sell condition 
> for auto-analyses in this afl ?
> 
>  
> 
> Here is an afl which gives lowest low and gives buy at reverse and 
> highest high and sell at reverse with buy and sell arrow. But it's 
> creator Irfaan has not added variables/condition s for Auto-Analyses 
> scan and exploration so it can't be used on Auto-Analyses of Amibroker. 
> If any AFL expert do and add buy/sell condition for scan and exploration 
> purpose then it will be very usefull for scanning the whole market and 
> finding out which stock is trading at lowest low,which is at highest 
> high, which is reversing from lowest low and which is reversing from 
> highest high. I shall be obliged if any AFL expert do the needfull.
> 
> _SECTION_BEGIN( "Advanced Trend Lines");
> function GetXSupport( Lo, Percentage, Back)
> {
> return ((BarCount - 1) - LastValue(TroughBar s(Lo, Percentage,Back) ));
> }
> function GetYSupport( Lo, Percentage, Back)
> {
> return (LastValue(Trough( Lo, Percentage, back)));
> }
> 
> function GetXResistance( Hi, Percentage, Back)
> {
> return ((BarCount - 1) -LastValue(PeakBars (Hi, Percentage, Back)));
> }
> function GetYResistance( Hi, Percentage, Back)
> {
> return (LastValue(Peak( Hi, Percentage, Back)));
> }
> function TD_Supply(P)
> {
> return ( P > Ref(P, 1) AND P > Ref(P, -1) AND P > Ref(C, -2));
> }
> function TD_Demand(P)
> {
> return ( P < Ref(P, 1) AND P < Ref(P, -1) AND P < Ref(C, -2));
> }
> //////////// ///////// ///////// ///////// ///////// ///////// ///////// 
> //////
> //Parameters
> Percentage = Param("Percentage" , 0.44, 0.01, 100. ,0.01);
> DrawAllLines = ParamToggle( "Draw All Lines?", "No|Yes");
> Lines = Param("Lines? ", 1, 1, BarCount-2);
> DrawR = ParamList("Resistan ce Points", "Off|High to High|High to Low", 1);
> DrawS = ParamList("Support Points", "Off|Low to Low|Low to High", 1);
> ShowTDP = ParamToggle( "Show TD Pionts", "No|Yes", 0);
> AllOrDownR = ParamToggle( "Resistance Direction", "All|Down");
> AllOrUpS = ParamToggle( "Support Direction", "All|Up");
> ShowSR = ParamToggle( "Show Vert S/R","No|Yes" , 0);
> SRPer = Param("S/R Percentage", 3, 1);
> SRBack = Param("S/R Back", 5, 1);
> str = "";
> Res = Sup = 0;
> Con = 1;
> //////////// ///////// ///////// ///////// ///////// ///////// ///////// 
> //////
> Main = C;
> Con = ConS = ConR = 1;
> if(DrawS=="Low to Low")
> {
> Support1 = L;
> Support2 = L;
> }
> else
> {
> Support1 = L;
> Support2 = H;
> }
> if(DrawR=="High to High")
> {
> Resistance1 = H;
> Resistance2 = H;
> }
> else
> {
> Resistance1 = H;
> Resistance2 = L;
> }
> //////////// ///////// ///////// ///////// ///////// ///////// ///////// 
> //////
> //Plotting Area
> Plot(Main, "", IIf(C>O,colorBright Green, colorPink), styleCandle) ;
> if(DrawAllLines)
> for(i = 2; i<=Lines+1; i++)
> {
> if(DrawS!="Off" )
> {
> x0 = GetXSupport( Support1, Percentage, i);
> x1 = GetXSupport( Support2, Percentage, i-1);
> y0 = GetYSupport( Support1, Percentage, i);
> y1 = GetYSupport( Support2, Percentage, i-1);
> x = LineArray(x0, y0, x1, y1, 1);
> if(AllOrUpS) ConS = StrToNum(NumToStr( y0 < y1));
> if(Con AND ConS)
> Plot(x, "", IIf(LastValue( C) < LastValue(x) , colorBlue,colorCust 
> om12), styleLine|styleThic k);
> }
> if(DrawR!="Off" )
> {
> x0 = GetXResistance( Resistance1, Percentage, i);
> x1 = GetXResistance( Resistance2, Percentage, i-1);
> y0 = GetYResistance( Resistance1, Percentage, i);
> y1 = GetYResistance( Resistance2, Percentage, i-1);
> x = LineArray(x0, y0, x1, y1, 1);
> if(AllOrDownR) ConR = y0 > y1;
> if(Con AND ConR)
> Plot(x, "", IIf(LastValue( C) < LastValue(x) , colorBlue,colorCust 
> om12), styleLine|styleThic k);
> }
> }
> else
> {
> if(DrawS!="Off" )
> {
> x0 = GetXSupport( Support1, Percentage, Lines+1);
> x1 = GetXSupport( Support2, Percentage, Lines);
> y0 = GetYSupport( Support1, Percentage, Lines+1);
> y1 = GetYSupport( Support2, Percentage, Lines);
> x = LineArray(x0, y0, x1, y1, 1 );
> Sup = LastValue(LinRegSlo pe(x, Lines+1));
> if(AllOrUpS) ConS = y0 < y1;
> if(Con AND ConS)
> Plot(x, "", IIf(LastValue( C) < LastValue(x) , colorBlue,colorCust 
> om12), styleLine|styleThic k);
> }
> if(DrawR!="Off" )
> {
> x0 = GetXResistance( Resistance1, Percentage, Lines+1);
> x1 = GetXResistance( Resistance2, Percentage, Lines);
> y0 = GetYResistance( Resistance1, Percentage, Lines+1);
> y1 = GetYResistance( Resistance2, Percentage, Lines);
> x = LineArray(x0, y0, x1, y1, 1 );
> Res = LastValue(LinRegSlo pe(x, Lines+1));
> if(AllOrDownR) ConR = y0 > y1;
> if(Con AND ConR)
> Plot(x, "", IIf(LastValue( C) < LastValue(x) , colorBlue,colorCust 
> om12), styleLine|styleThic k);
> }
> str = "\nR Slope=("+Res+ "), S Slope=("+Sup+ ")";
> }
> 
> if(ShowTDP)
> {
> PlotShapes(TD_ Supply(H) *shapeSmallCircl e, colorRed, 0, H, H*.001);
> PlotShapes(TD_ Demand(L) *shapeSmallCircl e, colorGreen, 0, L, -L*.001);
> }
> if(ShowSR)
> {
> for(i=1; i<=SRBack; i++)
> {
> x0 = GetXSupport( L, SRPer, i);
> x1 = BarCount-1;
> y0 = GetYSupport( L, SRPer, i);
> x = LineArray(x0, y0, x1, y0, 0);
> Plot(x, "", IIf(LastValue( C) > x, colorDarkGreen, colorDarkRed) , 
> styleLine|styleDash ed|styleThick) ;
> x0 = GetXResistance( H, SRPer, i);
> y0 = GetYResistance( H, SRPer, i);
> x = LineArray(x0, y0, x1, y0, 0);
> Plot(x, "", IIf(LastValue( C) > x, colorDarkGreen, colorDarkRed) , 
> styleLine|styleDash ed|styleThick) ;
> 
> }
> }
> Title =FullName()+ " ({{NAME}})\n{ {DATE}}\n" +"Open: "+O+", Hi: "+H+", 
> Lo: "+L+", Close: "+C+StrFormat( " (%.2f %.2f\%)", C-Ref(C, -1), 
> SelectedValue( ROC(C, 1)))+str;
> 
> _SECTION_END( );
> 
> // Paste the code below to your price chart somewhere and green ribbon 
> means both
> // both MACD and ADX trending up so if the red ribbon shows up the MACD 
> and the ADX
> // are both trending down.
> P1 = Param("Period" ,10,0,100, 1);
> MyADX= ADX(P1);
> bluestar=MyADX > Ref( MyADX, 1);
> greenstar=MyADX > Ref( MyADX, -1 );
> Cond12=//Cross( ADX( 10 ), PDI() )
> //OR
> Cross( MDI(), PDI() ) OR
> Cross( MDI(), ADX( 10 ) )OR//( (PDI()>MDI() )
> //OR (PDI()>ADX(10) ))OR
> MDI()<ADX( 10 ) >PDI() ;
> Cond4 = ( Cross( PDI(), MDI() ) )
> OR( Cross( PDI(), ADX( 10 ) ) )
> AND ( PDI()> MDI() )
> AND ( PDI()> ADX( 10 )) ;
> COND41 = Cross(ADX( 10 ), MDI() )
> OR Cross (PDI(),MDI() )
> OR Cross (PDI(),ADX( 10 ) )
> OR( (MDI()>PDI() )
> OR (MDI()>ADX(10) ))
> OR PDI()<ADX( 10 ) >MDI() ;
> CONDBUY= COND41 AND COND4 ;
> CONDsell= Cond12;
> //////////// ///////// ///////// ///////// ///////// /////
> // LSMA25 Angle
> PI = atan(1.00) * 4;
> 
> periods = 30;
> HighHigh = HHV(H, periods);
> LowLow = LLV(L, periods);
> range = 25 / (HighHigh - LowLow) * LowLow;
> LSMA25 = LinearReg(C, 25 );
> x1_LSMA25 = 0;
> x2_LSMA25 = 1;
> y1_LSMA25 = 0;
> y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range;
> c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*( x2_LSMA25 - x1_LSMA25) + 
> (y2_LSMA25 - y1_LSMA25)*( y2_LSMA25 - y1_LSMA25));
> angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_ LSMA25) / PI);
> angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25) ;
> 
> zrbuy=C > LSMA25;
> zrsell=C < LSMA25;
> //////////// ///////// ///////// ///////// ///////// ///
> up1=greenstar AND CONDBUY ;
> sel1=greenstar AND zrsell;
> 
> //////////// ///////// ///////// //////
> 
> // Paste the code below to your price chart somewhere and green ribbon 
> means both
> // both MACD and ADX trending up so if the red ribbon shows up the MACD 
> and the ADX
> // are both trending down.
> P1 = Param("Period" ,10,0,100, 1);
> MyADX= ADX(P1);
> bluestar=MyADX > Ref( MyADX, 1);
> greenstar=MyADX > Ref( MyADX, -1 );
> Cond12=//Cross( ADX( 10 ), PDI() )
> //OR
> Cross( MDI(), PDI() ) OR
> Cross( MDI(), ADX( 10 ) )OR//( (PDI()>MDI() )
> //OR (PDI()>ADX(10) ))OR
> MDI()<ADX( 10 ) >PDI() ;
> Cond4 = ( Cross( PDI(), MDI() ) )
> OR( Cross( PDI(), ADX( 10 ) ) )
> AND ( PDI()> MDI() )
> AND ( PDI()> ADX( 10 )) ;
> COND41 = Cross(ADX( 10 ), MDI() )
> OR Cross (PDI(),MDI() )
> OR Cross (PDI(),ADX( 10 ) )
> OR( (MDI()>PDI() )
> OR (MDI()>ADX(10) ))
> OR PDI()<ADX( 10 ) >MDI() ;
> CONDBUY= COND41 AND COND4 ;
> CONDsell= Cond12;
> //////////// ///////// ///////// ///////// ///////// /////
> // LSMA25 Angle
> PI = atan(1.00) * 4;
> 
> periods = 30;
> HighHigh = HHV(H, periods);
> LowLow = LLV(L, periods);
> range = 25 / (HighHigh - LowLow) * LowLow;
> LSMA25 = LinearReg(C, 25 );
> x1_LSMA25 = 0;
> x2_LSMA25 = 1;
> y1_LSMA25 = 0;
> y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range;
> c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*( x2_LSMA25 - x1_LSMA25) + 
> (y2_LSMA25 - y1_LSMA25)*( y2_LSMA25 - y1_LSMA25));
> angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_ LSMA25) / PI);
> angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25) ;
> 
> zrbuy=C > LSMA25;
> zrsell=C < LSMA25;
> //////////// ///////// ///////// ///////// ///////// ///
> up1=greenstar AND CONDBUY ;
> sel1=greenstar AND zrsell;
> 
> //////////// ///////// ///////// //////
> 
> // Paste the code below to your price chart somewhere and green ribbon 
> means both
> // both MACD and ADX trending up so if the red ribbon shows up the MACD 
> and the ADX
> // are both trending down.
> P1 = Param("Period" ,10,0,100, 1);
> MyADX= ADX(P1);
> bluestar=MyADX > Ref( MyADX, 1);
> greenstar=MyADX > Ref( MyADX, -1 );
> Cond12=//Cross( ADX( 10 ), PDI() )
> //OR
> Cross( MDI(), PDI() ) OR
> Cross( MDI(), ADX( 10 ) )OR//( (PDI()>MDI() )
> //OR (PDI()>ADX(10) ))OR
> MDI()<ADX( 10 ) >PDI() ;
> Cond4 = ( Cross( PDI(), MDI() ) )
> OR( Cross( PDI(), ADX( 10 ) ) )
> AND ( PDI()> MDI() )
> AND ( PDI()> ADX( 10 )) ;
> COND41 = Cross(ADX( 10 ), MDI() )
> OR Cross (PDI(),MDI() )
> OR Cross (PDI(),ADX( 10 ) )
> OR( (MDI()>PDI() )
> OR (MDI()>ADX(10) ))
> OR PDI()<ADX( 10 ) >MDI() ;
> CONDBUY= COND41 AND COND4 ;
> CONDsell= Cond12;
> //////////// ///////// ///////// ///////// ///////// /////
> // LSMA25 Angle
> PI = atan(1.00) * 4;
> 
> periods = 30;
> HighHigh = HHV(H, periods);
> LowLow = LLV(L, periods);
> range = 25 / (HighHigh - LowLow) * LowLow;
> LSMA25 = LinearReg(C, 25 );
> x1_LSMA25 = 0;
> x2_LSMA25 = 1;
> y1_LSMA25 = 0;
> y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range;
> c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*( x2_LSMA25 - x1_LSMA25) + 
> (y2_LSMA25 - y1_LSMA25)*( y2_LSMA25 - y1_LSMA25));
> angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_ LSMA25) / PI);
> angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25) ;
> 
> zrbuy=C > LSMA25;
> zrsell=C < LSMA25;
> //////////// ///////// ///////// ///////// ///////// ///
> up1=greenstar AND zrbuy ;
> sel1=greenstar AND zrsell;
> 
> //////////// ///////// ///////// //////
> 
> // Paste the code below to your price chart somewhere and green ribbon 
> means both
> // both MACD and ADX trending up so if the red ribbon shows up the MACD 
> and the ADX
> // are both trending down.
> P1 = Param("Period" ,10,0,100, 1);
> MyADX= ADX(P1);
> bluestar=MyADX > Ref( MyADX, 1);
> greenstar=MyADX > Ref( MyADX, -1 );
> Cond12=//Cross( ADX( 10 ), PDI() )
> //OR
> Cross( MDI(), PDI() ) OR
> Cross( MDI(), ADX( 10 ) )OR//( (PDI()>MDI() )
> //OR (PDI()>ADX(10) ))OR
> MDI()<ADX( 10 ) >PDI() ;
> Cond4 = ( Cross( PDI(), MDI() ) )
> OR( Cross( PDI(), ADX( 10 ) ) )
> AND ( PDI()> MDI() )
> AND ( PDI()> ADX( 10 )) ;
> COND41 = Cross(ADX( 10 ), MDI() )
> OR Cross (PDI(),MDI() )
> OR Cross (PDI(),ADX( 10 ) )
> OR( (MDI()>PDI() )
> OR (MDI()>ADX(10) ))
> OR PDI()<ADX( 10 ) >MDI() ;
> CONDBUY= COND41 AND COND4 ;
> CONDsell= Cond12;
> //////////// ///////// ///////// ///////// ///////// /////
> // LSMA25 Angle
> PI = atan(1.00) * 4;
> 
> periods = 30;
> HighHigh = HHV(H, periods);
> LowLow = LLV(L, periods);
> range = 25 / (HighHigh - LowLow) * LowLow;
> LSMA25 = LinearReg(C, 25 );
> x1_LSMA25 = 0;
> x2_LSMA25 = 1;
> y1_LSMA25 = 0;
> y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range;
> c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*( x2_LSMA25 - x1_LSMA25) + 
> (y2_LSMA25 - y1_LSMA25)*( y2_LSMA25 - y1_LSMA25));
> angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_ LSMA25) / PI);
> angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25) ;
> 
> zrbuy=C > LSMA25;
> zrsell=C < LSMA25;
> //////////// ///////// ///////// ///////// ///////// ///
> up1=greenstar AND zrbuy ;
> sel1=greenstar AND zrsell;
> 
> //////////// ///////// ///////// //////
> 
> _SECTION_BEGIN( "trending ribbon");
> uptrend=PDI( )>MDI()AND Signal()<MACD( );
> downtrend=MDI( )>PDI()AND Signal()>MACD( );
> 
> Plot( 100, /* defines the height of the ribbon in percent of pane width 
> */"ribbon",
> IIf( up1, colorGreen, IIf( sel1, colorRed,IIf( bluestar, colorDarkBlue, 
> 0 ))), /* choose color */
> styleOwnScale| styleArea| styleNoLabel, -0.5, 100 );
> //////////// ///////// ///////// ///////// ///////// ///////
> _SECTION_END( );
> 
> _SECTION_BEGIN( "new irfan");
> Cond12=//Cross( ADX( 10 ), PDI() )
> //OR
> Cross( MDI(), PDI() ) OR
> Cross( MDI(), ADX( 10 ) )OR//( (PDI()>MDI() )
> //OR (PDI()>ADX(10) ))OR
> MDI()<ADX( 10 ) >PDI() ;
> Cond4 = ( Cross( PDI(), MDI() ) )
> OR( Cross( PDI(), ADX( 10 ) ) )
> AND ( PDI()> MDI() )
> AND ( PDI()> ADX( 10 )) ;
> COND41 = Cross(ADX( 10 ), MDI() )
> OR Cross (PDI(),MDI() )
> OR Cross (PDI(),ADX( 10 ) )
> OR( (MDI()>PDI() )
> OR (MDI()>ADX(10) ))
> OR PDI()<ADX( 10 ) >MDI() ;
> CONDBUY= COND41 AND COND4 ;
> 
> PlotShapes(IIf (COND12,shapeDownAr row,shapeNone) ,colorCustom8, 0, 
> High, Offset=-10);
> 
> PlotShapes(IIf (CONDBUY,shapeUpArr ow,shapeNone) ,colorWhite, 0, Low, 
> Offset=-10);
> _SECTION_END( );
> nBars = Param("Number of bars", 12, 5, 40);
> bTrace = Param("Include trace output", 1, 0, 1);
> nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 1);
> bShowTCZ = Param("Show TCZ", 1, 0, 1);
> nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 1);
> nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, .04, .2, .01);
> bLastBarCanBePiv = Param("Last bar can be a pivot", 1, 0, 1);
> retrcTolerance = .01;
> tczTolerance = .005;
> nNumBarsToScan = 120;
> 
> // -- added from exploration version 20040204
> nExploreBarIdx = 0;
> nExploreDate = 0;
> nCurDateNum = 0;
> DN = DateNum();
> DT = DateTime();
> 
> // -- key exploration variables
> bTCZLong = False;
> bTCZShort = False;
> nAnchorPivIdx = 0;
> 
> ADX8 = ADX(8);
> 
> // 1 - INDICATOR, 2 - COMMENTARY, 3 - SCAN,
> // 4 - EXPLORATION, 5 - BACKTEST / Optimize
> if(Status("action" )==1) {
> bDraw = True;
> bUseLastVis = Param("Use last visible bar", 1, 0, 1);
> } else {
> bDraw = False;
> bUseLastVis = False;
> bTrace = False;
> nExploreDate = Status("rangetodate ");
> for (i=LastValue( BarIndex( ));i>=0;i- -) {
> nCurDateNum = DN[i];
> if (nCurDateNum == nExploreDate) {
> nExploreBarIdx = i;
> }
> }
> // -- if(Status("action" )==1...
> }
> 
> GraphXSpace= 7;
> 
> // -- basic candle chart
> // -- if this appears inside if block, strange
> // drawing results!
> //PlotOHLC(Open, High, Low, Close,
> //"BIdx = " + BarIndex() +
> /// "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L
> // + "\n"+"C ",
> // colorBlack, styleNoDraw) ;
> 
> if (bDraw) {
> Plot(MA(C, 21), "21 bar MA", colorAqua,
> styleNoDraw+ styleNoRescale+ styleNoLabel) ;
> Plot(MA(C, 55), "55 bar MA", colorGreen,
> styleNoDraw+ styleNoRescale+ styleNoLabel) ;
> //Plot(MA(C, 233), "233 bar MA", colorDarkRed,
> // styleLine+styleNoRe scale+styleNoLab el);
> }
> 
> // -- Create 0-initialized arrays the size of barcount
> aHPivs = H - H;
> aLPivs = L - L;
> aHPivHighs = H - H;
> aLPivLows = L - L;
> aHPivIdxs = H - H;
> aLPivIdxs = L - L;
> aAddedHPivs = H - H;
> aAddedLPivs = L - L;
> aLegVol = H - H;
> aRetrcVol = H - H;
> 
> nHPivs = 0;
> nLPivs = 0;
> 
> lastHPIdx = 0;
> lastLPIdx = 0;
> lastHPH = 0;
> lastLPL = 0;
> curPivBarIdx = 0;
> 
> // -- looking back from the current bar, how many bars
> // back were the hhv and llv values of the previous
> // n bars, etc.?
> aHHVBars = HHVBars(H, nBars);
> aLLVBars = LLVBars(L, nBars);
> aHHV = HHV(H, nBars);
> aLLV = LLV(L, nBars);
> 
> // -- Initialize value of curTrend
> nLastVisBar = LastValue(
> Highest(IIf( Status("barvisib le"), BarIndex(), 0)));
> 
> curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0, nExploreBarIdx,
> LastValue(BarIndex( ))));
> 
> curTrend = "";
> if (aLLVBars[curBar] < aHHVBars[curBar] )
> curTrend = "D";
> else
> curTrend = "U";
> 
> // -- Loop through bars. Search for
> // entirely array-based approach
> // in future version
> /* ************ *******
> Find main pivots
> ************ ******* */
> 
> // -- Make sure there are enough bars!
> if (curBar >= nNumBarsToScan) {
> for (i=0; i<nNumBarsToScan; i++) {
> 
> // -- value of curBar dependent on two parameters
> curBar = IIf(nlastVisBar > 0 AND bUseLastVis,
> nlastVisBar- i,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0,
> nExploreBarIdx- i,
> LastValue(BarIndex( ))-i));
> 
> // -- Have we identified a pivot? If trend is down...
> if (aLLVBars[curBar] < aHHVBars[curBar] ) {
> 
> // ... and had been up, this is a trend change
> if (curTrend == "U") {
> curTrend = "D";
> // -- Capture pivot information
> curPivBarIdx = curBar - aLLVBars[curBar] ;
> aLPivs[curPivBarIdx ] = 1;
> aLPivLows[nLPivs] = L[curPivBarIdx] ;
> aLPivIdxs[nLPivs] = curPivBarIdx;
> nLPivs++;
> }
> // -- or current trend is up
> } else {
> if (curTrend == "D") {
> curTrend = "U";
> curPivBarIdx = curBar - aHHVBars[curBar] ;
> aHPivs[curPivBarIdx ] = 1;
> aHPivHighs[nHPivs] = H[curPivBarIdx] ;
> aHPivIdxs[nHPivs] = curPivBarIdx;
> nHPivs++;
> }
> // -- If curTrend is up...else...
> }
> 
> // -- loop through bars
> }
> }
> /* ************ *******
> Found main pivots
> ************ ******* */
> 
> /* ************ ********* ****
> Finding missed pivot(s)
> ************ ********* **** */
> 
> // -- Start at last bar. Reestablish curBar
> curBar =
> IIf(nlastVisBar > 0 AND bUseLastVis,
> nlastVisBar,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0,
> nExploreBarIdx,
> LastValue(BarIndex( )))
> );
> 
> // -- Make sure I found at least two of each above.
> if (nHPivs >= 2 AND nLPivs >= 2) {
> 
> lastLPIdx = aLPivIdxs[0] ;
> lastLPL = aLPivLows[0] ;
> 
> lastHPIdx = aHPivIdxs[0] ;
> lastHPH = aHPivHighs[0] ;
> 
> nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);
> 
> nAddPivsRng = curBar - nLastHOrLPivIdx;
> aLLVAfterLastPiv = LLV(L, nAddPivsRng) ;
> nLLVAfterLastPiv = aLLVAfterLastPiv[ curBar];
> aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng) ;
> nLLVIdxAfterLastPiv = curBar - aLLVIdxAfterLastPiv [curBar];
> aHHVAfterLastPiv = HHV(H, nAddPivsRng) ;
> nHHVAfterLastPiv = aHHVAfterLastPiv[ curBar];
> aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng) ;
> nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv [curBar];
> 
> // -- Later want to add last high pivot only if
> // not in buy mode from last and still in trade
> 
> /*
> Note - I'm only interested in adding pivots if I'm in
> a higher-highs or lower-lows scenario
> */
> 
> 
> // -- OK, let's start where the last high pivot occurs after the
> // last Low pivot
> if (lastHPIdx > lastLPIdx) {
> 
> /* There are at least two possibilities here. One is that
> the previous high was higher, indicating that this is a
> possible short retracement or one in the making.
> The other is that the previous high was lower, indicating
> that this is a possible long retracement in the working.
> However, both depend on opposing pivots. E.g., if I find
> higher highs, what if I have lower lows?
> 
> If the highs are descending, then I can consider:
> - a lower low, and leave it at that
> - a higher high and higher low
> - a lower low and another lower high
> */
> if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> 
> if (nLLVAfterLastPiv < aLPivLows[0] AND
> (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> AND nLLVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aLPivs[nLLVIdxAfter LastPiv] = 1;
> aAddedLPivs[ nLLVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nLPivs; j++) {
> aLPivLows[nLPivs- j] = aLPivLows[nLPivs- (j+1)];
> aLPivIdxs[nLPivs- j] = aLPivIdxs[nLPivs- (j+1)];
> }
> aLPivLows[0] = nLLVAfterLastPiv;
> aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> nLPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> // -- Here, the last piv is a high piv, and we have
> // higher-highs. The most likely addition is a
> // Low piv that is a retracement.
> } else {
> 
> if (nLLVAfterLastPiv > aLPivLows[0] AND
> (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> AND nLLVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aLPivs[nLLVIdxAfter LastPiv] = 1;
> aAddedLPivs[ nLLVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nLPivs; j++) {
> aLPivLows[nLPivs- j] = aLPivLows[nLPivs- (j+1)];
> aLPivIdxs[nLPivs- j] = aLPivIdxs[nLPivs- (j+1)];
> }
> aLPivLows[0] = nLLVAfterLastPiv;
> aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> nLPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> // -- The last piv is a high and we have higher highs
> // OR lower highs
> }
> 
> /* ************ ********* ********* ********* ********* ********* *******
> Still finding missed pivot(s). Here, the last piv is a low piv.
> ************ ********* ********* ********* ********* ********* ******* */
> } else {
> 
> // -- First case, lower highs
> if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> 
> if (nHHVAfterLastPiv < aHPivHighs[0] AND
> (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> AND nHHVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark that for plotting
> aHPivs[nHHVIdxAfter LastPiv] = 1;
> aAddedHPivs[ nHHVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nHPivs; j++) {
> aHPivHighs[nHPivs- j] = aHPivHighs[nHPivs- (j+1)];
> aHPivIdxs[nHPivs- j] = aHPivIdxs[nhPivs- (j+1)];
> }
> aHPivHighs[0] = nHHVAfterLastPiv;
> aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> nHPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> // -- Second case when last piv is a low piv, higher highs
> // Most likely addition is high piv that is a retracement.
> // Considering adding a high piv as long as it is higher
> } else {
> 
> // -- Where I have higher highs,
> if (nHHVAfterLastPiv > aHPivHighs[0] AND
> (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> AND nHHVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aHPivs[nHHVIdxAfter LastPiv] = 1;
> aAddedHPivs[ nHHVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nHPivs; j++) {
> aHPivHighs[nHPivs- j] = aHPivHighs[nHPivs- (j+1)];
> aHPivIdxs[nHPivs- j] = aHPivIdxs[nhPivs- (j+1)];
> }
> aHPivHighs[0] = nHHVAfterLastPiv;
> aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> nHPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> }
> 
> }
> 
> // -- If there are at least two of each
> }
> 
> /* ************ ********* ********* ********* *
> // -- Done with finding pivots
> ************ ********* ********* ********* ** */
> 
> if (bDraw) {
> 
> // -- OK, let's plot the pivots using arrows
> PlotShapes(
> IIf(aHPivs== 1, shapeNone, shapeNone),
> colorRed, 0, High, Offset=-15);
> PlotShapes(
> IIf(aAddedHPivs= =1, shapeNone, shapeNone),
> colorDarkRed, 0, High, Offset=-15);
> PlotShapes(
> IIf(aLPivs== 1, shapeNone , shapeNone),
> colorGreen, 0, Low, Offset=-15);
> PlotShapes(
> IIf(aAddedLPivs= =1,shapeNone , shapeNone),
> colorDarkGreen, 0, Low, Offset=-15);
> }
> 
> /* ************ ********* ********* ********* *
> // -- Done with discovering and plotting pivots
> ************ ********* ********* ********* ** */
> 
> // -- I'm going to want to look for possible retracement
> risk = 0;
> profInc = 0;
> nLeg0Pts = 0;
> nLeg0Bars = 0;
> nLeg0Vol = 0;
> nLeg1Pts = 0;
> nLeg1Bars = 0;
> nLeg1Vol = 0;
> nLegBarsDiff = 0;
> nRtrc0Pts = 0;
> nRtrc0Bars = 0;
> nRtrc0Vol = 0;
> nRtrc1Pts = 0;
> nRtrc1Bars = 0;
> nRtrc1Vol = 0;
> 
> minRtrc = 0;
> maxRtrc = 0;
> minLine = 0;
> maxLine = 0;
> triggerLine = 0;
> firstProfitLine = 0;
> triggerInc = 0;
> triggerPrc = 0;
> firstProfitPrc = 0;
> retrcPrc = 0;
> retrcBar = 0;
> retrcBarIdx = 0;
> retrcRng = 0;
> aRetrcPrc = H-H;
> aRetrcPrcBars = H-H;
> aRetrcClose = C;
> retrcClose = 0;
> 
> // -- Do TCZ calcs. Arrangement of pivs very specific
> // for this setup.
> if (nHPivs >= 2 AND
> nLPivs >=2 AND
> aHPivHighs[0] > aHPivHighs[1] AND
> aLPivLows[0] > aLPivLows[1] ) {
> 
> tcz500 =
> (aHPivHighs[ 0] -
> (.5 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> tcz618 =
> (aHPivHighs[ 0] -
> (.618 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> tcz786 =
> (aHPivHighs[ 0] -
> (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> 
> retrcRng = curBar - aHPivIdxs[0] ;
> aRetrcPrc = LLV(L, retrcRng);
> retrcPrc = aRetrcPrc[curBar] ;
> aRetrcPrcBars = LLVBars(L, retrcRng);
> retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> // -- bTCZLong setup?
> bTCZLong = (
> 
> // -- Are retracement levels arranged in
> // tcz order?
> tcz500 >= (tcz786 * (1 - tczTolerance) )
> AND
> // .681 is below .786 for long setups
> tcz618 <= (tcz786 * (1 + tczTolerance) )
> AND
> 
> // -- Is the low in the tcz range
> // -- Is the close >= low of tcz range
> // and low <= high of tcz range
> retrcClose >= ((1 - retrcTolerance) * tcz618)
> AND
> retrcPrc <= ((1 + retrcTolerance) * tcz500)
> );
> 
> // -- risk would be high of signal bar minus low of zone
> //risk = 0;
> 
> // -- lower highs and lower lows
> } else if (nHPivs >= 2 AND nLPivs >=2
> AND aHPivHighs[0] < aHPivHighs[1]
> AND aLPivLows[0] < aLPivLows[1] ) {
> 
> tcz500 =
> (aHPivHighs[ 1] -
> (.5 * (aHPivHighs[ 1] - aLPivLows[0] )));
> 
> tcz618 =
> (aHPivHighs[ 0] -
> (.618 * (aHPivHighs[ 1] - aLPivLows[0] )));
> 
> tcz786 =
> (aHPivHighs[ 0] -
> (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> 
> retrcRng = curBar - aLPivIdxs[0] ;
> aRetrcPrc = HHV(H, retrcRng);
> retrcPrc = aRetrcPrc[curBar] ;
> aRetrcPrcBars = HHVBars(H, retrcRng);
> retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> bTCZShort = (
> // -- Are retracement levels arranged in
> // tcz order?
> 
> // .500 is below .786 for short setups
> tcz500 <= (tcz786 * (1 + tczTolerance) )
> AND
> // .681 is above .786 for short setups
> tcz618 >= (tcz786 * (1 - tczTolerance) )
> AND
> 
> // -- Is the close <= high of tcz range
> // and high >= low of tcz range
> retrcClose <= ((1 + retrcTolerance) * tcz618)
> AND
> retrcPrc >= ((1 - retrcTolerance) * tcz500)
> );
> 
> // -- Risk would be top of zone - low of signal bar
> //risk = 0;
> }
> 
> Filter = (bTCZShort OR bTCZLong);
> AddColumn(C, "Close");
> AddColumn(IIf( bTCZLong, 76, 83), "L/S", formatChar);
> 
> // ************ ********* *****
> // END EXPLORATION CODE
> // ************ ********* *****
> 
> // ************ ********* *****
> // BEGIN INDICATOR CODE
> // ************ ********* *****
> 
> // -- what will be our lookback range for the hh and ll?
> nBars = Param("Number of bars", 12, 5, 40);
> bTrace = Param("Include trace output", 1, 0, 1);
> nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 1);
> bShowTCZ = Param("Show TCZ", 1, 0, 1);
> nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 1);
> nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, .04, .2, .01);
> bLastBarCanBePiv = Param("Last bar can be a pivot", 1, 0, 1);
> retrcTolerance = .01;
> tczTolerance = .005;
> nNumBarsToScan = 120;
> 
> // -- added from exploration version 20040204
> nExploreBarIdx = 0;
> nExploreDate = 0;
> nCurDateNum = 0;
> DN = DateNum();
> DT = DateTime();
> 
> // -- key exploration variables
> bTCZLong = False;
> bTCZShort = False;
> nAnchorPivIdx = 0;
> 
> ADX8 = ADX(8);
> 
> // 1 - INDICATOR, 2 - COMMENTARY, 3 - SCAN,
> // 4 - EXPLORATION, 5 - BACKTEST / Optimize
> if(Status("action" )==1) {
> bDraw = True;
> bUseLastVis = Param("Use last visible bar", 1, 0, 1);
> } else {
> bDraw = False;
> bUseLastVis = False;
> bTrace = False;
> nExploreDate = Status("rangetodate ");
> for (i=LastValue( BarIndex( ));i>=0;i- -) {
> nCurDateNum = DN[i];
> if (nCurDateNum == nExploreDate) {
> nExploreBarIdx = i;
> }
> }
> // -- if(Status("action" )==1...
> }
> 
> GraphXSpace= 7;
> 
> // -- basic candle chart
> // -- if this appears inside if block, strange
> // drawing results!
> //PlotOHLC(Open, High, Low, Close,
> //"BIdx = " + BarIndex() +
> // "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L
> // + "\n"+"C ",
> // colorBlack, styleNoDraw) ;
> 
> if (bDraw) {
> Plot(MA(C, 21), "21 bar MA", colorAqua,
> styleNoDraw+ styleNoRescale+ styleNoLabel) ;
> Plot(MA(C, 55), "55 bar MA", colorGreen,
> styleNoDraw+ styleNoRescale+ styleNoLabel) ;
> //Plot(MA(C, 233), "233 bar MA", colorDarkRed,
> // styleLine+styleNoRe scale+styleNoLab el);
> }
> 
> // -- Create 0-initialized arrays the size of barcount
> aHPivs = H - H;
> aLPivs = L - L;
> aHPivHighs = H - H;
> aLPivLows = L - L;
> aHPivIdxs = H - H;
> aLPivIdxs = L - L;
> aAddedHPivs = H - H;
> aAddedLPivs = L - L;
> aLegVol = H - H;
> aRetrcVol = H - H;
> 
> nHPivs = 0;
> nLPivs = 0;
> 
> lastHPIdx = 0;
> lastLPIdx = 0;
> lastHPH = 0;
> lastLPL = 0;
> curPivBarIdx = 0;
> 
> // -- looking back from the current bar, how many bars
> // back were the hhv and llv values of the previous
> // n bars, etc.?
> aHHVBars = HHVBars(H, nBars);
> aLLVBars = LLVBars(L, nBars);
> aHHV = HHV(H, nBars);
> aLLV = LLV(L, nBars);
> 
> // -- Initialize value of curTrend
> nLastVisBar = LastValue(
> Highest(IIf( Status("barvisib le"), BarIndex(), 0)));
> 
> curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0, nExploreBarIdx,
> LastValue(BarIndex( ))));
> 
> curTrend = "";
> if (aLLVBars[curBar] < aHHVBars[curBar] )
> curTrend = "D";
> else
> curTrend = "U";
> 
> // -- Loop through bars. Search for
> // entirely array-based approach
> // in future version
> /* ************ *******
> Find main pivots
> ************ ******* */
> 
> // -- Make sure there are enough bars!
> if (curBar >= nNumBarsToScan) {
> for (i=0; i<nNumBarsToScan; i++) {
> 
> // -- value of curBar dependent on two parameters
> curBar = IIf(nlastVisBar > 0 AND bUseLastVis,
> nlastVisBar- i,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0,
> nExploreBarIdx- i,
> LastValue(BarIndex( ))-i));
> 
> // -- Have we identified a pivot? If trend is down...
> if (aLLVBars[curBar] < aHHVBars[curBar] ) {
> 
> // ... and had been up, this is a trend change
> if (curTrend == "U") {
> curTrend = "D";
> // -- Capture pivot information
> curPivBarIdx = curBar - aLLVBars[curBar] ;
> aLPivs[curPivBarIdx ] = 1;
> aLPivLows[nLPivs] = L[curPivBarIdx] ;
> aLPivIdxs[nLPivs] = curPivBarIdx;
> nLPivs++;
> }
> // -- or current trend is up
> } else {
> if (curTrend == "D") {
> curTrend = "U";
> curPivBarIdx = curBar - aHHVBars[curBar] ;
> aHPivs[curPivBarIdx ] = 1;
> aHPivHighs[nHPivs] = H[curPivBarIdx] ;
> aHPivIdxs[nHPivs] = curPivBarIdx;
> nHPivs++;
> }
> // -- If curTrend is up...else...
> }
> 
> // -- loop through bars
> }
> }
> /* ************ *******
> Found main pivots
> ************ ******* */
> 
> /* ************ ********* ****
> Finding missed pivot(s)
> ************ ********* **** */
> 
> // -- Start at last bar. Reestablish curBar
> curBar =
> IIf(nlastVisBar > 0 AND bUseLastVis,
> nlastVisBar,
> IIf(Status(" action")= =4 AND nExploreBarIdx > 0,
> nExploreBarIdx,
> LastValue(BarIndex( )))
> );
> 
> // -- Make sure I found at least two of each above.
> if (nHPivs >= 2 AND nLPivs >= 2) {
> 
> lastLPIdx = aLPivIdxs[0] ;
> lastLPL = aLPivLows[0] ;
> 
> lastHPIdx = aHPivIdxs[0] ;
> lastHPH = aHPivHighs[0] ;
> 
> nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);
> 
> nAddPivsRng = curBar - nLastHOrLPivIdx;
> aLLVAfterLastPiv = LLV(L, nAddPivsRng) ;
> nLLVAfterLastPiv = aLLVAfterLastPiv[ curBar];
> aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng) ;
> nLLVIdxAfterLastPiv = curBar - aLLVIdxAfterLastPiv [curBar];
> aHHVAfterLastPiv = HHV(H, nAddPivsRng) ;
> nHHVAfterLastPiv = aHHVAfterLastPiv[ curBar];
> aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng) ;
> nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv [curBar];
> 
> // -- Later want to add last high pivot only if
> // not in buy mode from last and still in trade
> 
> /*
> Note - I'm only interested in adding pivots if I'm in
> a higher-highs or lower-lows scenario
> */
> 
> 
> // -- OK, let's start where the last high pivot occurs after the
> // last Low pivot
> if (lastHPIdx > lastLPIdx) {
> 
> /* There are at least two possibilities here. One is that
> the previous high was higher, indicating that this is a
> possible short retracement or one in the making.
> The other is that the previous high was lower, indicating
> that this is a possible long retracement in the working.
> However, both depend on opposing pivots. E.g., if I find
> higher highs, what if I have lower lows?
> 
> If the highs are descending, then I can consider:
> - a lower low, and leave it at that
> - a higher high and higher low
> - a lower low and another lower high
> */
> if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> 
> if (nLLVAfterLastPiv < aLPivLows[0] AND
> (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> AND nLLVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aLPivs[nLLVIdxAfter LastPiv] = 1;
> aAddedLPivs[ nLLVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nLPivs; j++) {
> aLPivLows[nLPivs- j] = aLPivLows[nLPivs- (j+1)];
> aLPivIdxs[nLPivs- j] = aLPivIdxs[nLPivs- (j+1)];
> }
> aLPivLows[0] = nLLVAfterLastPiv;
> aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> nLPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> // -- Here, the last piv is a high piv, and we have
> // higher-highs. The most likely addition is a
> // Low piv that is a retracement.
> } else {
> 
> if (nLLVAfterLastPiv > aLPivLows[0] AND
> (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> AND nLLVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aLPivs[nLLVIdxAfter LastPiv] = 1;
> aAddedLPivs[ nLLVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nLPivs; j++) {
> aLPivLows[nLPivs- j] = aLPivLows[nLPivs- (j+1)];
> aLPivIdxs[nLPivs- j] = aLPivIdxs[nLPivs- (j+1)];
> }
> aLPivLows[0] = nLLVAfterLastPiv;
> aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> nLPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> // -- The last piv is a high and we have higher highs
> // OR lower highs
> }
> 
> /* ************ ********* ********* ********* ********* ********* *******
> Still finding missed pivot(s). Here, the last piv is a low piv.
> ************ ********* ********* ********* ********* ********* ******* */
> } else {
> 
> // -- First case, lower highs
> if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> 
> if (nHHVAfterLastPiv < aHPivHighs[0] AND
> (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> AND nHHVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark that for plotting
> aHPivs[nHHVIdxAfter LastPiv] = 1;
> aAddedHPivs[ nHHVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nHPivs; j++) {
> aHPivHighs[nHPivs- j] = aHPivHighs[nHPivs- (j+1)];
> aHPivIdxs[nHPivs- j] = aHPivIdxs[nhPivs- (j+1)];
> }
> aHPivHighs[0] = nHHVAfterLastPiv;
> aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> nHPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> // -- Second case when last piv is a low piv, higher highs
> // Most likely addition is high piv that is a retracement.
> // Considering adding a high piv as long as it is higher
> } else {
> 
> // -- Where I have higher highs,
> if (nHHVAfterLastPiv > aHPivHighs[0] AND
> (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> AND nHHVIdxAfterLastPiv != curBar ) {
> 
> // -- OK, we'll add this as a pivot.
> // Mark it for plotting...
> aHPivs[nHHVIdxAfter LastPiv] = 1;
> aAddedHPivs[ nHHVIdxAfterLast Piv] = 1;
> 
> // ...and then rearrange elements in the
> // pivot information arrays
> for (j=0; j<nHPivs; j++) {
> aHPivHighs[nHPivs- j] = aHPivHighs[nHPivs- (j+1)];
> aHPivIdxs[nHPivs- j] = aHPivIdxs[nhPivs- (j+1)];
> }
> aHPivHighs[0] = nHHVAfterLastPiv;
> aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> nHPivs++;
> 
> // -- Test whether to add piv given last piv is high
> // AND we have lower highs
> }
> 
> }
> 
> }
> 
> // -- If there are at least two of each
> }
> 
> /* ************ ********* ********* ********* *
> // -- Done with finding pivots
> ************ ********* ********* ********* ** */
> 
> if (bDraw) {
> 
> // -- OK, let's plot the pivots using arrows
> PlotShapes(
> IIf(aHPivs== 1, shapeNone, shapeNone),
> colorRed, 0, High, Offset=-15);
> PlotShapes(
> IIf(aAddedHPivs= =1, shapeNone, shapeNone),
> colorDarkRed, 0, High, Offset=-15);
> PlotShapes(
> IIf(aLPivs== 1, shapeNone , shapeNone),
> colorGreen, 0, Low, Offset=-15);
> PlotShapes(
> IIf(aAddedLPivs= =1,shapeNone , shapeNone),
> colorDarkGreen, 0, Low, Offset=-15);
> }
> 
> /* ************ ********* ********* ********* *
> // -- Done with discovering and plotting pivots
> ************ ********* ********* ********* ** */
> 
> // -- I'm going to want to look for possible retracement
> risk = 0;
> profInc = 0;
> nLeg0Pts = 0;
> nLeg0Bars = 0;
> nLeg0Vol = 0;
> nLeg1Pts = 0;
> nLeg1Bars = 0;
> nLeg1Vol = 0;
> nLegBarsDiff = 0;
> nRtrc0Pts = 0;
> nRtrc0Bars = 0;
> nRtrc0Vol = 0;
> nRtrc1Pts = 0;
> nRtrc1Bars = 0;
> nRtrc1Vol = 0;
> 
> minRtrc = 0;
> maxRtrc = 0;
> minLine = 0;
> maxLine = 0;
> triggerLine = 0;
> firstProfitLine = 0;
> triggerInc = 0;
> triggerPrc = 0;
> firstProfitPrc = 0;
> retrcPrc = 0;
> retrcBar = 0;
> retrcBarIdx = 0;
> retrcRng = 0;
> aRetrcPrc = H-H;
> aRetrcPrcBars = H-H;
> aRetrcClose = C;
> retrcClose = 0;
> 
> // -- Do TCZ calcs. Arrangement of pivs very specific
> // for this setup.
> if (nHPivs >= 2 AND
> nLPivs >=2 AND
> aHPivHighs[0] > aHPivHighs[1] AND
> aLPivLows[0] > aLPivLows[1] ) {
> 
> tcz500 =
> (aHPivHighs[ 0] -
> (.5 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> tcz618 =
> (aHPivHighs[ 0] -
> (.618 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> tcz786 =
> (aHPivHighs[ 0] -
> (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> 
> retrcRng = curBar - aHPivIdxs[0] ;
> aRetrcPrc = LLV(L, retrcRng);
> aRetrcPrcBars = LLVBars(L, retrcRng);
> 
> retrcPrc = aRetrcPrc[curBar] ;
> retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> // -- bTCZLong setup?
> bTCZLong = (
> 
> // -- Are retracement levels arranged in
> // tcz order?
> 
> // .500 is above .786 for long setups
> tcz500 >= (tcz786 * (1 - tczTolerance) )
> AND
> // .681 is below .786 for long setups
> tcz618 <= (tcz786 * (1 + tczTolerance) )
> AND
> 
> // -- Is the low in the tcz range
> // -- Is the close >= low of tcz range
> // and low <= high of tcz range
> retrcClose >= ((1 - retrcTolerance) * tcz618)
> AND
> retrcPrc <= ((1 + retrcTolerance) * tcz500)
> );
> 
> // -- risk would be high of signal bar minus low of zone
> //risk = 0;
> 
> // -- lower highs and lower lows
> } else if (nHPivs >= 2 AND nLPivs >=2
> AND aHPivHighs[0] < aHPivHighs[1]
> AND aLPivLows[0] < aLPivLows[1] ) {
> 
> tcz500 =
> (aHPivHighs[ 1] -
> (.5 * (aHPivHighs[ 1] - aLPivLows[0] )));
> 
> tcz618 =
> (aHPivHighs[ 0] -
> (.618 * (aHPivHighs[ 1] - aLPivLows[0] )));
> 
> tcz786 =
> (aHPivHighs[ 0] -
> (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> 
> retrcRng = curBar - aLPivIdxs[0] ;
> aRetrcPrc = HHV(H, retrcRng);
> retrcPrc = aRetrcPrc[curBar] ;
> aRetrcPrcBars = HHVBars(H, retrcRng);
> retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> bTCZShort = (
> // -- Are retracement levels arranged in
> // tcz order?
> 
> // .500 is below .786 for short setups
> tcz500 <= (tcz786 * (1 + tczTolerance) )
> AND
> // .681 is above .786 for short setups
> tcz618 >= (tcz786 * (1 - tczTolerance) )
> AND
> 
> // -- Is the close <= high of tcz range
> // and high >= low of tcz range
> retrcClose <= ((1 + retrcTolerance) * tcz618)
> AND
> retrcPrc >= ((1 - retrcTolerance) * tcz500)
> );
> 
> // -- Risk would be top of zone - low of signal bar
> //risk = 0;
> }
> 
> // -- Show zone if present
> if (bTCZShort OR bTCZLong) {
> 
> // -- Be prepared to see symmetry
> if (bTCZShort) {
> if (aLPivIdxs[0] > aHPivIdxs[0] ) {
> // -- Valuable, useful symmetry information
> nRtrc0Pts = aHPivHighs[0] - aLPivLows[1] ;
> nRtrc0Bars = aHPivIdxs[0] - aLPivIdxs[1] + 1;
> nRtrc1Pts = retrcPrc - aLPivLows[0] ;
> nRtrc1Bars = retrcBarIdx - aLPivIdxs[0] + 1;
> } else {
> nRtrc0Pts = aHPivHighs[1] - aLPivLows[1] ;
> nRtrc0Bars = aHPivIdxs[1] - aLPivIdxs[1] + 1;
> nRtrc1Pts = aHPivHighs[0] - aLPivLows[0] ;
> nRtrc1Bars = aHPivIdxs[0] - aLPivIdxs[0] + 1;
> }
> } else { // bLongSetup
> if (aLPivIdxs[0] > aHPivIdxs[0] ) {
> nRtrc0Pts = aHPivHighs[0] - aLPivLows[1] ;
> nRtrc0Bars = aHPivIdxs[0] - aLPivIdxs[1] + 1;
> nRtrc1Pts = retrcPrc - aLPivLows[0] ;
> nRtrc1Bars = retrcBarIdx - aLPivIdxs[0] + 1;
> } else {
> nRtrc0Pts = aHPivHighs[1] - aLPivLows[0] ;
> nRtrc0Bars = aLPivIdxs[0] - aHPivIdxs[1] + 1;
> nRtrc1Pts = aHPivHighs[0] - aLPivLows[0] ;
> nRtrc1Bars = aLPivIdxs[0] - aHPivIdxs[0] + 1;
> }
> }
> 
> if (bShowTCZ) {
> Plot(
> LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> tcz500, curBar, tcz500 , 0),
> "tcz500", colorPaleBlue, styleNoDraw) ;
> Plot(
> LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> tcz618, curBar, tcz618, 0),
> "tcz618", colorPaleBlue, styleNoDraw) ;
> Plot(
> LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> tcz786, curBar, tcz786, 0),
> "tcz786", colorTurquoise, styleNoDraw) ;
> }
> 
> // -- if (bShowTCZ)
> }
> 
> if (bDraw) {
> Title = Name() + " (" + StrLeft(FullName( ), 10) +
> ") ATR: " + NumToStr(ATR( 1), 4.2) + " ( " +
> NumToStr((C - Ref(C, -1)), 4.2) + " / " +
> NumToStr(((( C - Ref(C, -1)) / Ref(C, -1)) * 100), 2.1) + "% ) " +
> WriteVal( SelectedValue( DateTime() ), formatDateTime) +
> //" \nO: " + Open +
> ///", \nH: " + High +
> //", \nL: " + Low +
> // ", \nC: " + Close + ", \n" +
> // "Risk: " + WriteVal(risk, 2.1) + "% \n" +
> "Rtrc 0/1 Pts: " + WriteVal(nRtrc0Pts, 2.1) + "/" +
> WriteVal(nRtrc1Pts, 2.1) + " \n" +
> "Rtrc 0/1 Bars: " + WriteVal(nRtrc0Bars , 2.0) + "/" +
> WriteVal(nRtrc1Bars , 2.0);
> }
> 
> // ************ ********* *****
> // END INDICATOR CODE
> // ************ ********* *****
> 
> PlotShapes(IIf (aHPivs==1,shapeDig it4,shapeNone) ,colorPink, 0, High, 
> Offset=8);
> 
> PlotShapes(IIf (aAddedHPivs= =1,shapeDigit4, shapeNone) ,colorPink, 0, 
> High, Offset=8);
> 
> PlotShapes(IIf (aLPivs==1,shapeDig it3,shapeNone) ,colorBrightGree n, 0, 
> Low, Offset=-8);
> 
> PlotShapes(IIf (aAddedLPivs= =1,shapeDigit3, shapeNone) ,colorBrightGree 
> n, 0, Low, Offset=-8);
> 
> 
> ------------------------------------------------------------------------
> See the Web's breaking stories, chosen by people like you. Check out 
> Yahoo! Buzz 
> <http://in.rd.yahoo.com/tagline_buzz_1/*http://in.buzz.yahoo.com/>.
> 



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

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

Yahoo! Groups Links

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

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> 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/