← 戻る

myTrade.ExtensionInfo

Здравствуйте.

Имею следующий код:

_trader.MyTradesTable.Columns.Add(DdeMyTradeColumns.Commission);
_trader.NewMyTrades += myTrades =>
{
    // В некоторых случаях myTrade.ExtensionInfo.Count == 0;
    // А в некоторых myTrade.ExtensionInfo.Count == 1;
};

В чем может быть проблема? Пробовал в версиях 3.2.10-3.2.11

このトピックは参考になりましたか?

トピックを共有

コメント (13)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Serg
Serg

Если не ошибаюсь ExtensionInfo сама не добавляется

Alexander
Alexander

vk37: Здравствуйте.

Имею следующий код:

_trader.MyTradesTable.Columns.Add(DdeMyTradeColumns.Commission); _trader.NewMyTrades += myTrades => { // В некоторых случаях myTrade.ExtensionInfo.Count == 0; // А в некоторых myTrade.ExtensionInfo.Count == 1; };

> 
> В чем может быть проблема?
> Пробовал в версиях 3.2.10-3.2.11


А что там в ExtensionInfo? Вы переберите его, посмотрите :)
vk37
vk37 著者

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

Alexander
Alexander

vk37: Попробую переформулировать свой вопрос. Мне нужно выполнить дде экспорт дополнительной колонки "Комиссия ТС" из таблицы моих сделок. Колонку в квике добавил. В коде на событии добавления моих сделок, информация о комиссии присутствует не во всех случаях: иногда есть, а иногда нет. Может кто знает в чем может быть проблема?

Иногда событие о своей сделке может придти первым не по таблице своих сделок, а по таблице всех сделок - соответственно ExtensionInfo и не добавляется.

vk37
vk37 著者

Alexander:

vk37: Попробую переформулировать свой вопрос. Мне нужно выполнить дде экспорт дополнительной колонки "Комиссия ТС" из таблицы моих сделок. Колонку в квике добавил. В коде на событии добавления моих сделок, информация о комиссии присутствует не во всех случаях: иногда есть, а иногда нет. Может кто знает в чем может быть проблема?

Иногда событие о своей сделке может придти первым не по таблице своих сделок, а по таблице всех сделок - соответственно ExtensionInfo и не добавляется.

Каков же выход? :)

Serg
Serg

Стало интересно как это "по таблице всех сделок"? Если например, по цене 100 в стакане стоит 2 лота на продажу из которых 1 мой. Далее проходит купля по 100 1го лота, исполнилась не моя заявка. Я получу событие о своей сделке?

Serg
Serg

не выводить все сделки или считать коммис самому)

vk37
vk37 著者

Serg: не выводить все сделки или считать коммис самому) А что значит не выводить все сделки?

Serg
Serg

имею ввиду не стартовать дде экспорт таблицы всех сделок если вы используете quik

Alexander
Alexander

Перепроверил - должно быть всё ок. Можно пример когда ExtensionInfo имеет размер 0 и показать скриншот что при этом он должен быть не 0?

vk37
vk37 著者

Alexander: Перепроверил - должно быть всё ок. Можно пример когда ExtensionInfo имеет размер 0 и показать скриншот что при этом он должен быть не 0?

Вышлю по эл. почте скриншоты и код. Скиньте в личку адрес.

vk37
vk37 著者

Alexander: Перепроверил - должно быть всё ок. Можно пример когда ExtensionInfo имеет размер 0 и показать скриншот что при этом он должен быть не 0?

Сохраняю сделки квика с комиссией в свою БД:

_trader.MyTradesTable.Columns.Add(DdeMyTradeColumns.Commission);
_trader.NewMyTrades += myTrades =>
{
    __log.InfoFormat("Мои сделки {0} появились:", myTrades.Count());
    var str = string.Empty;

    foreach (var myTrade in myTrades)
        str += "; " + myTrade.Trade.Id;

    if (!string.IsNullOrEmpty(str))
        __log.InfoFormat("  {0}", str.Substring(2));

    var sw = new Stopwatch();
    sw.Start();

    try
    {
        int savedCounter = 0;
        
        using (var session = SessionFactory.OpenSession())
        using (var tx = session.BeginTransaction())
        {
            var idsFromDb = session.QueryOver<RealTimeMyTrade>()
                .Select(t => t.Id)
                .List<long>();

            foreach (var myTrade in myTrades)
            {
                if (!idsFromDb.Contains(myTrade.Trade.Id))
                {
                    decimal signedVolume = 0;

                    if (myTrade.Order.Direction == OrderDirections.Buy)
                        signedVolume = myTrade.Trade.Volume;
                    else if (myTrade.Order.Direction == OrderDirections.Sell)
                        signedVolume = -myTrade.Trade.Volume;
                    else
                        throw new ArgumentOutOfRangeException();

                    var realTimeMyTrade = new RealTimeMyTrade()
                    {
                        Id = myTrade.Trade.Id,
                        DateTime = myTrade.Trade.Time,
                        Ticker = myTrade.Trade.Security.Code,
                        ClassCode = myTrade.Trade.Security.Class,
                        Price = myTrade.Trade.Price,
                        Volume = signedVolume,
                        OrderId = myTrade.Order.Id,
                        Comment = myTrade.Order.Comment,
                        ParsedComment = myTrade.Order.ParsedComment(),
                        Comission = myTrade.ExtensionInfo.Count > 0 ?
                                (decimal)myTrade.ExtensionInfo[DdeMyTradeColumns.Commission]
                                : 0,
                    };

                    if (realTimeMyTrade.DateTime > QuikSection.Default.MyTradesHistorySince)
                    {
                        session.Save(realTimeMyTrade);
                        savedCounter++;
                    }
                }
            }
            tx.Commit();
        }

        sw.Stop();
        if (savedCounter > 0)
            __log.InfoFormat("Мои сделки сохранено в базу {0} за {1}", savedCounter, sw.Elapsed);

    }
    catch (Exception ex)
    {
        __log.InfoFormat("Ошибка при сохранении quik сделок: {0}", ex);
        Model.IsTradingStarted = false;
        throw;
    }
};

К сообщению прикреплены скриншоты со сделками в квике и в моей БД

Alexander
Alexander

Что такое ParsedComment()? Это явно не наш метод.

По скриншоту вашей БД видно, что полетело как раз начиная с комментария.