Hi, I have created a custom chart component with dynamic series.
Everything but the VWAP series is shown.
I have tried created an empty array, assign series to it then set the series of
the priceAreaChart instead of pushing them one by one. To no avail.
I have tried using invalidateSeriesStyles() as well.
Any clue ?
override protected function commitProperties():void
{
super.commitProperties();
if(isTextColorStyleChanged)
{
isTextColorStyleChanged = false;
pricesAreaChart.setStyle("color",
textColorData);
pricesHLOCChart.setStyle("color",
textColorData);
tradeVolumesChart.setStyle("color",
textColorData);
legend.setStyle("color", textColorData);
}
if(isFontFamilyStyleChanged)
{
isFontFamilyStyleChanged = false;
pricesAreaChart.setStyle("fontFamily",
fontFamilyData);
pricesHLOCChart.setStyle("fontFamily",
fontFamilyData);
tradeVolumesChart.setStyle("fontFamily",
fontFamilyData);
legend.setStyle("fontFamily", fontFamilyData);
}
if(isFontWeightStyleChanged)
{
isFontWeightStyleChanged = false;
pricesAreaChart.setStyle("fontWeight",
fontWeightData);
pricesHLOCChart.setStyle("fontWeight",
fontWeightData);
tradeVolumesChart.setStyle("fontWeight",
fontWeightData);
legend.setStyle("fontWeight", fontWeightData);
}
if(isFontSizeStyleChanged)
{
isFontSizeStyleChanged = false;
pricesAreaChart.setStyle("fontSize",
fontSizeData);
pricesHLOCChart.setStyle("fontSize",
fontSizeData);
tradeVolumesChart.setStyle("fontSize",
fontSizeData);
legend.setStyle("fontSize", fontSizeData);
}
if(this._bDataDirty)
{
this._bDataDirty = false;
// Reset charts series
pricesAreaChart.series = [];
pricesHLOCChart.series = [];
tradeVolumesChart.series = [];
// Remove Dynamic skin parts
for each(var dynamicSkinPartObject:Object in
dynamicPartsInstances) {
removeDynamicPartInstance(dynamicSkinPartObject.partName,
dynamicSkinPartObject.instance);
}
dynamicPartsInstances = [];
// Remove all the data children (dingbats) from
the DataDrawingCanvas in the annotationElements
pricesAreaForegroundCanvas.removeAllChildren();
pricesHLOCForegroundCanvas.removeAllChildren();
// Create dingbats for the alert being
investigated
createDingBats();
// Create charts series
var columnSet:ColumnSet = new ColumnSet();
columnSet.type = "stacked";
for each(var item:StockDataItemDTO in
dataProvider)
{
if(item.data)
{
// Create one data tip per
market
//createDataTip(item);
//#######################################
// Each StockDataItem
represents a market
//#######################################
//-------------------------------------------------------------------------
// Top chart: Spread, Level 1,
VWAP - AreaSeries, LineSeries and HLOCSeries
//-------------------------------------------------------------------------
// Spread area
var spreadAreaSeries:AreaSeries
= new AreaSeries();
spreadAreaSeries.dataProvider =
item.data;
spreadAreaSeries.xField =
"date";
spreadAreaSeries.yField =
"high";
spreadAreaSeries.minField =
"low";
var spreadAreaStroke:IStroke =
new SolidColorStroke(item.areaColor, 1, 1);
var
spreadAreaFill:LinearGradient = new LinearGradient();
var spreadAreaRatio:Number =
0.0;
spreadAreaFill.rotation = 90;
var gradientEntries:Array = [];
for each(var spreadColor:Number
in item.areaFill)
{
var
gradientEntry:GradientEntry = new GradientEntry(spreadColor, spreadAreaRatio,
1.0);
gradientEntries.push(gradientEntry);
spreadAreaRatio += 0.33;
}
spreadAreaFill.entries =
gradientEntries;
spreadAreaSeries.setStyle("areaStroke", spreadAreaStroke);
spreadAreaSeries.setStyle("areaFill", spreadAreaFill);
spreadAreaSeries.setStyle("form", formData);
pricesAreaChart.series.push(spreadAreaSeries);
BindingUtils.bindProperty(spreadAreaSeries, "visible", item,
"isSpreadDisplayed");
// Level 1 (Price)
var priceLineSeries:LineSeries
= new LineSeries();
priceLineSeries.dataProvider =
item.data;
priceLineSeries.xField = "date";
priceLineSeries.yField =
"price";
var priceLineStroke:IStroke =
new SolidColorStroke(item.priceColor, 1, 1);
priceLineSeries.setStyle("lineStroke", priceLineStroke);
var priceLineFilter:GlowFilter
= new GlowFilter(0xFFFFFF, 2, 2, 2, 2, 1); // Glow the color of vwapColor
//priceLineSeries.filters =
[priceLineFilter];
priceLineSeries.setStyle("form", formData);
pricesAreaChart.series.push(priceLineSeries);
BindingUtils.bindProperty(priceLineSeries, "visible", item,
"isLevel1Displayed");
// VWAP line
var vwapLineSeries:LineSeries =
new LineSeries();
vwapLineSeries.dataProvider =
item.data;
vwapLineSeries.xField="date";
vwapLineSeries.yField="vwap";
var vwapLineStroke:IStroke =
new SolidColorStroke(0xFFFFFF, 1, 1); // Line the same color for all markets
(default is white)
vwapLineSeries.setStyle("lineStroke", vwapLineStroke);
var vwapFilter:GlowFilter = new
GlowFilter(item.priceColor, 2, 2, 2, 2, 1); // Glow the color of vwapColor
//vwapLineSeries.filters =
[vwapFilter];
vwapLineSeries.setStyle("form",
formData);
pricesAreaChart.series.push(vwapLineSeries);
BindingUtils.bindProperty(vwapLineSeries, "visible", item, "isVWAPDisplayed");
// HLOC
var hlocSeries:HLOCSeries = new
HLOCSeries();
hlocSeries.dataProvider =
item.data;
hlocSeries.xField="date";
hlocSeries.openField="open"
hlocSeries.highField="high"
hlocSeries.lowField="low"
hlocSeries.closeField="close"
hlocSeries.setStyle("openTickLength", 7);
hlocSeries.setStyle("closeTickLength", 7);
var hlocLineStroke:IStroke =
new SolidColorStroke(item.hlocColor, 1, 1);
hlocSeries.setStyle("lineStroke", hlocLineStroke);
var closeTickStroke:IStroke =
new SolidColorStroke(item.closeTickColor, 1, 1);
hlocSeries.setStyle("closeTickStroke", closeTickStroke);
var openTickStroke:IStroke =
new SolidColorStroke(item.openTickColor, 1, 1);
hlocSeries.setStyle("openTickStroke", openTickStroke);
var highLineSeries:LineSeries =
new LineSeries();
highLineSeries.dataProvider =
item.data;
highLineSeries.xField = "date";
highLineSeries.yField = "high";
highLineSeries.setStyle("lineStroke", spreadAreaStroke);
highLineSeries.setStyle("form",
formData);
var lowLineSeries:LineSeries =
new LineSeries();
lowLineSeries.dataProvider =
item.data;
lowLineSeries.xField = "date";
lowLineSeries.yField = "low";
lowLineSeries.setStyle("lineStroke", spreadAreaStroke);
lowLineSeries.setStyle("form",
formData);
pricesHLOCChart.series.push(hlocSeries);
pricesHLOCChart.series.push(vwapLineSeries); // Same VWAP
line series as the AreaChart
pricesHLOCChart.series.push(highLineSeries);
pricesHLOCChart.series.push(lowLineSeries);
//----------------------------------------------
// Bottom chart: Volume of
trades - ColumnSeries
//----------------------------------------------
var
volumeColumnSeries:ColumnSeries = new ColumnSeries();
volumeColumnSeries.dataProvider
= item.data;
volumeColumnSeries.xField="date";
volumeColumnSeries.yField="volume";
volumeColumnSeries.setStyle("stroke", spreadAreaStroke); // Same values as the
spread
volumeColumnSeries.setStyle("fill", spreadAreaFill); // Same values as the
spread
volumeColumnSeries.displayName
= item.marketName;
columnSet.series.push(volumeColumnSeries);
}
}
tradeVolumesChart.series = columnSet.series;
//-------------------------------------------------------------------------------------------------------------------------
// Update the timeline dataProvider with the
first item whose data is not null (the date range for all markets is the same)
//-------------------------------------------------------------------------------------------------------------------------
var dataProviderAC:ArrayCollection =
dataProvider as ArrayCollection;
var itemData:ArrayCollection;
if(dataProviderAC.length > 0)
{
for each(var market:StockDataItemDTO in
dataProviderAC)
{
if(market.data)
{
itemData = market.data;
timeLine.dataProvider =
itemData;
break;
}
}
}
}
// Reset price at time of order line on both price and
HLOC canvases
pricesAreaBackgroundCanvas.clear();
pricesHLOCBackgroundCanvas.clear();
invalidateDisplayList();
}
Best regards,
Karl.

