This AFL draws support and resistance lines with trend lines. Just save it in your custom folder of Amibroker and drag and drop in blank pane.
_SECTION_BEGIN("Advanced Trend Lines");
function GetXSupport(Lo, Percentage, Back)
{
return ((BarCount - 1) - LastValue(TroughBars(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", 1.5, 0.01, 100. ,0.01);
DrawAllLines = ParamToggle("Draw All Lines?", "No|Yes");
Lines = Param("Lines?", 1, 1, BarCount-2);
DrawR = ParamList("Resistance 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", 1);
AllOrDownR = ParamToggle("Resistance Direction", "All|Down");
AllOrUpS = ParamToggle("Support Direction", "All|Up");
ShowSR = ParamToggle("Show Vert S/R","No|Yes", 1);
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,colorGreen, colorRed), 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,colorLightBlue),
styleLine|styleThick);
}
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,colorLightBlue),
styleLine|styleThick);
}
}
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(LinRegSlope(x, Lines+1));
if(AllOrUpS) ConS = y0 < y1;
if(Con AND ConS)
Plot(x, "", IIf(LastValue(C) < LastValue(x), colorBlue,colorLightBlue),
styleLine|styleThick);
}
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(LinRegSlope(x, Lines+1));
if(AllOrDownR) ConR = y0 > y1;
if(Con AND ConR)
Plot(x, "", IIf(LastValue(C) < LastValue(x), colorBlue,colorLightBlue),
styleLine|styleThick);
}
str = "\nR Slope=("+Res+"), S Slope=("+Sup+")";
}
if(ShowTDP)
{
PlotShapes(TD_Supply(H)*shapeSmallCircle, colorRed, 0, H, H*.001);
PlotShapes(TD_Demand(L)*shapeSmallCircle, 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|styleDashed|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|styleDashed|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();
This blog shares technical, views and data about different Currencies, Gold, Silver, Oil and Indexes.
Currency Rates
Ad Sense
Showing posts with label afl. Show all posts
Showing posts with label afl. Show all posts
20 January 2011
Advanced Trend Lines with S & R
Labels:
afl,
Amibroker,
resistance,
support,
trend lines
09 January 2011
Profit Table
Click to enlarge the image.
This AFL draws profit table of any stock. Just apply it as indicator, it will draw profit table. Very useful afl.
_SECTION_BEGIN("3. Profit Table");
eq = C;
yr = Year();
mo = Month();
YearChange = yr != Ref( yr, -1 );
MonChange = mo != Ref( mo, -1 );
FirstYr = 0;
LastYr = 0;
startbar = 0;
////////////////////////////
// SKIP non-trading bars
////////////////////////////
for( i = 0; i < BarCount; i++ )
{
if( eq[ i ] )
{
startbar = i;
break;
}
}
////////////////////////////
// collect yearly / monthly changes in equity
// into dynamic variables
////////////////////////////
LastYrValue = eq[ startbar ];
LastMoValue = eq[ startbar ];
MaxYrProfit = MinYrProfit = 0;
MaxMoProfit = MinMoProfit = 0;
for( i = startbar + 1; i < BarCount; i++ )
{
if( YearChange[ i ] || i == BarCount - 1 )
{
Chg = 100 * ( -1 + eq[ i ] / LastYrValue );
VarSet("ChgYear"+ yr[ i - 1 ], Chg );
MaxYrProfit = Max( MaxYrProfit, Chg );
MinYrProfit = Min( MinYrProfit, Chg );
if( FirstYr == 0 ) FirstYr = yr[ i - 1 ];
LastYr = yr[ i ];
LastYrValue = eq[ i ];
}
if( MonChange [ i ] || i == BarCount - 1 )
{
mon = mo[ i - 1 ];
Chg = 100 * ( -1 + eq[ i ] / LastMoValue );
VarSet("ChgMon" + yr[ i - 1 ] + "-" + mon, Chg );
VarSet("SumChgMon"+ mon, Chg + Nz( VarGet("SumChgMon"+ mon ) ) );
VarSet("SumMon" + mon, 1 + Nz( VarGet("SumMon"+ mon ) ) );
MaxMoProfit = Max( MaxMoProfit, Chg );
MinMoProfit = Min( MinMoProfit, Chg );
LastMoValue = eq[ i ];
}
}
/////////////////////////////////////////////////
// Drawing code & helper functions
////////////////////////////////////////////////
GfxSetOverlayMode( 2 );
CellHeight = (Status("pxheight")-1)/(LastYr - FirstYr + 3 );
CellWidth = (Status("pxwidth")-1)/14;
GfxSelectFont( "Tahoma", 8.5 );
GfxSetBkMode( 1 );
function PrintInCell( string, row, Col )
{
Color = ColorRGB( IIf( row == 0 || col == 0 || col == 13, 220, 255 ), 255, IIf( row % 2, 255, 220 ) );
GfxSelectSolidBrush( Color );
GfxRectangle( Col * CellWidth,
row * CellHeight, (Col + 1 ) * CellWidth + 1,
(row + 1 ) * CellHeight + 1);
GfxDrawText( string, Col * CellWidth + 1,
row * CellHeight + 1,
(Col + 1 ) * CellWidth, (row + 1 ) * CellHeight, 32+5 );
}
YOffset = 25;
XOffset = 15;
function DrawBar( text, bar, numbars, y, Miny, Maxy )
{
BarWidth = (Status("pxwidth") - 4 * XOffset )/( numbars + 1 );
BarHeight = Status("pxheight") - 2 * YOffset;
relpos = ( y - Miny ) / (Maxy - Miny );
xp = XOffset + ( bar + 0.5 ) * BarWidth;
yp = YOffset + BarHeight * ( 1 - relpos );
xe = XOffset + ( bar + 1 ) * BarWidth;
ye = YOffset + BarHeight * ( 1 - ( -miny )/( maxy - miny ) );
if( y > 0 )
{
GfxGradientRect( xp, yp,
xe , ye,
ColorHSB( 70, 255 * relpos, 255 ), ColorHSB( 70, 20, 255 ) );
}
else
{
GfxGradientRect( xp, ye,
xe , yp,
ColorHSB( 0, 20, 255 ), ColorHSB( 0, 255 * ( 1 - relpos ), 255 ) );
}
GfxTextOut( text, xp, ye );
GfxTextOut( StrFormat("%.2f", y ), xp, yp );
}
function DrawLevels( Miny, Maxy )
{
range = Maxy - Miny;
grid = 100;
if( range < 10 ) grid = 1;
else
if( range < 20 ) grid = 2;
else
if( range < 50 ) grid = 5;
else
if( range < 100 ) grid = 10;
else
if( range < 200 ) grid = 20;
else
if( range < 500 ) grid = 50;
_TRACE("grid = "+grid +" range "+range );
width = Status("pxwidth") - 4 * XOffset;
height = Status("pxheight") - 2 * YOffset;
GfxSelectPen( colorBlack, 1, 2 );
for( y = grid * ceil( Miny / grid ); y <= grid * floor( Maxy / grid ); y += grid )
{
yp = YOffset + Height * ( 1 - ( y - Miny ) / (Maxy - Miny ) );
GfxMoveTo( XOffset, yp );
GfxLineTo( XOffset + width , yp );
GfxTextOut( ""+ y, XOffset + 2 + width, yp );
}
GfxSelectPen( colorBlack, 1, 0 );
GfxMoveTo( XOffset, YOffset );
GfxLineTo( XOffset + width, YOffset );
GfxLineTo( XOffset + width, YOffset + Height );
GfxLineTo( XOffset , YOffset + Height );
GfxLineTo( XOffset , YOffset );
}
MonthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
function DisplayProfitTable( )
{
Header = "Year,"+MonthNames+",Yr%";
for( Col = 0; (Colname = StrExtract( Header, Col ) ) != ""; Col++ )
{
PrintInCell( ColName, 0, Col );
}
Row = 1;
for( y = FirstYr; y <= LastYr; y++ )
{
PrintInCell( StrFormat("%g", y ), Row, 0 );
PrintInCell( StrFormat("%.1f%%", VarGet("ChgYear" + y ) ), Row, 13 );
for( m = 1; m <= 12; m++ )
{
Chg = VarGet("ChgMon" + y + "-" + m);
if( Chg )
PrintInCell( StrFormat("%.1f%%", Chg ), Row, m );
else
PrintInCell( "N/A", Row, m );
}
Row++;
}
PrintInCell("Avg", Row, 0 );
for( m = 1; m <= 12; m++ )
{
PrintInCell( StrFormat("%.1f%%", Nz( VarGet("SumChgMon" + m)/VarGet("SumMon" + m ) ) ), Row, m );
}
}
function DisplayYearlyProfits()
{
Bar = 0;
for( y = FirstYr; y <= LastYr; y++ )
{
Chg = VarGet("ChgYear" + y );
DrawBar( ""+y, Bar++, ( LastYr - FirstYr + 1 ), Chg, MinYrProfit, MaxYrProfit );
}
GfxTextOut("Yearly % Profit chart", 10, 10 );
DrawLevels( MinYrProfit, MaxYrProfit );
}
function DisplayMonthlyProfits()
{
Bar = 0;
MinAvgProf = MaxAvgProf = 0;
for( y = 1; y <= 12; y++ )
{
Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
MinAvgProf = Min( MinAvgProf, Chg );
MaxAvgProf = Max( MaxAvgProf, Chg );
}
for( y = 1; y <= 12; y++ )
{
Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
DrawBar( StrExtract(MonthNames, y-1 ), Bar++, 13, Chg, MinAvgProf , MaxAvgProf );
}
GfxTextOut("Avg. Monthly % Profit chart", 10, 10 );
DrawLevels( MinAvgProf , MaxAvgProf );
}
///////////////////////////
// This function checks if currently selected symbol
// is portfolio equity
//////////////////////////
function CheckSymbol()
{
if( Name() != "~~~EQUITY" )
{
GfxSelectFont( "Tahoma", 20 );
GfxSetBkMode( 2 );
//GfxTextOut("For accurate results switch to ~~~EQUITY symbol", 10, 10 );
}
}
////////////////////////////
// Main program - chart type switch
////////////////////////////
type = ParamList("Chart Type", "Profit Table|Yearly Profits|Avg. Monthly Profits", 0 );
switch( type )
{
case "Profit Table":
DisplayProfitTable();
break;
case "Yearly Profits":
DisplayYearlyProfits();
break;
case "Avg. Monthly Profits":
DisplayMonthlyProfits();
break;
}
CheckSymbol();
_SECTION_END();
eq = C;
yr = Year();
mo = Month();
YearChange = yr != Ref( yr, -1 );
MonChange = mo != Ref( mo, -1 );
FirstYr = 0;
LastYr = 0;
startbar = 0;
////////////////////////////
// SKIP non-trading bars
////////////////////////////
for( i = 0; i < BarCount; i++ )
{
if( eq[ i ] )
{
startbar = i;
break;
}
}
////////////////////////////
// collect yearly / monthly changes in equity
// into dynamic variables
////////////////////////////
LastYrValue = eq[ startbar ];
LastMoValue = eq[ startbar ];
MaxYrProfit = MinYrProfit = 0;
MaxMoProfit = MinMoProfit = 0;
for( i = startbar + 1; i < BarCount; i++ )
{
if( YearChange[ i ] || i == BarCount - 1 )
{
Chg = 100 * ( -1 + eq[ i ] / LastYrValue );
VarSet("ChgYear"+ yr[ i - 1 ], Chg );
MaxYrProfit = Max( MaxYrProfit, Chg );
MinYrProfit = Min( MinYrProfit, Chg );
if( FirstYr == 0 ) FirstYr = yr[ i - 1 ];
LastYr = yr[ i ];
LastYrValue = eq[ i ];
}
if( MonChange [ i ] || i == BarCount - 1 )
{
mon = mo[ i - 1 ];
Chg = 100 * ( -1 + eq[ i ] / LastMoValue );
VarSet("ChgMon" + yr[ i - 1 ] + "-" + mon, Chg );
VarSet("SumChgMon"+ mon, Chg + Nz( VarGet("SumChgMon"+ mon ) ) );
VarSet("SumMon" + mon, 1 + Nz( VarGet("SumMon"+ mon ) ) );
MaxMoProfit = Max( MaxMoProfit, Chg );
MinMoProfit = Min( MinMoProfit, Chg );
LastMoValue = eq[ i ];
}
}
/////////////////////////////////////////////////
// Drawing code & helper functions
////////////////////////////////////////////////
GfxSetOverlayMode( 2 );
CellHeight = (Status("pxheight")-1)/(LastYr - FirstYr + 3 );
CellWidth = (Status("pxwidth")-1)/14;
GfxSelectFont( "Tahoma", 8.5 );
GfxSetBkMode( 1 );
function PrintInCell( string, row, Col )
{
Color = ColorRGB( IIf( row == 0 || col == 0 || col == 13, 220, 255 ), 255, IIf( row % 2, 255, 220 ) );
GfxSelectSolidBrush( Color );
GfxRectangle( Col * CellWidth,
row * CellHeight, (Col + 1 ) * CellWidth + 1,
(row + 1 ) * CellHeight + 1);
GfxDrawText( string, Col * CellWidth + 1,
row * CellHeight + 1,
(Col + 1 ) * CellWidth, (row + 1 ) * CellHeight, 32+5 );
}
YOffset = 25;
XOffset = 15;
function DrawBar( text, bar, numbars, y, Miny, Maxy )
{
BarWidth = (Status("pxwidth") - 4 * XOffset )/( numbars + 1 );
BarHeight = Status("pxheight") - 2 * YOffset;
relpos = ( y - Miny ) / (Maxy - Miny );
xp = XOffset + ( bar + 0.5 ) * BarWidth;
yp = YOffset + BarHeight * ( 1 - relpos );
xe = XOffset + ( bar + 1 ) * BarWidth;
ye = YOffset + BarHeight * ( 1 - ( -miny )/( maxy - miny ) );
if( y > 0 )
{
GfxGradientRect( xp, yp,
xe , ye,
ColorHSB( 70, 255 * relpos, 255 ), ColorHSB( 70, 20, 255 ) );
}
else
{
GfxGradientRect( xp, ye,
xe , yp,
ColorHSB( 0, 20, 255 ), ColorHSB( 0, 255 * ( 1 - relpos ), 255 ) );
}
GfxTextOut( text, xp, ye );
GfxTextOut( StrFormat("%.2f", y ), xp, yp );
}
function DrawLevels( Miny, Maxy )
{
range = Maxy - Miny;
grid = 100;
if( range < 10 ) grid = 1;
else
if( range < 20 ) grid = 2;
else
if( range < 50 ) grid = 5;
else
if( range < 100 ) grid = 10;
else
if( range < 200 ) grid = 20;
else
if( range < 500 ) grid = 50;
_TRACE("grid = "+grid +" range "+range );
width = Status("pxwidth") - 4 * XOffset;
height = Status("pxheight") - 2 * YOffset;
GfxSelectPen( colorBlack, 1, 2 );
for( y = grid * ceil( Miny / grid ); y <= grid * floor( Maxy / grid ); y += grid )
{
yp = YOffset + Height * ( 1 - ( y - Miny ) / (Maxy - Miny ) );
GfxMoveTo( XOffset, yp );
GfxLineTo( XOffset + width , yp );
GfxTextOut( ""+ y, XOffset + 2 + width, yp );
}
GfxSelectPen( colorBlack, 1, 0 );
GfxMoveTo( XOffset, YOffset );
GfxLineTo( XOffset + width, YOffset );
GfxLineTo( XOffset + width, YOffset + Height );
GfxLineTo( XOffset , YOffset + Height );
GfxLineTo( XOffset , YOffset );
}
MonthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
function DisplayProfitTable( )
{
Header = "Year,"+MonthNames+",Yr%";
for( Col = 0; (Colname = StrExtract( Header, Col ) ) != ""; Col++ )
{
PrintInCell( ColName, 0, Col );
}
Row = 1;
for( y = FirstYr; y <= LastYr; y++ )
{
PrintInCell( StrFormat("%g", y ), Row, 0 );
PrintInCell( StrFormat("%.1f%%", VarGet("ChgYear" + y ) ), Row, 13 );
for( m = 1; m <= 12; m++ )
{
Chg = VarGet("ChgMon" + y + "-" + m);
if( Chg )
PrintInCell( StrFormat("%.1f%%", Chg ), Row, m );
else
PrintInCell( "N/A", Row, m );
}
Row++;
}
PrintInCell("Avg", Row, 0 );
for( m = 1; m <= 12; m++ )
{
PrintInCell( StrFormat("%.1f%%", Nz( VarGet("SumChgMon" + m)/VarGet("SumMon" + m ) ) ), Row, m );
}
}
function DisplayYearlyProfits()
{
Bar = 0;
for( y = FirstYr; y <= LastYr; y++ )
{
Chg = VarGet("ChgYear" + y );
DrawBar( ""+y, Bar++, ( LastYr - FirstYr + 1 ), Chg, MinYrProfit, MaxYrProfit );
}
GfxTextOut("Yearly % Profit chart", 10, 10 );
DrawLevels( MinYrProfit, MaxYrProfit );
}
function DisplayMonthlyProfits()
{
Bar = 0;
MinAvgProf = MaxAvgProf = 0;
for( y = 1; y <= 12; y++ )
{
Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
MinAvgProf = Min( MinAvgProf, Chg );
MaxAvgProf = Max( MaxAvgProf, Chg );
}
for( y = 1; y <= 12; y++ )
{
Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
DrawBar( StrExtract(MonthNames, y-1 ), Bar++, 13, Chg, MinAvgProf , MaxAvgProf );
}
GfxTextOut("Avg. Monthly % Profit chart", 10, 10 );
DrawLevels( MinAvgProf , MaxAvgProf );
}
///////////////////////////
// This function checks if currently selected symbol
// is portfolio equity
//////////////////////////
function CheckSymbol()
{
if( Name() != "~~~EQUITY" )
{
GfxSelectFont( "Tahoma", 20 );
GfxSetBkMode( 2 );
//GfxTextOut("For accurate results switch to ~~~EQUITY symbol", 10, 10 );
}
}
////////////////////////////
// Main program - chart type switch
////////////////////////////
type = ParamList("Chart Type", "Profit Table|Yearly Profits|Avg. Monthly Profits", 0 );
switch( type )
{
case "Profit Table":
DisplayProfitTable();
break;
case "Yearly Profits":
DisplayYearlyProfits();
break;
case "Avg. Monthly Profits":
DisplayMonthlyProfits();
break;
}
CheckSymbol();
_SECTION_END();
27 December 2010
Candlestic Identification
This afl identifies the candlestic and the pattern made by them. You just insert it as indicator in chart pane and click on any candle to know about it.The information will be shown in the left upper part of the chart.
_SECTION_BEGIN("Candle Identification");
SetChartBkColor(colorLightBlue);
Plot(C,"",1,64);
O1 = Ref(O,-1);O2 = Ref(O,-2);
H1 = Ref(H,-1);H2 = Ref(H,-2);
L1 = Ref(L,-1);L2 = Ref(L,-2);
C1 = Ref(C,-1);C2 = Ref(C,-2);
function CandlePattern(P)
{
global PatternName;
if(P == 0) { PatternName = "NearDoji"; Pv = (abs(O-C)<= ((H-L)*0.1)); }
else if(P == 1) { PatternName = "BlackCandle"; Pv = (O>C); }
else if(P == 2) { PatternName = "LongBlackCandle"; Pv = (O>C AND
(O-C)/(.001+H-L)>.6); }
else if(P == 3) { PatternName = "SmallBlackCandle"; Pv = ((O>C) AND
((H-L)>(3*(O-C)))); }
else if(P == 4) { PatternName = "WhiteCandle"; Pv = (C>O); }
else if(P == 5) { PatternName = "LongWhiteCandle"; Pv = ((C>O) AND
((C-O)/(.001+H-L)>.6)); }
else if(P == 6) { PatternName = "SmallWhiteCandle"; Pv = ((C>O) AND
((H-L)>(3*(C-O)))); }
else if(P == 7) { PatternName = "BlackMaubozu"; Pv = (O>C AND H==O AND
C==L); }
else if(P == 8) { PatternName = "WhiteMaubozu"; Pv = (C>O AND H==C AND
O==L); }
else if(P == 9) { PatternName = "BlackClosingMarubozu"; Pv = (O>C AND
C==L); }
else if(P == 10) { PatternName = "WhiteClosingMarubozu"; Pv = (C>O AND
C==H); }
else if(P == 11) { PatternName = "BlackOpeningMarubozu"; Pv = (O>C AND
O==H); }
else if(P == 12) { PatternName = "WhiteOpeningMarubozu"; Pv = (C>O AND
O==L); }
else if(P == 13) { PatternName = "HangingMan"; Pv = (((H-L)>4*(O-C)) AND
((C-L)/(.001+H-L)>= 0.75) AND ((O-L)/(.001+H-L)>= 0.75)); }
else if(P == 14) { PatternName = "Hammer"; Pv = (((H-L)>3*(O-C)) AND
((C-L)/(.001+H-L)>0.6) AND ((O-L)/(.001+H-L)>0.6)); }
else if(P == 15) { PatternName = "InvertedHammer"; Pv = (((H-L)>3*(O-C))
AND ((H-C)/(.001+H-L)>0.6) AND ((H-O)/(.001+H-L)>0.6)); }
else if(P == 16) { PatternName = "ShootingStar"; Pv = (((H-L)>4*(O-C))
AND ((H-C)/(.001+H-L)>= 0.75) AND ((H-O)/(.001+H-L)>= 0.75)); }
else if(P == 17) { PatternName = "BlackSpinningTop"; Pv = ((O>C) AND
((H-L)>(3*(O-C))) AND (((H-O)/(.001+H-L))<.4) AND
(((C-L)/(.001+H-L))<.4)); }
else if(P == 18) { PatternName = "WhiteSpinningTop"; Pv = ((C>O) AND
((H-L)>(3*(C-O))) AND (((H-C)/(.001+H-L))<.4) AND
(((O-L)/(.001+H-L))<.4)); }
else if(P == 19) { PatternName = "BearishAbandonedBaby"; Pv = ((C1 == O1)
AND (C2>O2) AND (O>C) AND (L1>H2) AND (L1>H)); }
else if(P == 20) { PatternName = "BearishEveningDojiStar"; Pv = ((C2>O2)
AND ((C2-O2)/(.001+H2-L2)>.6) AND (C2<O1) AND (C1>O1) AND
((H1-L1)>(3*(C1-O1))) AND (O>C) AND (O<O1)); }
else if(P == 21) { PatternName = "DarkCloudCover"; Pv = (C1>O1 AND
((C1+O1)/2)>C AND O>C AND O>C1 AND C>O1 AND (O-C)/(.001+(H-L)>0.6)); }
else if(P == 22) { PatternName = "BearishEngulfing"; Pv = ((C1>O1) AND
(O>C) AND (O>= C1) AND (O1>= C) AND ((O-C)>(C1-O1))); }
else if(P == 23) { PatternName = "ThreeOutsideDownPattern"; Pv = ((C2>O2)
AND (O1>C1) AND (O1>= C2) AND (O2>= C1) AND ((O1-C1)>(C2-O2)) AND (O>C) AND
(C<C1)); }
else if(P == 24) { PatternName = "BullishAbandonedBaby"; Pv = ((C1 == O1)
AND (O2>C2) AND (C>O) AND (L2>H1) AND (L>H1)); }
else if(P == 25) { PatternName = "BullishMorningDojiStar"; Pv = ((O2>C2)
AND ((O2-C2)/(.001+H2-L2)>.6) AND (C2>O1) AND (O1>C1) AND
((H1-L1)>(3*(C1-O1))) AND (C>O) AND (O>O1)); }
else if(P == 26) { PatternName = "BullishEngulfing"; Pv = ((O1>C1) AND
(C>O) AND (C>= O1) AND (C1>= O) AND ((C-O)>(O1-C1))); }
else if(P == 27) { PatternName = "ThreeOutsideUpPattern"; Pv = ((O2>C2)
AND (C1>O1) AND (C1>= O2) AND (C2>= O1) AND ((C1-O1)>(O2-C2)) AND (C>O) AND
(C>C1)); }
else if(P == 28) { PatternName = "BullishHarami"; Pv = ((O1>C1) AND (C>O)
AND (C<= O1) AND (C1<= O) AND ((C-O)<(O1-C1))); }
else if(P == 29) { PatternName = "ThreeInsideUpPattern"; Pv = ((O2>C2)
AND (C1>O1) AND (C1<= O2) AND (C2<= O1) AND ((C1-O1)<(O2-C2)) AND (C>O) AND
(C>C1) AND (O>O1)); }
else if(P == 30) { PatternName = "PiercingLine"; Pv = ((C1<O1) AND
(((O1+C1)/2)<C) AND (O<C) AND (O<C1) AND (C<O1) AND
((C-O)/(.001+(H-L))>0.6)); }
else if(P == 31) { PatternName = "BearishHarami"; Pv = ((C1>O1) AND (O>C)
AND (O<= C1) AND (O1<= C) AND ((O-C)<(C1-O1))); }
else if(P == 32) { PatternName = "ThreeInsideDownPattern"; Pv = ((C2>O2)
AND (O1>C1) AND (O1<= C2) AND (O2<= C1) AND ((O1-C1)<(C2-O2)) AND (O>C) AND
(C<C1) AND (O<O1)); }
else if(P == 33) { PatternName = "ThreeWhiteSoldiers"; Pv = (C>O*1.01)
AND (C1>O1*1.01) AND (C2>O2*1.01) AND (C>C1) AND (C1>C2) AND (O<C1) AND
(O>O1) AND (O1<C2) AND (O1>O2) AND (((H-C)/(H-L))<.2) AND
(((H1-C1)/(H1-L1))<.2) AND (((H2-C2)/(H2-L2))<.2); }
else if(P == 34) { PatternName = "DarkCloudCover"; Pv = (C1>O1*1.01) AND
(O>C) AND (O>H1) AND (C>O1) AND (((C1+O1)/2)>C) AND (C>O1) AND
(MA(C,13)-Ref(MA(C,13),-4)>0); }
else if(P == 35) { PatternName = "ThreeBlackCrows"; Pv = (O>C*1.01) AND
(O1>C1*1.01) AND (O2>C2*1.01) AND (C<C1) AND (C1<C2) AND (O>C1) AND (O<O1)
AND (O1>C2) AND (O1<O2) AND (((C-L)/(H-L))<.2) AND (((C1-L1)/(H1-L1))<.2)
AND (((C2-L2)/(H2-L2))<.2); }
else if(P == 36) { PatternName = "doji"; Pv = (O == C); }
else if(P == 37) { PatternName = "GapUp"; Pv = GapUp(); }
else if(P == 38) { PatternName = "GapDown"; Pv = GapDown(); }
else if(P == 39) { PatternName = "BigGapUp"; Pv = L>1.01*H1; }
else if(P == 40) { PatternName = "BigGapDown"; Pv = H<0.99*L1; }
else if(P == 41) { PatternName = "HugeGapUp"; Pv = L>1.02*H1; }
else if(P == 42) { PatternName = "HugeGapDown"; Pv = H<0.98*L1; }
else if(P == 43) { PatternName = "DoubleGapUp"; Pv = GapUp() AND
Ref(GapUp(),-1); }
else if(P == 44) { PatternName = "DoubleGapDown"; Pv = GapDown() AND
Ref(GapDown(),-1); }
return Pv;
}
PatternNameList = "";
for(Cp=0; Cp<=44; Cp++)
{
VarSet("Pattern"+NumToStr(Cp,1.0),CandlePattern(cP));
PatternNameList = PatternNameList +PatternName+",";
}
BI = BarIndex();
SelectedBar = SelectedValue(BI) -BI[0];
//Selectedbar = Status("lastvisiblebar")-1;
PStr="";
for(Cp=0; Cp<=44; Cp++)
{
Temp = VarGet("Pattern"+NumToStr(Cp,1.0));
if(temp[SelectedBar]) Pstr=Pstr+"#"+NumToStr(Cp,1.0)+" -
"+StrExtract(PatternNameList,Cp)+"\n";
}
Title = "\nCandle Demostration \n"+ Pstr;
_SECTION_END();
_SECTION_BEGIN("Candle Identification");
SetChartBkColor(colorLightBlue);
Plot(C,"",1,64);
O1 = Ref(O,-1);O2 = Ref(O,-2);
H1 = Ref(H,-1);H2 = Ref(H,-2);
L1 = Ref(L,-1);L2 = Ref(L,-2);
C1 = Ref(C,-1);C2 = Ref(C,-2);
function CandlePattern(P)
{
global PatternName;
if(P == 0) { PatternName = "NearDoji"; Pv = (abs(O-C)<= ((H-L)*0.1)); }
else if(P == 1) { PatternName = "BlackCandle"; Pv = (O>C); }
else if(P == 2) { PatternName = "LongBlackCandle"; Pv = (O>C AND
(O-C)/(.001+H-L)>.6); }
else if(P == 3) { PatternName = "SmallBlackCandle"; Pv = ((O>C) AND
((H-L)>(3*(O-C)))); }
else if(P == 4) { PatternName = "WhiteCandle"; Pv = (C>O); }
else if(P == 5) { PatternName = "LongWhiteCandle"; Pv = ((C>O) AND
((C-O)/(.001+H-L)>.6)); }
else if(P == 6) { PatternName = "SmallWhiteCandle"; Pv = ((C>O) AND
((H-L)>(3*(C-O)))); }
else if(P == 7) { PatternName = "BlackMaubozu"; Pv = (O>C AND H==O AND
C==L); }
else if(P == 8) { PatternName = "WhiteMaubozu"; Pv = (C>O AND H==C AND
O==L); }
else if(P == 9) { PatternName = "BlackClosingMarubozu"; Pv = (O>C AND
C==L); }
else if(P == 10) { PatternName = "WhiteClosingMarubozu"; Pv = (C>O AND
C==H); }
else if(P == 11) { PatternName = "BlackOpeningMarubozu"; Pv = (O>C AND
O==H); }
else if(P == 12) { PatternName = "WhiteOpeningMarubozu"; Pv = (C>O AND
O==L); }
else if(P == 13) { PatternName = "HangingMan"; Pv = (((H-L)>4*(O-C)) AND
((C-L)/(.001+H-L)>= 0.75) AND ((O-L)/(.001+H-L)>= 0.75)); }
else if(P == 14) { PatternName = "Hammer"; Pv = (((H-L)>3*(O-C)) AND
((C-L)/(.001+H-L)>0.6) AND ((O-L)/(.001+H-L)>0.6)); }
else if(P == 15) { PatternName = "InvertedHammer"; Pv = (((H-L)>3*(O-C))
AND ((H-C)/(.001+H-L)>0.6) AND ((H-O)/(.001+H-L)>0.6)); }
else if(P == 16) { PatternName = "ShootingStar"; Pv = (((H-L)>4*(O-C))
AND ((H-C)/(.001+H-L)>= 0.75) AND ((H-O)/(.001+H-L)>= 0.75)); }
else if(P == 17) { PatternName = "BlackSpinningTop"; Pv = ((O>C) AND
((H-L)>(3*(O-C))) AND (((H-O)/(.001+H-L))<.4) AND
(((C-L)/(.001+H-L))<.4)); }
else if(P == 18) { PatternName = "WhiteSpinningTop"; Pv = ((C>O) AND
((H-L)>(3*(C-O))) AND (((H-C)/(.001+H-L))<.4) AND
(((O-L)/(.001+H-L))<.4)); }
else if(P == 19) { PatternName = "BearishAbandonedBaby"; Pv = ((C1 == O1)
AND (C2>O2) AND (O>C) AND (L1>H2) AND (L1>H)); }
else if(P == 20) { PatternName = "BearishEveningDojiStar"; Pv = ((C2>O2)
AND ((C2-O2)/(.001+H2-L2)>.6) AND (C2<O1) AND (C1>O1) AND
((H1-L1)>(3*(C1-O1))) AND (O>C) AND (O<O1)); }
else if(P == 21) { PatternName = "DarkCloudCover"; Pv = (C1>O1 AND
((C1+O1)/2)>C AND O>C AND O>C1 AND C>O1 AND (O-C)/(.001+(H-L)>0.6)); }
else if(P == 22) { PatternName = "BearishEngulfing"; Pv = ((C1>O1) AND
(O>C) AND (O>= C1) AND (O1>= C) AND ((O-C)>(C1-O1))); }
else if(P == 23) { PatternName = "ThreeOutsideDownPattern"; Pv = ((C2>O2)
AND (O1>C1) AND (O1>= C2) AND (O2>= C1) AND ((O1-C1)>(C2-O2)) AND (O>C) AND
(C<C1)); }
else if(P == 24) { PatternName = "BullishAbandonedBaby"; Pv = ((C1 == O1)
AND (O2>C2) AND (C>O) AND (L2>H1) AND (L>H1)); }
else if(P == 25) { PatternName = "BullishMorningDojiStar"; Pv = ((O2>C2)
AND ((O2-C2)/(.001+H2-L2)>.6) AND (C2>O1) AND (O1>C1) AND
((H1-L1)>(3*(C1-O1))) AND (C>O) AND (O>O1)); }
else if(P == 26) { PatternName = "BullishEngulfing"; Pv = ((O1>C1) AND
(C>O) AND (C>= O1) AND (C1>= O) AND ((C-O)>(O1-C1))); }
else if(P == 27) { PatternName = "ThreeOutsideUpPattern"; Pv = ((O2>C2)
AND (C1>O1) AND (C1>= O2) AND (C2>= O1) AND ((C1-O1)>(O2-C2)) AND (C>O) AND
(C>C1)); }
else if(P == 28) { PatternName = "BullishHarami"; Pv = ((O1>C1) AND (C>O)
AND (C<= O1) AND (C1<= O) AND ((C-O)<(O1-C1))); }
else if(P == 29) { PatternName = "ThreeInsideUpPattern"; Pv = ((O2>C2)
AND (C1>O1) AND (C1<= O2) AND (C2<= O1) AND ((C1-O1)<(O2-C2)) AND (C>O) AND
(C>C1) AND (O>O1)); }
else if(P == 30) { PatternName = "PiercingLine"; Pv = ((C1<O1) AND
(((O1+C1)/2)<C) AND (O<C) AND (O<C1) AND (C<O1) AND
((C-O)/(.001+(H-L))>0.6)); }
else if(P == 31) { PatternName = "BearishHarami"; Pv = ((C1>O1) AND (O>C)
AND (O<= C1) AND (O1<= C) AND ((O-C)<(C1-O1))); }
else if(P == 32) { PatternName = "ThreeInsideDownPattern"; Pv = ((C2>O2)
AND (O1>C1) AND (O1<= C2) AND (O2<= C1) AND ((O1-C1)<(C2-O2)) AND (O>C) AND
(C<C1) AND (O<O1)); }
else if(P == 33) { PatternName = "ThreeWhiteSoldiers"; Pv = (C>O*1.01)
AND (C1>O1*1.01) AND (C2>O2*1.01) AND (C>C1) AND (C1>C2) AND (O<C1) AND
(O>O1) AND (O1<C2) AND (O1>O2) AND (((H-C)/(H-L))<.2) AND
(((H1-C1)/(H1-L1))<.2) AND (((H2-C2)/(H2-L2))<.2); }
else if(P == 34) { PatternName = "DarkCloudCover"; Pv = (C1>O1*1.01) AND
(O>C) AND (O>H1) AND (C>O1) AND (((C1+O1)/2)>C) AND (C>O1) AND
(MA(C,13)-Ref(MA(C,13),-4)>0); }
else if(P == 35) { PatternName = "ThreeBlackCrows"; Pv = (O>C*1.01) AND
(O1>C1*1.01) AND (O2>C2*1.01) AND (C<C1) AND (C1<C2) AND (O>C1) AND (O<O1)
AND (O1>C2) AND (O1<O2) AND (((C-L)/(H-L))<.2) AND (((C1-L1)/(H1-L1))<.2)
AND (((C2-L2)/(H2-L2))<.2); }
else if(P == 36) { PatternName = "doji"; Pv = (O == C); }
else if(P == 37) { PatternName = "GapUp"; Pv = GapUp(); }
else if(P == 38) { PatternName = "GapDown"; Pv = GapDown(); }
else if(P == 39) { PatternName = "BigGapUp"; Pv = L>1.01*H1; }
else if(P == 40) { PatternName = "BigGapDown"; Pv = H<0.99*L1; }
else if(P == 41) { PatternName = "HugeGapUp"; Pv = L>1.02*H1; }
else if(P == 42) { PatternName = "HugeGapDown"; Pv = H<0.98*L1; }
else if(P == 43) { PatternName = "DoubleGapUp"; Pv = GapUp() AND
Ref(GapUp(),-1); }
else if(P == 44) { PatternName = "DoubleGapDown"; Pv = GapDown() AND
Ref(GapDown(),-1); }
return Pv;
}
PatternNameList = "";
for(Cp=0; Cp<=44; Cp++)
{
VarSet("Pattern"+NumToStr(Cp,1.0),CandlePattern(cP));
PatternNameList = PatternNameList +PatternName+",";
}
BI = BarIndex();
SelectedBar = SelectedValue(BI) -BI[0];
//Selectedbar = Status("lastvisiblebar")-1;
PStr="";
for(Cp=0; Cp<=44; Cp++)
{
Temp = VarGet("Pattern"+NumToStr(Cp,1.0));
if(temp[SelectedBar]) Pstr=Pstr+"#"+NumToStr(Cp,1.0)+" -
"+StrExtract(PatternNameList,Cp)+"\n";
}
Title = "\nCandle Demostration \n"+ Pstr;
_SECTION_END();
Subscribe to:
Posts (Atom)

