Событие NewTrades
Atom Ответить
30.03.2010


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

Теги:


Спасибо:




35 Ответов
1 2  >
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(Акции)

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.03.2010
Ответить


А если сделать так:

obj.OrderBy(o => o.Id).FirstOrDefault()

Спасибо:

Tauler

Фотография
Дата: 31.03.2010
Ответить


А толку? в обработчик события все равн онепонятно почему приходят
пакеты сделок, бывших ранее. Вопрос - почему? Событие то - появление
НОВОЙ сделки. и на таблицах с небольшим колвом-записей оно так и
работает. Просто непоняно - почему и в зависимости от каких условий
вначале вываливаются вот такие пакеты, а потом идет уже честное
появление сделок по одной.

Автор топика
Спасибо:

Tauler

Фотография
Дата: 31.03.2010
Ответить


Или Вы имеете ввиду в выводе лога так сделать?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.03.2010
Ответить


В выводе лога.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.03.2010
Ответить


Они всегда новые. Можете для проверки завести Dictionary<long, Trade>
и через Add добавлять пришедшие сделки. Если не будет исключения -
значит приходят только уникальные.

Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Как же новые, если я вечером запускаю а сделки приходят со временем 11
утра :)

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.04.2010
Ответить


Насчет 11 утра. Я думаю, если сделать так: obj.OrderBy(o =>
o.Id).FirstOrDefault(), то сделки начнут приходить с 1030. В таблице в
квике они с 1030?

Когда стартуется ДДЕ экспорт, то подгружаются все сделки, которые есть
на данный момент в таблице. И загрузка идет непрерывно. Появляются
новые - срабатывает событие. Отсюда и ситуация, когда первые сделки
идут большими пачками, а затем, когда уже идет загрузка сделок,
появляющиеся в настоящий момент, то и будут от 1-ой до нескольких
(смотря, какой ликвидности инструменты).

Насчет новые. Имеется ввиду, что одна и так же сделка будет передана
через событие NewTrades только один раз - не более. Даже если
перезапускать экспорт.

Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Хм. Подгружаются вот только они не всегда, а только тогда, когда в
таблице много записей.
Если записей не мног она момент запуска програмы - стразу фигачатся
сделки по одной по мере поступления их в квик, а есл имного - то
вначале вываливаются пачками до момента запуска программы, а потом уже
по одной.

Автор топика
Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Я правда не пойму - почему в оперделенных случаях в событие NewTrades
вываливаются вначале все сделки, а потом уже новые, а в каких то -
только новые сделки. вот не пойму и все :)

Автор топика
Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Сделал я Order. нифига не с 10.30, три каждом запуске - разное время
из середины дня.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.04.2010
Ответить


Сложно ответить - никогда такое не происходило. Всегда экспортируются
все сделки, которые есть в таблице (новые, не новые - не важно).
Попробуйте найти закономерность.

Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Я уже обыскался :) Закономерность пока такая - старые пачками
вываливаются . есл ив таблице сделок больше 100 записей.
а вот время, с кторого сделки ываливаются - разное

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.04.2010
Ответить


А у вас в таблице всех сделок, если посмотреть в Квике, сделки с 1030
идут?

Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


Неа, вообще чуть не со вчерашнего дня. первая 19:00:00

Автор топика
Спасибо:

Tauler

Фотография
Дата: 01.04.2010
Ответить


А лог выдал дату 01.04.2010 14:20:21
кодя для лога
TerminalProcessorLogger.Logger.Debug(obj.OrderBy(o
=>o.Id).FirstOrDefault().Time);

Автор топика
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy