Fantastic coding can you
help me out as to why when I use your code on the bottom I get this?
Thank you
Mark
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of James Hutchison
Sent: Sunday, May 06, 2007 10:03
PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Gfx
Drawing example
Additional Features Volume drawing has been fixed
Parameters to change chart settings and to choose watch lists
Code For new Version
function GetMonth( MonthNumber )
{
switch (MonthNumber) {
case
2
:
result =
"Feb";
break ;
cae 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"
, 9 );
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 );
}
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 );
}
GfxMoveTo
( BarWidth * w + x1 +
ChartMargin , vHi );
GfxLineTo
( BarWidth * w + x1 +
ChartMargin, y2 );
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 );
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
();
}
}
}
Thank you for your compliments.
Jim Hutchison