← Zurück

Работа с OrderGrid и TradeGrid

Здравствуйте! Очень понравились компоненты OrderGrid и TradeGrid! Подскажите, каким образом я могу изменить там цвет выделен бая или села и каким образом туда можно добавить или удалить какой нибудь из столбцов? Спасибо!

War dieses Thema hilfreich?

Thema teilen

Kommentare (16)

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

Mikhail Sukhov
Mikhail Sukhov

Создать свой собственный контрол. Те, что входят в S# такого не умеют. И я пока не думаю их развивать. Фактически, они появились благодаря тому, что они потребовались в нескольких примерах. Вот код OrderGird:

<ListView.View> <GridViewColumn.CellTemplate> <TextBlock Text="" TextAlignment="Right" /

                                           </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="45" Header="Баланс"

EcngXaml:GridViewSort.PropertyName="Balance"> <GridViewColumn.CellTemplate> <TextBlock Text="" TextAlignment="Right" /

                                           </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="60" Header="Цена"

EcngXaml:GridViewSort.PropertyName="Price"> <GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate> <DataTemplate.Triggers> </DataTemplate.Triggers> </GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate> <DataTemplate.Triggers> </DataTemplate.Triggers> </GridViewColumn.CellTemplate> </ListView.View>

///

/// Визуальный контрол-таблица, отображающая заявки (коллекцию объектов класса ). /// public partial class OrderGrid { /// /// Создать объект класса . /// public OrderGrid() { this.Orders = new SynchronisedObservableList(); InitializeComponent(); }

           /// <summary>
            /// Коллекция заявок, которые необходимо отобразить.
            /// </summary>
            public IList<Order> Orders { get; private set; }

           /// <summary>
            /// Происходит при новом выделении заявки.
            /// </summary>
            public event EventHandler<EventArgs> OrderSelected;

           /// <summary>
            /// Выбранная заявка.
            /// </summary>
            public Order SelectedOrder
            {
                    get
                    {
                            return this.SelectedOrders.FirstOrDefault();
                    }
            }

           /// <summary>
            /// Выбранный заявки.
            /// </summary>
            public IEnumerable<Order> SelectedOrders
            {
                    get
                    {
                            return _orders.SelectedItems.Cast<Order>();
                    }
            }

           private void _orders_SelectionChanged(object sender,

SelectionChangedEventArgs e) { this.OrderSelected.SafeInvoke(this); } }

AndreiFX
AndreiFX Autor

Спасибо. А может быть исходник этого компонента сможете выложить? Впервые сталкиваюсь с созданием компонентов в шарпе,потому исходник компонента очень поможет в разборе ситуации....

AndreiFX
AndreiFX Autor

Хотя уже не надо, разобрался. Спасибо

Mikhail Sukhov
Mikhail Sukhov

А это и был исходник.

AndreiFX
AndreiFX Autor

Теперь вот какая ошибка появилась, которая возникает при дде экспорте данных если имеется много ордеров

Необработанное исключение типа "System.StackOverflowException" произошло в Ecng.Xaml.dll

Подскажите, в чем может быть дело?

AndreiFX
AndreiFX Autor

Теперь возниклает вот какая проблема Когда много ордеров имею, то выскакивает вот эта ошибка при включении дде экспорта:

Необработанное исключение типа "System.StackOverflowException" произошло в Ecng.Xaml.dll

Подскажите, где копать?

Mikhail Sukhov
Mikhail Sukhov

Судя по всему, переполнение стека (много вызовов). А что сделали? Можете локализовать и послать исходники с багой?

AndreiFX
AndreiFX Autor

Эта ошибка возникла из за моей ошибки: робот начинает открывать очень большое количество ордеров(это мой баг), соответственно в таблице "мои сделки" очень много строк и из за этого возникает данная ошибка. Вот код моей вредоносной процедуры(не исправленной) Эту процедуру делал для закрытия ордеров к определенному времени, она вызывается на каждом тике после заданного времени. И косяк здесь в том, что пока робот открывает рыночный ордер, противоположный тому, что сейчас есть в рынке, эта процедура заново вызывается и открывается еще один противоположный и таким образом получается очень много сделок, привод зависает, а когда заново его включаю и начинаю делать дде вывод, то появляется вышеописанная ошибка. Она же, я полагаю может появиться если просто будет очень много сделок и сделаем заново вывод по дде.

private void CloseAllOrd() {

           for (int i = Limits.Count() - 1; i >= 0; i--)
            {
                Order ord = Limits;
                if (ord.State == OrderStates.Active)

CancelOrder(ord); } for (int i = this.StopOrders.Count() - 1; i >= 0; i--) { Order ord = this.StopOrders; if (ord.State == OrderStates.Active) CancelOrder(ord); }

           count = 0;
            foreach (MyOrderss x in Trades)
            {
                if (x.Direction == OrderDirections.Buy) count +=

x.Volume; if (x.Direction == OrderDirections.Sell) count -= x.Volume; }

           if (count > 0)
            {
                var order = new Order
                {
                    Account = acc,
                    Volume = count,
                    Security = secur,
                    Price = secur.BestBid - otst *

secur.MinStepSize, Direction = OrderDirections.Sell, Type = OrderTypes.Limit, }; this.Trader.RegisterOrder(order); ВремяОтмены = DateTime.Now; } if (count < 0) {

               var order = new Order
                {
                    Account = acc,
                    Volume = -count,
                    Security = secur,
                    Price = secur.BestAsk + otst *

secur.MinStepSize, Direction = OrderDirections.Buy, Type = OrderTypes.Limit, }; this.Trader.RegisterOrder(order);

       }
    }
Mikhail Sukhov
Mikhail Sukhov

Я правильно понял, что ошибка появляется не только в процессе работы (продолжительной или не совсем), а даже тогда, когда Вы перезапустили робота (вот тут уточняю, робота или ДДЕ) и сразу же получили ошибку?

Насчет большого объема заявок - не думаю. Таблица всех сделок содержит такое количество заявок, что никакому роботу не создать такое количество. И ничего, у все экспортируется на раз. Тем более, что при перезапуске ДДЕ сделки, которые уже вызывались через событие NewTrades, не будут более вызываться.

AndreiFX
AndreiFX Autor

Да, совершенно верно. Ошибка появлялась даже если я полностью перезагружал робота и даже квик. И даже комп)

AndreiFX
AndreiFX Autor

Ошибка вернулась) В таблице "мои сделки" 50 ордеров, в таблице "Заявки" 80 ордеров. 23 стоп заявки Включаю экспорт дде, экспортируются только стоп заявки, остальное пусто. Причем пробовал как своего робота, так и Ваши примеры..результат один. Всяческие перезагрузки тоже результата не дали.

Mikhail Sukhov
Mikhail Sukhov

Так может это просто потому, что в новой версии поменялся формат таблиц Квика? Вы сейчас на какой версии?

AndreiFX
AndreiFX Autor

Сейчас пробую все на 1.6 до 1.7 пока ничего не обновлял...

AndreiFX
AndreiFX Autor

Забыл добавить, никаких ошибок квик и робот не выкидывают Там где начинаем дде вывод сделал так

try {

               this.Trader.StartDde();
                _isDdeStarted = true;
            }
            catch
            {
                MessageBox.Show("Не удалось запустить ДДе

сервер"); }

Никаких ошибок не возникает, мессадж бокс не выскакивает..

Mikhail Sukhov
Mikhail Sukhov

QuikTrader.DdeError что пишет?

AndreiFX
AndreiFX Autor

Не успел вчера проверить... будем ждать следующего раза)