← Zurück

ChartTradeElement - все сделки Sell

При отрисовке сделок с помощью ChartTradeElement почему-то все сделки обозначаются красной стрелкой вниз. (в журнале у меня по тому же событию сделки пишутся, на продажу и на покупку, т.е. со статусом в событии проблемы скорее всего нет) В чём может быть проблема? Где копать?

Kommentare (22)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

esper
esper

Какой чарт используется? Какая версия библиотеки?

VassilSanych
VassilSanych Autor

esper: Какой чарт используется? Какая версия библиотеки? Исходники. WPFToolkit 1.8 SciChart, естественно

esper
esper

VassilSanych: Исходники. WPFToolkit 1.8 SciChart, естественно Была такая ошибка, но ее исправили пару версий назад.

Иван З.
Иван З.

Здравствуйте! Тоже есть проблема с прорисовкой сделок на графике. Передаю свечи и сделки так

candleManager.Processing += DrawCandle;
_trader.NewMyTrades += DrawTrade;
        private void DrawTrade(IEnumerable<MyTrade> trade)
        {
            this.GuiAsync(
                () => _chartWindow.Chart.ProcessValues(trade.Last().Trade.Time, new Dictionary<IChartElement, object>
                    {
                        {_tradeElement, trade.Last()},
                    }));
        }

        private void DrawCandle(CandleSeries series, Candle candle)
        {
                if (candle.State == CandleStates.Finished)
                {
                    this.GuiAsync(
                        () => _chartWindow.Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
                            {
                                {_candlesElem, candle},
                            }));
            }
        }

Свечи и сделки рисуются. Но обратил внимание, что не все сделки отображены на графике. Прикрутил MessageBox, и стал смотреть шаг за шагом, что происходит. Так как свеча прорисовывается уже оконченная, то сделка прорисовывается раньше, как как видно на первом рисунке. Но как только прорисовывается свеча, предыдущая сделка исчезает с предыдущей свечи и появляется в левом краю окна. Только одна сделка из 7 осталась на своем месте. От цвета свечи это не зависит, бывает и зеленые остаются на графике. Проверяю на версии 4.1.12, до этой версии такая проблема была тоже. В чем проблема? Что делаю не так? Как исправить? И еще ```csharp _chartWindow.Chart.IsAutoScroll = true;

esper
esper

Иван З.: Здравствуйте! Тоже есть проблема с прорисовкой сделок на графике.

Свечи и сделки рисуются. Но обратил внимание, что не все сделки отображены на графике. Прикрутил MessageBox, и стал смотреть шаг за шагом, что происходит. Так как свеча прорисовывается уже оконченная, то сделка прорисовывается раньше, как как видно на первом рисунке. Но как только прорисовывается свеча, предыдущая сделка исчезает с предыдущей свечи и появляется в левом краю окна. Только одна сделка из 7 осталась на своем месте. От цвета свечи это не зависит, бывает и зеленые остаются на графике. Проверяю на версии 4.1.12, до этой версии такая проблема была тоже. В чем проблема? Что делаю не так? Как исправить? Попробуйте пока выводить сделки округляя их время до времени свечки.

UsilaDobry
UsilaDobry

esper: Попробуйте пока выводить сделки округляя их время до времени свечки.

А это как? Я округляю значения с помощью Math.Round, а как можно округлить данные типа DateTime?🤨

  • к тому, что убегают стрелки у меня заявки тоже выводятся в виде стрелок:
_strategy.WhenOrderRegistered().Do(order => this.GuiAsync(() =>
                        Chart.ProcessValues(order.Time, new Dictionary<IChartElement, object> { { _chartOrderElement, order }, }))).Apply();
                    _strategy.WhenNewMyTrades().Do(trades => trades.ForEach(t => this.GuiAsync(() =>
                        Chart.ProcessValues(t.Trade.Time, new Dictionary<IChartElement, object> { { _chartTradeElement, t }, })))).Apply();

и цвет элементов не могу поменять, эти свойства не работают, на графике они повторяют цвет свечек:

_chartTradeElement = new ChartTradeElement {BuyColor = Colors.Blue, SellColor = Colors.Blue};
_chartOrderElement = new ChartOrderElement {BuyColor = Colors.Aqua, SellColor = Colors.Aqua};
esper
esper

UsilaDobry: А это как? Схематично так```csharp timeFrame.GetCandleBounds(trade.Time).Min


> **[UsilaDobry](@message(25873)):**
> + к тому, что убегают стрелки у меня заявки тоже выводятся в виде стрелок:
Все верно, заявки сейчас отображаются так же как и сделки.

> **[UsilaDobry](@message(25873)):**
> и цвет элементов не могу поменять, эти свойства не работают, на графике они повторяют цвет свечек:
Цвета для заявок и сделок пока менять нельзя.
Moadip
Moadip

Давайте проведем эксперимент. Есть подозрение что дело в Abt.Controls.SciChart.Wpf.dll. Прикрепил к посту более ранню версию Abt.Controls.SciChart.Wpf.dll, плюс скомпиленную под нее StockSharp.Xaml.dll.

Замените у себя эти dll и проверьте, будет ли баг со стрелками или нет.

Иван З.
Иван З.

Эксперимент провел.

_chartWindow.Chart.IsAutoScroll = true; 

Не работает. И вообще, теперь ни какая кнопка в чарте не работает, масштабировать не получается. Результат на рисунке. Хотя стрелка не исчезла, и с левого края ни одной стрелки не появилось, но для точности надо по больше картинку посмотреть.

Moadip
Moadip

Не работает. Ну зато стрелка не исчезла.🙂 Значит в исчезновении стрелок виновата либа Abt.Controls.SciChart.Wpf.dll.

Насчет масштабирования, странно что не работает, проверил, вроде все ок. Насчет AutoScroll - разбираемся.

Иван З.
Иван З.
Иван З.

Насчет масштабирования, странно что не работает, проверил, вроде все ок. При двойном нажатии выдает ошибку. Стрелки то на месте, теперь бы больше 2х свечей увидеть.😂

VassilSanych
VassilSanych Autor

Иван З.: Стрелки то на месте, теперь бы больше 2х свечей увидеть.😂 Не трогайте его. Он думает о бесконечности :)

Иван З.
Иван З.

Он думает о вечном... Так лучше звучит.:)

Иван З.
Иван З.

Спасибо, помогло!

Иван З.
Иван З.

Все верно, заявки сейчас отображаются так же как и сделки. Это очень не удобно. Заявка со временем уходит из вида. И вообще SciChart поплохел, ждем новой версии с исправлениями!😉

esper
esper

Иван З.: Это очень не удобно. Заявка со временем уходит из вида. Это есть в планах, но пока есть и более приоритетные задачи.

Иван З.: И вообще SciChart поплохел, ждем новой версии с исправлениями!😉 А поподробнее?

Иван З.
Иван З.

Самый первый, которого раньше не было, это IsAutoScroll = true;, не работает. IsAutoScroll кровь попил, ушел на StockSharp.Xaml другой версии где работает, но там не работает CrossHair = true; а штука удобная. Заявки сейчас отображаются так же как и сделки, тоже не удобно. Стрелки убегают в начало экрана, это и раньше было, ну а так как "Заявки сейчас отображаются так же как и сделки" эти стрелки тоже убегают на край экрана, приходиться округлять. Я много графиком не пользуюсь, это сразу в глаза бросилось. Еще стоп заявки не выводил на экран, не знаю даже можно или нет. Есть еще один косячек малюсенький, при тестировании когда вывожу сделки на экран, и пару индикаторов в разных областях графиков. Пока свечи идут все нормально как только, тестирование окончено при движении свечек(_area1) с ней двигается последний(_area4) а индикаторы средние(_area2, _area3) стоит на месте, при изменении размеров индикаторов(_area2, _area3) все встает на места. На первом рисунке как все должно выглядеть, на втором прокрутил свечки, свечи и нижний индикатор прокрутились как надо, а два средних стоят на месте. На 3 собрал в кучу свечи, нижний тоже собрался, два средних нет. На четвертом измения размер площадей средних все стало на места. Это не критично, но проблема есть. У VassilSanych были претензии здесь http://www.stocksharp.com/forum/3659/SciChart---nabor-ghliukov/ Я в них не вникал, но он как правило х-ню не пишет.

Это есть в планах, но пока есть и более приоритетные задачи. Ни кто не торопит, просто взгляд со стороны пользователя, спасибо за работу.

ChartTheme = "ExpressionDark"; Штука интересная, есть еще какие нибудь темы? Где их можно посмотреть?

Иван З.
Иван З.

Еще пожелание, Antialiasinig=false, сделать по умолчанию false. Без сглаживания смотрится на много лучше(Мое мнение, можно поспорить, спросить общественность).

esper
esper

Доступные темы: ExpressionLight, ExpressionDark, BlackSteel, BrightSpark, Chrome, Electric, Oscilloscope

Иван З. UsilaDobry VassilSanych
devruss
devruss

Итак, прошло 9 месяцев, результат:

Автор: UsilaDobry Перейти к цитате и цвет элементов не могу поменять, эти свойства не работают, на графике они повторяют цвет свечек:

Цвета для заявок и сделок пока менять нельзя.

все также нельзя менять цвета сделок. Если Buy еще отличаются от зеленого цвета свечек, то красный Sell абсолютно не читается на красных свечках "вниз". В исходниках нашел свойства для цвета, но они ни на что не влияют:


tradeElement = new ChartTradeElement()
            {
                BuyColor = Colors.Yellow,
                SellColor = Colors.Yellow
            };

Эксперимент провел. Код:

_chartWindow.Chart.IsAutoScroll = true;

> 
> Не работает. И вообще, теперь ни какая кнопка в чарте не работает, масштабировать не получается.

все также - либо AutoScroll, либо масштабирование

Я уверен, что есть более важные задачи, но 9 месяцев на исправление таких мелких багов это многовато. 
devruss
devruss

4.2.2.16 измененные цвета сделок заработали, crosshair + масштабирование тоже

JaguarFX
JaguarFX

Сделки заработали, но свечи у меня слетели полностью)) http://yadi.sk/d/qeFBgsofJoHtk

При отладке заметил, что при использовании API 4.2.2.16 для тестирования на исторических свечах у всех полученных стратегией свечей CloseTime стало равно OpenTime http://yadi.sk/d/xeIZeBHdJoNKv

Код прорисовки


            if (parameters.chartHC)
            {
                    histChart = doc.TestingPanel.HistoryChart;
                    histChart.Areas.Clear();
                    histChart.IsAutoScroll = true;
                    _area = new ChartArea(); //создаем область на графике
                    histChart.Areas.Add(_area); //добавляем область на график
                    _candlesElem = new ChartCandleElement(); //создаем элемент свечи
                    _area.Elements.Add(_candlesElem); //добавляем элемент в область вывода графика
                        //_candleManager.Processing
                    _series.ProcessCandle += (cnd) =>
                    {
                        if (cnd.State == CandleStates.Finished)
                            MainWindow.Instance.GuiAsync(() => histChart.ProcessCandle(_candlesElem, cnd));
                    };
            }

            if (parameters.chartHC && parameters.chartTrd)
            {
                    var _tradeElement = new ChartTradeElement();
                    _area.Elements.Add(_tradeElement);
                    _strategy.NewMyTrades += (trds) => 
                        trds.ForEach(t =>
                        {
                            var tradeTime = _timeFrame.GetCandleBounds(t.Trade.Time).Min;
                            var myDic = new Dictionary<IChartElement, object>() { { _tradeElement, t } };
                            MainWindow.Instance.GuiAsync(() => histChart.ProcessValues(tradeTime, myDic));
                        });
            }