Bala
Below AFL does what you want, just define a watchlist of stocks in the parameters.
_SECTION_BEGIN("MultipleStocks");
//FIle: Multi-Chart
//http://stockconnection.blogspot.com
//January 10, 2008
//
//
// GFX Drawing Example
function GetMonth( MonthNumber )
{
switch (MonthNumber) {
case 2 :
result = "Feb";
break ;
case 3 :
result = "Mar";
break ;
case 4 :
result = "Apr";
break ;
case 5 :
result = "May";
break ;
case 6 :
result = "Jun";
break ;
case 7 :
result = "Jul";
break ;
case 8 :
result = "Aug";
break ;
case 9 :
result = "Sep";
break ;
case 10 :
result = "Oct";
break ;
case 11 :
result = "Nov";
break ;
case 12 :
result = "Dec";
break ;
}
return result;
}
GfxSetOverlayMode( 2 );
String = "" ;
for ( x = 0 ; x < 200 ; x++ )
{
WList = CategoryGetName( categoryWatchlist, x );
if (WList != "" )
{
String = String + WList +"," ;
}
}
WatchList = ParamList ( "Watch List", String );
for ( x = 0 ; x < 200 ; x++ )
{
sym = StrExtract ( String, x );
if (sym == WatchList)
{
listNum = x ;
}
}
Page = Param ( "Page #", 0 , 0 , 12 , 1 );
ChartsWiNum = Param ( "# Charts Wide", 3 , 1 , 4 , 1 );
ChartsHiNum = Param ( "# Charts High", 3 , 1 , 4 , 1 );
Bars =Param ( "Number Of Bars", 195 , 50 , 250 , 1 ) ;
lDays =Param ( "Long MA", 200 , 50 , 250 , 1 ) ;
sDays =Param ( "Short MA", 50 , 5 , 100 , 1 ) ;
vDays =Param ( "Volume MA", 50 , 5 , 100 , 1 ) ;
ChartMargin = 5 ;
DateMargin = 10 ;
DataMargin = 20 ;
NumCharts = ChartsWiNum * ChartsHiNum ;
ScreenHeight = Status ( "pxheight" ) ;
SceernWidth = Status ( "pxwidth" ) ;
ChartHeight = ScreenHeight / ChartsHiNum -2 ;
Width = SceernWidth / ChartsWiNum - 2 ;
BarChartHeight= (0.75 ) * ChartHeight - DataMargin;
VolChartHeight = ChartHeight - BarChartHeight - DataMargin*2 ;
NumberPriceLevels = BarChartHeight / 25 ;
BarChartWidth= Width - 45 ;
BarWidth = (BarChartWidth - ChartMargin * 3 ) / Bars ;
LastBar = BarCount ;
FirstBar = LastBar - Bars;
_N (list = CategoryGetSymbols( categoryWatchlist, listnum ));
printf ( "Watch List Name\n");
WL = CategoryGetName( categoryWatchlist, listnum );
SymbolNum = Page * NumCharts;
for ( x = 0 ; x < ChartsHiNum ; x++ )
{
for ( i = 0 ; i < ChartsWiNum ; i++ )
{
notDone = True;
sym = StrExtract ( list, SymbolNum );
if (sym != "" )
{
x1 = Width * i + 5 ;
y1 = ChartHeight * x + 5 ;
x2 = Width * (i + 1 );
y2 = ChartHeight * (x + 1 )-DateMargin;
GfxSelectPen ( colorBlack );
GfxRectangle ( x1, y1, x2, y2 );
SymbolNum++;
SetForeign (sym);
EMAShort= EMA (C,sDays);
EMALong= EMA (C,lDays);
EMAVol= EMA (V,vDays);
D = Day ();
M = Month ();
Y = Year ();
priceHigh = 0 ;
VolHigh = 0 ;
priceMin = 1000000 ;
for ( z = FirstBar; z < LastBar ; z++ )
{
Vol = V[z];
BarH = H[z];
BarL = L[z];
if ( Vol > VolHigh )
{
VolHigh = Vol;
}
if ( BarH > priceHigh )
{
priceHigh = BarH;
}
if ( BarL < priceMin )
{
priceMin = BarL;
}
}
LOpen = O[LastBar- 1];
LHigh = H[LastBar- 1];
LLow = L[LastBar- 1];
LClose = C[LastBar- 1];
LVol = V[LastBar- 1];
GfxSelectFont ( "Tahoma" , 8 );
GfxSetTextColor (colorBlack);
GfxTextOut (sym + " O: " +LOpen + " H: " +LHigh + " L: " +LLow + " C: " +LClose + " Vol: " +LVol/ 1000000 + " M", x1+5 , y1+2 );
VolRatio = VolChartHeight / VolHigh ;
Range = priceHigh - priceMin;
Ratio = BarChartHeight / Range ;
PriceLineLevel = Range / NumberPriceLevels;
yHi=(((priceHigh - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
GfxTextOut ( WriteVal (priceHigh, 1.2 ), x1 + BarChartWidth, yHi -8 );
GfxSelectPen ( colorLightGrey );
GfxMoveTo ( x1 , yHi );
GfxLineTo ( x1 + BarChartWidth -5 , yHi );
for ( z = 0 ; z < NumberPriceLevels- 1 ; z++ )
{
PriceLevel = PriceLineLevel*z + priceMin;
yHi=(((PriceLevel - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
GfxTextOut ( WriteVal (PriceLevel, 1.2 ), x1 + BarChartWidth, yHi -8 );
GfxSelectPen ( colorLightGrey );
GfxMoveTo ( x1 , yHi );
GfxLineTo ( x1 + BarChartWidth -5 , yHi );
}
HighestLast = 0 ;
w = 1 ;
sEMAlast = EMAShort[FirstBar];
lEMAlast = EMALong[FirstBar];
vEMAlast = EMAVol[FirstBar];
for ( z = FirstBar; z < LastBar ; z++ )
{
BarH = H[z];
BarL = L[z];
BarO = O[z];
BarC = C[z];
Vol = V[z];
sEMA = EMAShort[z];
lEMA = EMALong[z];
vEMA = EMAVol[z];
BarDay = D[z];
BarMonth = M[z];
BarYear = Y[z];
yO = (((BarO - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
yC = (((BarC - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
yHi = (((BarH - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
yLo = (((BarL - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin ;
ysEMAlast = (((sEMAlast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
ysEMA = (((sEMA - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
ylEMAlast = (((lEMAlast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
ylEMA = (((lEMA - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
vHi = y2 - (Vol * VolRatio) ;
yvEMAlast = y2 - (vEMAlast * VolRatio) ;
yvEMA = y2 - (vEMA * VolRatio) ;
if ( BarH > HighestLast )
{
HighestLast = BarH;
GfxSelectPen ( colorBlue );
}
else
{
GfxSelectPen ( colorRed );
}
// Plot bar
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , yHi );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, yLo );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin -1 , yO );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, yO );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin +1 , yC );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, yC );
if ( BarO > BarC)
{
GfxSelectPen ( colorRed );
}
else
{
GfxSelectPen ( colorLime );
}
// Plot Volume
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , vHi );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y2 );
// Plot Price and Volume EMAs
GfxSelectPen ( colorLime );
GfxMoveTo ( BarWidth * (w -1 ) + x1 + ChartMargin , ysEMAlast );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, ysEMA );
GfxSelectPen ( colorDarkRed );
GfxMoveTo ( BarWidth * (w -1 ) + x1 + ChartMargin , ylEMAlast );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, ylEMA );
GfxSelectPen ( colorBlack );
GfxMoveTo ( BarWidth * (w -1 ) + x1 + ChartMargin , yvEMAlast );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, yvEMA );
w++;
sEMAlast = sEMA ;
lEMAlast = lEMA ;
vEMAlast = vEMA ;
GfxSelectFont ( "Tahoma" , 7 );
GfxSelectPen ( colorLightGrey );
// Draw vertical month separator and X-axis labels
if (BarDay== 1 & notDone )
{
if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
else myLabel =GetMonth(BarMonth);
GfxTextOut (myLabel, BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3 );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
notDone = False;
}
if (BarDay== 2 & notDone )
{
if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
else myLabel =GetMonth(BarMonth);
GfxTextOut (myLabel, BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3 );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
notDone = False;
}
if (BarDay== 3 & notDone )
{
if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
else myLabel =GetMonth(BarMonth);
GfxTextOut (myLabel, BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3 );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
notDone = False;
}
if (BarDay== 4 & notDone )
{
if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
else myLabel =GetMonth(BarMonth);
GfxTextOut (myLabel, BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3 );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
notDone = False;
}
if (BarDay== 5 & notDone )
{
if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
else myLabel =GetMonth(BarMonth);
GfxTextOut (myLabel, BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3 );
GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 - VolChartHeight );
GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
notDone = False;
}
if (BarDay== 6 |BarDay== 7 |BarDay== 8 |BarDay== 9 |BarDay== 10 )
{
notDone = True;
}
}
RestorePriceArrays ();
}
}
}
_SECTION_END();