Импорт таблицы перестал работать
Atom
14.01.2013


Код состоит из следующих элементов:

Код

private QuikTrader _trader;
private readonly MyTradesWindow _myTradesWindow = new MyTradesWindow();
_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));

string tstr = "А вот и мои сделочки: \n";
foreach (var myTrade in _myTradesWindow.Trades)
{
    var trade = myTrade.Trade;
    tstr = tstr + string.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.\n", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}
tradestb.Text = tstr;


В итоге в TextBox выводится только инициализированная строка tstr, без сделок. Весь день ушёл на поиск причины, хотя ещё в пятницу табличка выводилась. Код не менял. В то же время стакан, например, выводится как надо. В чём может быть проблема?

Теги:


Спасибо:


1 2 3  >
Den

Фотография
Дата: 14.01.2013
Ответить


Творог Перейти

В итоге в TextBox выводится только инициализированная строка tstr, без сделок. Весь день ушёл на поиск причины, хотя ещё в пятницу табличка выводилась. Код не менял. В то же время стакан, например, выводится как надо. В чём может быть проблема?


Трейдер синхронный или нет?

Возможно причина та же самая, что и у меня: не приходит newStopOrders
Спасибо:

Творог

Фотография
Дата: 14.01.2013
Ответить


Den Перейти

Трейдер синхронный или нет?

Возможно причина та же самая, что и у меня: не приходит newStopOrders


Попробовал подставить оба варианта _trader.IsAsyncMode = true; и _trader.IsAsyncMode = false;
Но всё равно вижу только строку в текстбоксе А вот и мои сделочки:
Спасибо:

Moadip

Фотография
Дата: 15.01.2013
Ответить


Цитата:
Импорт таблицы перестал работать

Так а что изменилось то? Сборку новую скачали? Так и пишите тогда, и номер.

Тут, если все правильно понимаю, вы передаете пришедшие сделки в отдельное окно.
Код

private readonly MyTradesWindow _myTradesWindow = new MyTradesWindow();
_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));


Логично предположить что где - то это окно потом показывается. В котором должны показываться сделки
Код

_myTradesWindow.Show()


Но вот эти строчки не совсем понятны
Код

foreach (var myTrade in _myTradesWindow.Trades)
{
    var trade = myTrade.Trade;
    tstr = tstr + string.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.\n", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}


В каком месте этот код обрабатывается? Явно не внутри _myTradesWindow.
Т.е. получается что в двух местах что ли информация о сделках показывается?
В каком то виде в окне _myTradesWindow и еще в текстбоксе?

Если только в текстбоксе, то проще сделать так
Код

private QuikTrader _trader;
string tstr = "А вот и мои сделочки: \n";

_trader.NewMyTrades += trades => this.GuiAsync(() => 
{
    foreach (var myTrade in trades)
    {
        var trade = myTrade.Trade;
        tstr += string.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.\n", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
    {
    tradestb.Text = tstr;
});


Теперь в чем может быть причина.
Проверьте срабатывает ли событие NewMyTrades.
Если срабатывает, то посмотрите что находится внутри trades, точнее в одной из сделок var trade = myTrade.Trade;
Есть ли в trade данные.
Спасибо: Творог

Творог

Фотография
Дата: 15.01.2013
Ответить


Ага, я просто конструкцию типа
Код
_trader.NewMyTrades += trades => this.GuiAsync(() => 
{
    foreach (var myTrade in trades)
    {


закомментил, и написал ту, которая выше. Там была проблема, что почему-то выводились только новые сделки при их появлении.

А почему тот блок который я опубликовал нежизнеспособен?
Спасибо:

Творог

Фотография
Дата: 15.01.2013
Ответить


И вот ещё вопросец по теме. Допустим я хочу вставить таблицу в форму и для этого вставляю следующий код

Код
        <ListView HorizontalAlignment="Left" Height="339" Margin="435,391,0,0" VerticalAlignment="Top" Width="628" x:Name="TradesDetails" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding ElementName=_myTradesWindow, Path=Trades}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    <GridViewColumn Width="120" Header="Время" DisplayMemberBinding="{Binding Path=Trade.Time}" />
                    <GridViewColumn Width="70" Header="Цена" DisplayMemberBinding="{Binding Path=Trade.Price}" />
                    <GridViewColumn Width="60" Header="Кол-во" DisplayMemberBinding="{Binding Path=Trade.Volume}" />
                    <GridViewColumn Width="100" Header="Инструмент" DisplayMemberBinding="{Binding Path=Trade.Security.Code}" />
                    <GridViewColumn Width="80" Header="Направление" DisplayMemberBinding="{Binding Path=Order.Direction}" />
                    <GridViewColumn Width="90" Header="Заявка" DisplayMemberBinding="{Binding Path=Order.Id}" />
                </GridView>
            </ListView.View>
        </ListView>


Табличка не заполняется (хотя _myTradesWindow.Show() показывает окно со сделками). Я так понимаю, должен где-то "TradesDetails" прописать и что-то ещё сделать?
Спасибо:

Moadip

Фотография
Дата: 15.01.2013
Ответить


Цитата:
А почему тот блок который я опубликовал нежизнеспособен?

Ну почему не жизнеспособен.
Если кроме как добавления/вытаскивания во внутреннюю коллекцию Trades объекта _myTradesWindow вы этот объект никак не используете, то это избыточный код.

Если надо куда то складывать пришедшие сделки, сделайте отдельную коллекцию типа List<MyTrade>
Код

private List<MyTrade> _myTradeList = new List<MyTrade>();


Получается следующее(в вашем примере кода)

Код

private QuikTrader _trader;
private List<MyTrade> _myTradeList = new List<MyTrade>();
_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradeList .AddRange(trades));
 
string tstr = "А вот и мои сделочки: \n";
foreach (var myTrade in myTradeList )
{
    var trade = myTrade.Trade;
    tstr = tstr + string.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.\n", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}
tradestb.Text = tstr;
Спасибо: Творог

Moadip

Фотография
Дата: 15.01.2013
Ответить


Творог Перейти
И вот ещё вопросец по теме. Допустим я хочу вставить таблицу в форму и для этого вставляю следующий код

Код
        <ListView HorizontalAlignment="Left" Height="339" Margin="435,391,0,0" VerticalAlignment="Top" Width="628" x:Name="TradesDetails" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding ElementName=_myTradesWindow, Path=Trades}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    <GridViewColumn Width="120" Header="Время" DisplayMemberBinding="{Binding Path=Trade.Time}" />
                    <GridViewColumn Width="70" Header="Цена" DisplayMemberBinding="{Binding Path=Trade.Price}" />
                    <GridViewColumn Width="60" Header="Кол-во" DisplayMemberBinding="{Binding Path=Trade.Volume}" />
                    <GridViewColumn Width="100" Header="Инструмент" DisplayMemberBinding="{Binding Path=Trade.Security.Code}" />
                    <GridViewColumn Width="80" Header="Направление" DisplayMemberBinding="{Binding Path=Order.Direction}" />
                    <GridViewColumn Width="90" Header="Заявка" DisplayMemberBinding="{Binding Path=Order.Id}" />
                </GridView>
            </ListView.View>
        </ListView>


Табличка не заполняется (хотя _myTradesWindow.Show() показывает окно со сделками). Я так понимаю, должен где-то "TradesDetails" прописать и что-то ещё сделать?


Зачем изобретать велосипед когда уже есть все готовое? Советую изучить Stocksharp.Xaml.
Конкретно - TradeGrid.
Как работать с этими контролами есть в примерах.
Спасибо:

Творог

Фотография
Дата: 15.01.2013
Ответить


Moadip Перейти


Зачем изобретать велосипед когда уже есть все готовое? Советую изучить Stocksharp.Xaml.
Конкретно - TradeGrid.
Как работать с этими контролами есть в примерах.


Сорри, но в хэлпе чисто справочный материал и как им воспользоваться, в данном случае, я не очень понимаю. Указанный код я как раз и забрал у Sample. Можете привести простенький пример как вставить таблицу с коллекцией в свою форму?
Спасибо:

Moadip

Фотография
Дата: 15.01.2013
Ответить


Xaml

Cs
Test.rar 7 MB (229)
Спасибо:

Творог

Фотография
Дата: 15.01.2013
Ответить


Moadip, а если понадобится сделать кастомный набор колонок, эта строка как-то редактируется для вывода только нужной инфы? Ну например, как добавить столбик Ставка РЕПО?
<xaml:TradeGrid x:Name="TradeGrid" Grid.Row="2"/>
Спасибо:
1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy