Chart 4.2.3.8 - отображение свечей и индикаторов в разных ChartArea
Добрый вечер!
Столкнулся с проблемой временной шкалой при отображении графиков и индикаторов.
Создаю 3 ChartArea на графике CandlesChart
- candlesDealsArea для отображения свечей и собственных сделок
- indicatorOneArea для отображения индикатора "Один"
- indicatorTwoArea для отображения индикатора "Два"
Код
var candlesDealsArea = new ChartArea();
var indicatorOneArea = new ChartArea();
var indicatorTwoArea = new ChartArea();
_candlesElem = new ChartCandleElement();
candlesDealsArea.Elements.Add(_candlesElem);
_myTradesElem = new ChartTradeElement();
candlesDealsArea.Elements.Add(_myTradesElem);
_indicatorOneElem = new ChartIndicatorElement { Indicator = IndicatorOne };
indicatorOneArea.Elements.Add(_indicatorOneElem);
_indicatorTwoElem = new ChartIndicatorElement { Indicator = IndicatorTwo };
indicatorTwoArea.Elements.Add(_indicatorTwoElem);
CandlesChart.Areas.Add(candlesDealsArea);
CandlesChart.Areas.Add(indicatorOneArea);
CandlesChart.Areas.Add(indicatorTwoArea);
Далее, если я рисую свечи и значения индикаторов следующим образом, то все работает отлично - все графики отображаются синхронно по временной оси (x-axis):
Код
strategy.NewCandle += (candle) =>
{
private var chartDict = new Dictionary<IChartElement, object>
{
{_candlesElem, currentCandle},
{_indicatorOneElem, new ChartIndicatorValue(IndicatorOne, IIndicatorOneValue) },
{_indicatorTwoElem, new ChartIndicatorValue(IndicatorTwo, IIndicatorTwoValue) },
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(candle.OpenTime, chartDict));
}
strategy.NewMyTrades += (myTrades) =>
{
foreach (var myTrade in myTrades)
{
var chartDict = new Dictionary<IChartElement, object>
{
{_myTradesElem, myTrade}
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(myTrade.Trade.Time, chartDict));
}
};
Но, мне необходимо обновлять значения индикаторов чаще, чем рисуются свечи, поэтому для меня схема выше не подходит (разве что рисовать свечи чаще).
Поэтому я хочу сделать например вот так:
Код
strategy.NewCandle += (candle) =>
{
var chartDict = new Dictionary<IChartElement, object>
{
{_candlesElem, currentCandle},
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(candle.OpenTime, chartDict));
}
strategy.NewTrade += (trade) =>
{
var chartDict = new Dictionary<IChartElement, object>
{
{_indicatorOneElem, new ChartIndicatorValue(IndicatorOne, IIndicatorOneValue) },
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(trade.Time, chartDict));
}
strategy.PositionChanged += () =>
{
var chartDict = new Dictionary<IChartElement, object>
{
{_indicatorTwoElem, new ChartIndicatorValue(IndicatorTwo, IIndicatorTwoValue) },
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(strategy.CurrentTime, chartDict));
}
strategy.NewMyTrades += (myTrades) =>
{
foreach (var myTrade in myTrades)
{
var chartDict = new Dictionary<IChartElement, object>
{
{_myTradesElem, myTrade}
};
CandlesChart.GuiAsync(() => CandlesChart.ProcessValues(myTrade.Trade.Time, chartDict));
}
};
тут возникает проблема - у каждого графика своя временная ось (кроме собственных сделок, т.к. они отображаются в одной области со свечами), что неудобно так как хочется знать значения того или иного индикатора во время определенной свечи.
Вопрос - как сделать одну временную ось и при этом обновлять элементы НЕ одновременно?
Вопрос 2 - есть ли реализованная возможность рисовать Тиковые сделки?
Спасибо!