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 obj)
{
TerminalProcessorLogger.Logger.Debug("new deals");
}
в метод Trader_NewTrades ни разу не заходит. эт оможет быть изза того,
что сделки по луку не идут?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
Посмотрел - есть сделки по луку, почему ж тогда событие не вызывается :
(
|
|
|
|
Спасибо:
|
|
|
|
|
|
Tauler
|
Дата: 30.03.2010
Походу я нашел ответ - у мея DDE был запущен только для интсрументов
только - ой-ой-ой - мне в IEnumerable 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()+ " "
Я лишнее убрал, оставил самое необходимое. Вся сагия происходит когда
в таблице сделок много записей. я тестил на настрйоках, когда в
таблицу сделок
выводятся все сделки, так же когда выводятся сделки из А1(Акции)
|
|
|
|
Спасибо:
|
|
|
|
|