Событие NewTrades

Событие NewTrades
Atom
3/30/2010
Tauler


Здравствуйте.
Скажите, а почему событие NewTrades возыращает IEnumerable? разве оно
не возникает при событии появления КАЖДОЙ сделки? Если нет, то как оно
возникает?
Заранее спаисибо.

Tags:


Thanks:


1 2 3  > >>
Tauler

Avatar
Date: 3/30/2010
Reply


И почему то не работает следующий код:

Security sec = TerminalProcessorHelper.Trader.Securities.Where(p =>
p.Code == tiker.Asset.Name).Last();
TerminalProcessorHelper.Trader.RegisterTrades(sec);
TerminalProcessorHelper.Trader.NewTrades += Trader_NewTrades;

void Trader_NewTrades(IEnumerable<Trade> obj)
{
TerminalProcessorLogger.Logger.Debug("new deals");
}

в метод Trader_NewTrades ни разу не заходит. эт оможет быть изза того,
что сделки по луку не идут?

Thanks:

Tauler

Avatar
Date: 3/30/2010
Reply


Посмотрел - есть сделки по луку, почему ж тогда событие не вызывается :
(

Thanks:

Tauler

Avatar
Date: 3/30/2010
Reply


Походу я нашел ответ - у мея DDE был запущен только для интсрументов
только - ой-ой-ой - мне в IEnumerable<Trade> obj выдало 16384 сделки
по всяким разным бумагам. как с этим бороться? мне нужн опо
конкретной, вот по этой :

Security sec = TerminalProcessorHelper.Trader.Securities.Where(p =>
p.Code == tiker.Asset.Name).Last();

я честно горя думал, что когда вызываю
TerminalProcessorHelper.Trader.RegisterTrades(sec);

этим указываю ,что именно эту бумагу мне нужно слушать. чтож он омне
все вываливает? :(

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


Квик шлет сделки пачками, как и другие шлюзы. Поэтому коллекция
сделок, а не одна.

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


QuikTrader.RegisterTrades не работает для Квика. Логика пусткая. Я
сделал это метод из-за того, что другие шлюзы как раз поддерживают
такой метод.
Что касается Квика, то фильт сделок настраивается из него, путем
редактирования таблицы и применения табличного фильтра. К сожалению
никак.

Thanks:

Tauler

Avatar
Date: 3/30/2010
Reply


тут интересный эксперимент провел. Есл ина таблице сделки поставлен
фильтр , и записей в ней относительно немного (до 100 000), то событие
начинает возникат ьименно в момент прихода сделки, и в коллекции
всегда 1 сделка. Но если в таблице сделок до хрена - например 150 или
800 тыщ (результат за весь денб), то квик почему т овначале начинает
выдавать сделки кусками по 16384 сделки, причем с какой то ему одному
важной даты, выдает таких пакетов N штук, потом "неполный пакет" -
например 8536 сделок, причем в этом неполном пакете последняя сделка с
датой/временем когда создался DDE канаал, а потом как обычн опо 1-й
сделке. Логику это поведения я так и не понял - так как
колво_пакетов_по_16384_сделок*16384 != колву записей в таблице, и
дата, от которой отбирает сделки для формирования этих пакетов != дате
первой сделке в таблице.

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


А как же

В сумме разве не дает?

Thanks:

Tauler

Avatar
Date: 3/30/2010
Reply


Неа. я вычислил время от кторой начинается вот это вываливание сделок
- 11:57:18 (если точно помню). причем - либ ос этой даты, либо от
вренмени ближе к вечеру - от 17 часов приблизительно, причем если это
не 11:57:18, то время варьрируется. Было бы понятно если бы квик
выдавал историю сделок за день, н оистория начинается то с 10.30, а не
с 11:57:18, и непонятно почему то с 11:57:18, т ос какой то
произвольного времени. загадка... Причем в Эксель квик честно вывалил
всю таблицу. И повторюсь - магия эта при большом колве записай в
таблице сделок - от 100 тысяч

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


Можете показать, как Вы эту дату нашли?

Thanks:

Tauler

Avatar
Date: 3/31/2010
Reply


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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ecng.Trading.BusinessEntities;

namespace TerminalProcessor
{
public class DealsAccumulator : AbstractDataAccumulator
{

protected internal DealsAccumulator(Tiker tiker)
: base(tiker)
{
Security sec =
TerminalProcessorHelper.Trader.Securities.Where(p => p.Code ==
tiker.Asset.Name).Last(); // тут в переменной sec получается лукойл
(LKOH)
TerminalProcessorHelper.Trader.RegisterTrades(sec);
TerminalProcessorHelper.Trader.NewTrades +=
Trader_NewTrades;

}

void Trader_NewTrades(IEnumerable<Trade> obj)
{
Trade trade = obj.FirstOrDefault();
TerminalProcessorLogger.Logger.Debug(obj.Count()+ " "
+ trade.Time);

}
}

Я лишнее убрал, оставил самое необходимое. Вся сагия происходит когда
в таблице сделок много записей. я тестил на настрйоках, когда в
таблицу сделок
выводятся все сделки, так же когда выводятся сделки из А1(Акции)

Thanks:
1 2 3  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy