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

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


  • To: Ram Vel <rvlv@xxxxxxxxx>
  • Subject: [amibroker] Fw: [AmiBroker-at] Can any AFL expert add buy and sell condition for auto-analyses in this afl ?
  • From: subhas mishra <subhaschandmishra@xxxxxxxxx>
  • Date: Mon, 31 Aug 2009 06:21:35 -0700 (PDT)

PureBytes Links

Trading Reference Links



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);



Fitness on your mind? Check out nearby gyms on Yahoo! India Local

__._,_.___


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





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___