chart objects not drawing
chart objects not drawing
18 Nov 2023, 10:11
Hi
Below I've pasted code straight from the ctrader help to use as an example and eliminate anythign odd i might have done.
The issue i'm having is that, code that draws this a grid and its child objects isn't drawing on my charts. IF, in ‘Automate’ I add an instance to the indicator, it will draw on that chart the first time I add it, but then after any further changes, I have to remove the instance and re-add it. On charts in ‘trade’ it doesn't draw at all, thought it does add the indicator area, and if i have print statements throughout it prints to the log as expected.
What do i need to change to trigger this to draw ?
Here is some sample code:
using cAlgo.API;
namespace cAlgo
{
// This sample indicator shows how to use IndicatorArea
[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class IndicatorAreaSample : Indicator
{
private TextBlock _indicatorAreaNumberTextBlock;
protected override void Initialize()
{
var grid = new Grid(1, 2)
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
BackgroundColor = Color.Gold,
Opacity = 0.7,
Width = 200
};
grid.AddChild(new TextBlock { Text = "Indicator Area #", Margin = 5, FontWeight = FontWeight.ExtraBold, ForegroundColor = Color.Black }, 0, 0);
_indicatorAreaNumberTextBlock = new TextBlock
{
Margin = 5,
Text = Chart.IndicatorAreas.Count.ToString(),
FontWeight = FontWeight.ExtraBold,
ForegroundColor = Color.Black
};
grid.AddChild(_indicatorAreaNumberTextBlock, 0, 1);
IndicatorArea.AddControl(grid);
Chart.IndicatorAreaAdded += Chart_IndicatorAreaAdded;
Chart.IndicatorAreaRemoved += Chart_IndicatorAreaRemoved;
}
private void Chart_IndicatorAreaRemoved(IndicatorAreaRemovedEventArgs obj)
{
_indicatorAreaNumberTextBlock.Text = Chart.IndicatorAreas.Count.ToString();
}
private void Chart_IndicatorAreaAdded(IndicatorAreaAddedEventArgs obj)
{
_indicatorAreaNumberTextBlock.Text = Chart.IndicatorAreas.Count.ToString();
}
public override void Calculate(int index)
{
}
}
}