I split the stuff in two parts.

Please merge part 1 and part 2.


Part 1 :


// pattern detector
// patterns intraday trading system Beta version - Conceived and 
developed by Vinod K. Iyer, Kodaikanal - Trade at your own Risk - 
Property of Vinod K. Iyer - Not for Free Circulation
// AB library
_SECTION_BEGIN( "Price" );
SetChartOptions( 0, chartShowArrows | chartShowDates | chartLogarithmic 
| chartWrapTitle );
_N( Title = StrFormat( "{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, 
Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 
1 ) ) ) );
Plot( C, "Close", ParamColor( "Color", colorWhite ), styleNoTitle | 
ParamStyle( "Style" ) | GetPriceStyle() );
_SECTION_END();
riskAmount = Param( "Risk Amount", 25, 10, 10000, 5 );
Limit = Param( " Trade Till (Hour)(Min)(Sec)", 080000, 080000, 220000, 
100 );
since = ( TimeNum() >= 080000 AND TimeNum() <= Limit ) AND ( DateNum() 
== LastValue( DateNum() ) );

_SECTION_BEGIN( "Alerts" );
SRbS = ParamToggle( "S/R broken", "Off,On", 1 );
SRcS = ParamToggle( "S/R confirmed", "Off,On", 1 );
PjabS = ParamToggle( "Price just above/below", "Off,On", 1 );
_SECTION_END();

_SECTION_BEGIN( "Main Parameters" );
PlotP1P2 = ParamToggle( "Plot P1/P2 Shapes", "Off,On", 1 );
P1Shape = Param( "P1 Shape Typ", 35, 0, 50, 1 );//default 35
P2Shape = Param( "P2 Shape Typ", 37, 0, 50, 1 );//default 37
Parallellinesswitch = ParamToggle( "Plot Parallel Lines", "Off,On", 1 );
DisRange = Param( "Plot Parallel Lines Trigger", 300, 0, 1000, 20 );

_SECTION_BEGIN( "Styles" );
Style_SL = ParamStyle( "Support", styleLine + styleThick, maskDefault ) 
+ styleNoRescale;
Style_RL = ParamStyle( "Resistance", styleLine + styleThick, maskDefault 
) + styleNoRescale;
Style_PHL = ParamStyle( "Parallel Support", styleLine + styleDashed, 
maskDefault ) + styleNoRescale;
Style_PLL = ParamStyle( "Parallel Resistance", styleLine + styleDashed, 
maskDefault ) + styleNoRescale;
_SECTION_END();

_SECTION_BEGIN( "Colors" );
Color_SL = ParamColor( "Support", colorLime );
Color_RL = ParamColor( "Resistance", colorRed );
Shadowcolor = ParamColor( "Shadow", ColorRGB( 56, 63, 118 ) );

if ( Version() < 4.75 )
{
     Backgroundcolor = ParamColor( "Your Background", colorBlack );
}

Color_PLL = Color_RL; //ParamColor("Resistance",colorRed);

Color_PHL = Color_SL; //ParamColor("Support",colorLime);
_SECTION_END();

_SECTION_BEGIN( "Pattern Selection" );
AscTs = ParamToggle( "Ascending Triangle", "Off,On", 1 );
DscTs = ParamToggle( "Descending Triangle", "Off,On", 1 );
STs = ParamToggle( "Symmetrically Triangle", "Off,On", 1 );
ETs = ParamToggle( "Expanding Triangle", "Off,On", 1 );
RWs = ParamToggle( "Rising Wedge", "Off,On", 1 );
FWs = ParamToggle( "Falling Wedge", "Off,On", 1 );
UTs = ParamToggle( "Up Trend", "Off,On", 1 );
DTs = ParamToggle( "Down Trend", "Off,On", 1 );
Ranges = ParamToggle( "Range", "Off,On", 1 );
NonDefinedPatterns = ParamToggle( "Not defined Patterns", "Off,On", 1 );
_SECTION_END();
//Plot( OBV(), _DEFAULT_NAME(), ParamColor("Color", colorCycle ), 
styleDashed| styleOwnScale | styleThick | styleNoLabel  );


//calcs
HH = HHV( H, 20 );
LL = LLV( L, 20 );
Mid = LL + ( ( HH - LL ) / 2 );
Div = 100 - ( HH / ( 0.01 * Mid ) );
Per = LastValue( abs( Div ) );
Hp1 = Ref( H, -1 );
Hp2 = Ref( H, -2 );
Hp3 = Ref( H, -3 );
Hp4 = Ref( H, -4 );
Hp5 = Ref( H, -5 );
Hp6 = Ref( H, -6 );
Lp1 = Ref( L, -1 );
Lp2 = Ref( L, -2 );
Lp3 = Ref( L, -3 );
Lp4 = Ref( L, -4 );
Lp5 = Ref( L, -5 );
Lp6 = Ref( L, -6 );
Hf1 = Ref( H, 1 );
Hf2 = Ref( H, 2 );
Hf3 = Ref( H, 3 );
Hf4 = Ref( H, 4 );
Hf5 = Ref( H, 5 );
Hf6 = Ref( H, 6 );
Lf1 = Ref( L, 1 );
Lf2 = Ref( L, 2 );
Lf3 = Ref( L, 3 );
Lf4 = Ref( L, 4 );
Lf5 = Ref( L, 5 );
Lf6 = Ref( L, 6 );
x = Cum( 1 );
divx = LastValue( x ) - x;

//Tops
A = H;
Top1 = A > Hf2 & A > Hf1 & A > Hp1 & A > Hp2 & divx > 2;
Top2 = A > Hf3 & A > Hf2 & A == Hf1 & A > Hp1 & A > Hp2 & divx > 3 ;
Top3 = A > Hf4 & A > Hf3 & A == Hf2 & A >= Hf1 & A > Hp1 & A > Hp2 & 
divx > 4;
Top4 = A > Hf5 & A > Hf4 & A == Hf3 & A >= Hf2 & A >= Hf1 & A > Hp1 & A 
 > Hp2 & divx > 5;
Top5 = A > Hf6 & A > Hf5 & A == Hf4 & A >= Hf3 & A == Hf2 & A >= Hf1 & A 
 > Hp1 & A > Hp2 & divx > 6;
Top = Top1 OR Top2 OR Top3 OR Top4 OR Top5;
TopHigh = ValueWhen( Top, H );
TopX = ValueWhen( Top, X );

//Valleys
A = L;
Valley1 = A < Lf2 & A <= Lf1 & A <= Lp1 & A < Lp2 & divx>2;
Valley2 = A < Lf3 & A < Lf2 & A == Lf1 & A < Lp1 & A < Lp2 & divx>3;
Valley3 = A < Lf4 & A < Lf3 & A == Lf2 & A <= Lf1 & A < Lp1 & A < Lp2 & 
divx>4;
Valley4 = A < Lf5 & A < Lf4 & A == Lf3 & A <= Lf2 & A <= Lf1 & A < Lp1 & 
A < Lp2 & divx>5;
Valley5 = A < Lf6 & A < Lf5 & A == Lf4 & A <= Lf3 & A == Lf2 & A <= Lf1 
& A < Lp1 & A < Lp2 & divx>6;
Valley = Valley1 OR Valley2 OR Valley3 OR Valley4 OR Valley4 OR Valley5;
ValleyLow = ValueWhen( Valley, L );
ValleyX = ValueWhen( Valley, X );
x = Cum( 1 );
xb = LastValue( ValueWhen( Valley, x, 1 ) );
xa = LastValue( ValueWhen( Valley, x, 2 ) );
yb = LastValue( ValueWhen( Valley, L, 1 ) );
Ya = LastValue( ValueWhen( Valley, L, 2 ) );
xab_log = log( yb / yA ) / ( xb - xa );
SL = exp( ( x - xb ) * xab_log ) * yb;
RocSL = ROC( SL, 1 );
xd = LastValue( ValueWhen( top, x, 1 ) );
xc = LastValue( ValueWhen( top, x, 2 ) );
yd = LastValue( ValueWhen( top, H, 1 ) );
Yc = LastValue( ValueWhen( top, H, 2 ) );
xcd_log = log( yd / yc ) / ( xd - xc );
RL = exp( ( x - xd ) * xcd_log ) * yd;
RocRL = ROC( RL, 1 );

//LPL
Low_Value = LastValue( Ref( LLV( L, xd - xc ), -( x - xd ) ) );
x2 = LastValue( ValueWhen( L == Low_Value & x > xc & x < xd, x ) );
PLL = IIf( LastValue( x ) - x2 > 5, exp( ( x - x2 ) * xcd_log ) * 
Low_Value, -1e10 );

//HPL
Hi_Value = LastValue( Ref( HHV( H, xb - xa ), -( x - xb ) ) );
x3 = LastValue( ValueWhen( H == Hi_Value & x > xa & x < xb, x ) );
PHL = IIf( LastValue( x ) - x3 > 5, exp( ( x - x3 ) * xab_log ) * 
Hi_Value, -1e10 );

//Channels
AvgRoc = abs( MA( ROC( C, 1 ), 100 ) );
Threshold_parallel = 15;
Threshold_Trend = 0.001 * per;
SLabs = SL - Ref( SL, -1 );
RLabs = RL - Ref( RL, -1 );
ROC2SL = ( SLabs / C ) * 100;
ROC2RL = ( RLabs / C ) * 100;
RSL = ROC2SL > Threshold_Trend;
FlatSL = abs( ROC2SL ) < Threshold_Trend;
FSL = ROC2SL < -Threshold_Trend;
RRL = ROC2RL > Threshold_Trend;
FlatRL = abs( ROC2RL ) < Threshold_Trend;
FRL = ROC2RL < -Threshold_Trend;
parallel = abs( ( ( RocSL / RocRL ) - 1 ) * 100 ) < Threshold_parallel;
UT = RSL AND RRL AND parallel;
DT = FSL AND FRL AND parallel;
DT_UT = IIf ( DT, -1, IIf( UT, 1, 0 ) );
Range = parallel AND FlatSL AND FlatRL;
Xm = xb - xa > 4 & xd - xc > 4; //x-min.distance - optional
AscT = FlatRL & RSL;// & xa<xd & xc<xb;// & Xm;
DscT = FlatSL & FRL;// & xa<xd & xc<xb;// & Xm;
AT_DT = IIf( AscT, 1, IIf( DscT, -1, 0 ) );
ST = RSL & FRL & RL > SL;//& xa<xd & xc<xb;// & Xm;
ET = RRL & FSL & RL > SL;//& xa<xd & xc<xb;// & Xm;//abs(ROCSL/ROCRL)<3 
- optional
ST_ET = IIf( ST, 1, IIf( ET, -1, 0 ) );
RW = RRL & RSL & RocSL > RocRL & SL > RL AND NOT parallel;// & Xm;
FW = FSL & FRL & RocRL < RocSL & SL < RL AND NOT parallel;// & Xm;
RW_FW = IIf ( RW, 1, IIf( FW, -1, 0 ) );
Distance = 0.5 * ATR( 14 );

//Support line signals
Sup_break = Cross( SL, C ) & X > XB;
Sup_pricejustabove = L < SL + Distance & L > SL & X > XB;
Sup_confirmed = L <= SL & C > SL & X > XB;

//Resistance line signals
Res_break = Cross( C, RL ) & X > XD;
Res_pricejustbelow = H > RL - Distance & H<RL & X>XD;
Res_confirmed = H >= RL & C<RL & X>XD;

//Parallel lower line signals
PLL_break = Cross( PLL, C );
PLL_pricejustabove = L < PLL + Distance & L > PLL;
PLL_confirmed = L <= PLL & C > PLL;

//Parallel higher line signals
PHL_break = Cross( C, PHL );
PHL_pricejustbelow = H > PHL - Distance & H < PHL;
PHL_confirmed = H >= PHL & C < PHL;
SupSignals = Sup_break | Sup_pricejustabove | Sup_confirmed;
ResSignals = Res_break | Res_pricejustbelow | Res_confirmed;
PLLSignals = PLL_break | PLL_pricejustabove | PLL_confirmed;
PHLSignals = PHL_break | PHL_pricejustbelow | PHL_confirmed;
//BS = Sup_confirmed OR Res_break;
//SS = Res_confirmed OR Sup_break;
BS = Sup_confirmed OR Sup_pricejustabove OR Res_break;
SS = Res_confirmed OR Res_pricejustbelow OR Sup_break;
NS = Sup_pricejustabove OR Res_pricejustbelow;
PatternDirection =
     IIf( AscT | FW | UT, 1,
          IIf( DscT | RW | DT, -1,
               IIf( ST | ET | Range, 0, 0 ) ) );

PatternText =
     WriteIf( LastValue( AscT ), "Ascending Triangle",
              WriteIf( LastValue( DscT ), "Decending Triangle",
                       WriteIf( LastValue( ST ), "Symmetrical Triangle",
                                WriteIf( LastValue( ET ), "Expanding 
Triangle",
                                         WriteIf( LastValue( RW ), 
"Rising Wedge",
                                                  WriteIf( LastValue( FW 
), "Falling Wedge",
                                                           WriteIf( 
LastValue( UT ), "Up Channel",
                                                                    
WriteIf( LastValue( DT ), "Down Channel",
                                                                             
WriteIf( Range, "Range", "Not defined" ) ) ) ) ) ) ) ) );

//Display Cond. fix when Chart is compl.zoomed out
PLLd = abs( ( LastValue( C ) / LastValue( PLL ) ) - 1 ) < 0.01 * DisRange;
PHLd = abs( ( LastValue( C ) / LastValue( PHL ) ) - 1 ) < 0.01 * DisRange;
barvisible = Status( "barvisible" );
firstvisiblebar = barvisible & NOT
                   Ref( barvisible, -1 );
HHvisible = LastValue( HighestSince( firstvisiblebar, High ) );
LLvisible = LastValue( LowestSince( firstvisiblebar, Low ) );
RaH = HHvisible * 1.05; //Range High
RaL = LLVisible * 0.95; //Range Low

//Anyline_zero
AnZ = ya == 0 OR yb == 0 OR yc == 0 OR yd == 0;
SL_plot = IIf( x >= xa & SL > RaL & SL < RaH & NOT AnZ, SL, IIf( x >= xa 
& RaL == 0 & NOT AnZ, SL, -1e10 ) );
RL_plot = IIf( x >= xc & RL > RaL & RL < RaH & NOT AnZ, RL, IIf( x >= xc 
& RaL == 0 & NOT AnZ, RL, -1e10 ) );
PLL_plot = IIf( x - x2 >= 0 & abs( LastValue( L / PLL ) - 1 ) < abs( 
LastValue( ( DisRange / 1000 ) * ATR( 14 ) ) ) & PLL > RaL & PLL < RaH & 
NOT AnZ, PLL, IIf( x - x2 >= 0 & RaL == 0 & PLLd & abs( LastValue( L / 
PLL ) - 1 ) < abs( LastValue( ( DisRange / 1000 ) * ATR( 14 ) ) ) & NOT 
AnZ, PLL, -1e10 ) );
PHL_plot = IIf( x - x3 >= 0 & abs( LastValue( H / PHL ) - 1 ) < abs( 
LastValue( ( DisRange / 1000 ) * ATR( 14 ) ) ) & PHL > RaL & PHL < RaH & 
NOT AnZ, PHL, IIf( x - x3 >= 0 & RaL == 0 & PHLd & abs( LastValue( H / 
PHL ) - 1 ) < abs( LastValue( ( DisRange / 1000 ) * ATR( 14 ) ) ) & NOT 
AnZ, PHL, -1e10 ) );

///////////Begin Ploting Part////////////

LastBar = Cum( 1 ) == LastValue( Cum( 1 ) );
Plot( SL_plot , " SL" , Color_SL, Style_SL + styleNoTitle );
Plot( RL_plot , " RL" , Color_RL, Style_RL + styleNoTitle );
Plot( IIf( Parallellinesswitch, PLL_plot, -1e10 ), " PLL", Color_PLL, 
Style_PLL + styleNoTitle );
Plot( IIf( Parallellinesswitch, PHL_plot, -1e10 ), " PHL", Color_PHL, 
Style_PHL + styleNoTitle );

// Shading
BEGIN = Min( xa, xc );
TRS = IIf( x > BEGIN - 1, SL, -1e10 );
TRR = IIf( x > BEGIN - 1, RL, -1e10 );
trr = IIf( trr > 0, trr, Null );
yVal = IIf( trs > trr, trr, trs );
yval = IIf( yval > 0, yval, Null );
GraphZOrder = 0;

if ( Version() > 4.75 )
{
     PlotOHLC( 0, trr, yval, 0, "", Shadowcolor, styleCloud + 
styleNoLabel );
}
else
{
     Plot( yVal, "", Backgroundcolor, styleArea + styleNoRescale + 
styleNoLabel );
     Plot( trr, "", Shadowcolor, styleArea + styleNoRescale + 
styleNoLabel );
}

///////////End Ploting Part////////////

Reply via email to