Tauler
|
Дата: 30.03.2010
И почему то не работает следующий код:
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 ни разу не заходит. эт оможет быть изза того, что сделки по луку не идут?
|
|
Спасибо:
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
Посмотрел - есть сделки по луку, почему ж тогда событие не вызывается : (
|
|
Спасибо:
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
Походу я нашел ответ - у мея DDE был запущен только для интсрументов только - ой-ой-ой - мне в IEnumerable<Trade> obj выдало 16384 сделки по всяким разным бумагам. как с этим бороться? мне нужн опо конкретной, вот по этой :
Security sec = TerminalProcessorHelper.Trader.Securities.Where(p => p.Code == tiker.Asset.Name).Last();
я честно горя думал, что когда вызываю TerminalProcessorHelper.Trader.RegisterTrades(sec);
этим указываю ,что именно эту бумагу мне нужно слушать. чтож он омне все вываливает? :(
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2010
Квик шлет сделки пачками, как и другие шлюзы. Поэтому коллекция сделок, а не одна.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2010
QuikTrader.RegisterTrades не работает для Квика. Логика пусткая. Я сделал это метод из-за того, что другие шлюзы как раз поддерживают такой метод. Что касается Квика, то фильт сделок настраивается из него, путем редактирования таблицы и применения табличного фильтра. К сожалению никак.
|
|
Спасибо:
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
тут интересный эксперимент провел. Есл ина таблице сделки поставлен фильтр , и записей в ней относительно немного (до 100 000), то событие начинает возникат ьименно в момент прихода сделки, и в коллекции всегда 1 сделка. Но если в таблице сделок до хрена - например 150 или 800 тыщ (результат за весь денб), то квик почему т овначале начинает выдавать сделки кусками по 16384 сделки, причем с какой то ему одному важной даты, выдает таких пакетов N штук, потом "неполный пакет" - например 8536 сделок, причем в этом неполном пакете последняя сделка с датой/временем когда создался DDE канаал, а потом как обычн опо 1-й сделке. Логику это поведения я так и не понял - так как колво_пакетов_по_16384_сделок*16384 != колву записей в таблице, и дата, от которой отбирает сделки для формирования этих пакетов != дате первой сделке в таблице.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2010
А как же
В сумме разве не дает?
|
|
Спасибо:
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
Неа. я вычислил время от кторой начинается вот это вываливание сделок - 11:57:18 (если точно помню). причем - либ ос этой даты, либо от вренмени ближе к вечеру - от 17 часов приблизительно, причем если это не 11:57:18, то время варьрируется. Было бы понятно если бы квик выдавал историю сделок за день, н оистория начинается то с 10.30, а не с 11:57:18, и непонятно почему то с 11:57:18, т ос какой то произвольного времени. загадка... Причем в Эксель квик честно вывалил всю таблицу. И повторюсь - магия эта при большом колве записай в таблице сделок - от 100 тысяч
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2010
Можете показать, как Вы эту дату нашли?
|
|
Спасибо:
|
|
|
|
|
Tauler
|
Дата: 31.03.2010
Так я ее не сам нашел, эт мне так логгер показывает.Собственно весь код:
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(Акции)
|
|
Спасибо:
|
|
|
|