← Zurück

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (13)

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

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 Autor

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

Alexander
Alexander

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

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

vk37
vk37 Autor

Alexander:

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

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

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

Serg
Serg

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

Serg
Serg

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

vk37
vk37 Autor

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

Serg
Serg

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

Alexander
Alexander

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

vk37
vk37 Autor

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

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

vk37
vk37 Autor

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()? Это явно не наш метод.

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