The decision to use an external Chartsource for the axis labels means that you have full control over label positioning but it means also that you must decide on every details, there's no more automatism (except for Marks.OverlapPolicy = opNeighbar - but I don't like it because it results in irregular intervals). To avoid overlapping to the degree of several millimeters you must calculate the length of the labels and consider this when positioning labels. There were some discussions here with examples, please use the forum search, maybe seek for "DateTimeInterval" and my alias.
Alternatively you could make a rough classification depending on the zoomed extent:
- If the extent is shorter than 10 days put labels at every day
- shorter than 1 month: --> every week start day (Sunday or Monday, depending on country)
- shorter than 1 year: --> every 1st of a month
etc.
Or: Why don't you use a DateTimeIntervalChartSource for the zoomed case? In my eyes it works nicely for this purpose. Using its Params.MinLength/MaxLength you can control overlapping very efficiently without turning OverlapPolicy on. Its only disadvantage is that it does not necessarily put labels at the start of a date/time entity, i.e. it may decide to label the 2nd of a month while it could label the 1st as well.
Your DayLabels are very long (format 'dd/mm yyyy'). How about adding a linebreak? 'dd/mm' + LineEnding +'yyyy'.
The y axis normally starts automatically at the data minimum. Since it does not and since you don't override any of the related settings I had a look at the data, and in fact there are a few rows for which the open, high and low values are missing and have been replaced by a zero value (rows 230, 250, 255 and some more). For these days only the close tick is painted (zoom around 25-12 2008). You may want to set the open, high, low values equal to the close value in these cases instead. This should avoid the y axis to start at zero.