Не проставляется OrderDirection в сделке
Atom Ответить
25.08.2010


ó ÐÏÍÏÝØÀ Ó×ÏÅÇÏ ÍÅÔÏÄÁ:
if (_multiTrader.Trades.Count() > 0)
{
if (!Directory.Exists("MarketData"))
{
Directory.CreateDirectory("MarketData");
}
var allTradesSw = new StreamWriter("MarketData\\{0}_{1:00}_{2:00}
_AllTrades.log".Put(_multiTrader.Trades.Last().Time.Year,
_multiTrader.Trades.Last().Time.Month,
_multiTrader.Trades.Last().Time.Day), false);
foreach (var trade in _multiTrader.Trades)
{
allTradesSw.WriteLine("{0} - {1} - {2} - {3}",
trade.Time,
trade.Price,
trade.Volume,
trade.OrderDirection);
}
allTradesSw.Close();
}

ðÅÞÁÔÁÀ ×ÓÅ ÓÄÅÌËÉ (ÌÅÎÔÕ) ÚÁ ÄÅÎØ. òÅÄËÏ, ÎÏ ÐÏÒÏÊ ÐÏÐÁÄÁÀÔÓÑ ÓÄÅÌËÉ
ÂÅÚ ÐÒÏÓÔÁ×ÌÅÎÎÏÇÏ ÐÏÌÑ OrderDirection. ôÏÌÉ ÜÔÏ ÎÅ×ÅÒÎÏ ÒÁÂÏÔÁÅÔ
ÐÅÞÁÔØ, ÔÏ ÌÉ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÞÔÏ-ÔÏ ÎÅ ÐÒÏÓÔÁ×ÌÑÅÔÓÑ (× Ë×ÉËÅ Õ ÄÁÎÎÙÈ
ÓÄÅÌÏË ÎÁÐÒÁ×ÌÅÎÉÅ ÐÒÏÓÔÁ×ÌÅÎÏ). ÷ÏÔ ÐÒÉÍÅÒ ÉÚ ÆÁÊÌÁ ÓÏ ×ÓÅÍÉ
ÓÄÅÌËÁÍÉ:

24.08.2010 23:45:01 - 138895 - 1 - Sell
24.08.2010 23:45:01 - 138890 - 1 - Sell
24.08.2010 23:45:01 - 138925 - 2 -
24.08.2010 23:45:01 - 138930 - 1 - Buy
24.08.2010 23:45:01 - 138930 - 3 - Buy
24.08.2010 23:45:01 - 138935 - 3 - Buy
24.08.2010 23:45:01 - 138935 - 2 - Buy
24.08.2010 23:45:01 - 138935 - 1 - Buy
24.08.2010 23:45:01 - 138940 - 3 - Buy
24.08.2010 23:45:02 - 138910 - 1 - Sell
24.08.2010 23:45:02 - 138935 - 2 -
24.08.2010 23:45:02 - 138935 - 1 -
24.08.2010 23:45:02 - 138930 - 2 - Buy
24.08.2010 23:45:02 - 138935 - 1 - Buy

úÁ×ÔÒÁ ×ÅÞÅÒÏÍ, ÅÓÌÉ OrderDirection ÎÅ ÓÅÌÌ É ÎÅ ÂÁÊ - ÂÕÄÅÔ ÏËÏÛËÏ
×ÙÄÁ×ÁÔØ. ôÁË ÈÏÔØ ÍÏÖÎÏ ÂÕÄÅÔ ÐÏÎÑÔØ × ËÁËÏÍ ÉÍÅÎÎÏ ÍÅÓÔÅ ×ÏÚÎÉËÁÅÔ
ÏÛÉÂËÁ, ÏÔÐÉÛÕÓØ.

Теги:


Спасибо:




15 Ответов
Mikhail Sukhov

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


Что-то совсем плохие сервисы у гугла стали... Можешь написать русский
текст отдельным сообщением?
Спасибо:

Иванов Андрей

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


ó ĐĎÍĎÝŘŔ Ó×ĎĹÇĎ ÍĹÔĎÄÁ:
if (_multiTrader.Trades.Count() > 0)
{
if (!Directory.Exists("MarketData"))
{
Directory.CreateDirectory("MarketData");
}
var allTradesSw = new StreamWriter("MarketData\\{0}_{1:00}_{2:00}
_AllTrades.log".Put(_multiTrader.Trades.Last().Time.Year,
_multiTrader.Trades.Last().Time.Month,
_multiTrader.Trades.Last().Time.Day), false);
foreach (var trade in _multiTrader.Trades)
{
allTradesSw.WriteLine("{0} - {1} - {2} - {3}",
trade.Time,
trade.Price,
trade.Volume,
trade.OrderDirection);
}
allTradesSw.Close();
}

đĹŢÁÔÁŔ ×ÓĹ ÓÄĹĚËÉ (ĚĹÎÔŐ) ÚÁ ÄĹÎŘ. ňĹÄËĎ, ÎĎ ĐĎŇĎĘ ĐĎĐÁÄÁŔÔÓŃ ÓÄĹĚËÉ
ÂĹÚ ĐŇĎÓÔÁ×ĚĹÎÎĎÇĎ ĐĎĚŃ OrderDirection. ôĎĚÉ ÜÔĎ ÎĹ×ĹŇÎĎ ŇÁÂĎÔÁĹÔ
ĐĹŢÁÔŘ, ÔĎ ĚÉ ÄĹĘÓÔ×ÉÔĹĚŘÎĎ ŢÔĎ-ÔĎ ÎĹ ĐŇĎÓÔÁ×ĚŃĹÔÓŃ (× Ë×ÉËĹ Ő ÄÁÎÎŮČ
ÓÄĹĚĎË ÎÁĐŇÁ×ĚĹÎÉĹ ĐŇĎÓÔÁ×ĚĹÎĎ). ÷ĎÔ ĐŇÉÍĹŇ ÉÚ ĆÁĘĚÁ ÓĎ ×ÓĹÍÉ
ÓÄĹĚËÁÍÉ:

24.08.2010 23:45:01 - 138895 - 1 - Sell
24.08.2010 23:45:01 - 138890 - 1 - Sell
24.08.2010 23:45:01 - 138925 - 2 -
24.08.2010 23:45:01 - 138930 - 1 - Buy
24.08.2010 23:45:01 - 138930 - 3 - Buy
24.08.2010 23:45:01 - 138935 - 3 - Buy
24.08.2010 23:45:01 - 138935 - 2 - Buy
24.08.2010 23:45:01 - 138935 - 1 - Buy
24.08.2010 23:45:01 - 138940 - 3 - Buy
24.08.2010 23:45:02 - 138910 - 1 - Sell
24.08.2010 23:45:02 - 138935 - 2 -
24.08.2010 23:45:02 - 138935 - 1 -
24.08.2010 23:45:02 - 138930 - 2 - Buy
24.08.2010 23:45:02 - 138935 - 1 - Buy

úÁ×ÔŇÁ ×ĹŢĹŇĎÍ, ĹÓĚÉ OrderDirection ÎĹ ÓĹĚĚ É ÎĹ ÂÁĘ - ÂŐÄĹÔ ĎËĎŰËĎ
×ŮÄÁ×ÁÔŘ. ôÁË ČĎÔŘ ÍĎÖÎĎ ÂŐÄĹÔ ĐĎÎŃÔŘ × ËÁËĎÍ ÉÍ

äÁĚŘŰĹ ÔĹËÓÔ ĎÂŇŮ×ÁĹÔÓŃ =)

Спасибо:

Mikhail Sukhov

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


Андрей, Вы мега хацкер.

Александр, лучше сразу мониторить ProcessWellKnownDdeData и ждать там
такие сделки. Если пустое направление - сразу записывать дде данные.

Спасибо:

Alexander

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


Такие результаты:
1) На локальном компьютере (с 1м квиком) - OrderDirection проставлен
везде
2) На сервере (5 квиков) - довольно много сделок где OrderDirection
нет, т.е. null. :(

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

Mikhail Sukhov

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


Без лога сложновато разораться... Еще такой вопрос. А эти сделки
случаем не являются ли собственными (тиковая сделка, порожденная
собственно)?

Спасибо:

Alexander

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


Нет, не являются.
Они печатаются просто из MultiTrader.Trades, в первом сообщении
скидывал кусок кода.

Куда лог добавить? Могу поэкспериментировать. хотя можем посмотреть
как повлияет фикс в 2.3.1 который, как я понимаю, не будет в
MultiTrader.Trades выдавать все сделки от 6 квиков, а только
объединённые.

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

Mikhail Sukhov

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


То, что сделка получается через MultiTrader.Trades еще не является
гарантом того, что она не своя. Своя сделка - это объединение тиковой
+ номер заявки.

Лог добавлять в QuikTrader, так как это его событие. А уже его в
MultiTrader.

Спасибо:

aerv

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


У меня сходная ситуация.
Анализирую у QuikTrader все сделки: попадаются с trade.OrderDirection == null.
По Id сделки выяснил, что это как раз мои сделки. Чтоб много букав не писать привожу примерный код:
Код

_trader = new QuikTrader(_quikPath);
_trader.Terminal.StartDde(_trader.TradesTable,
_trader.MyTradesTable,
_trader.EquityPositionsTable,
_trader.DerivativePositionsTable,
_trader.SecuritiesTable);
//..
var trades = _trader.Trades.Where(trade => trade.Security.Code == _secCode);
foreach (Trade trade in trades) {
if (!trade.OrderDirection.HasValue)
;// Опа! И сюда заходит
}

В принципе, для меня это не критично, все остальное работает, но несколько не понятно: почему в таблице всех сделок Квика направление указано для всех сделок, а в _trader.Trades только для "чужих".
Спасибо:

Mikhail Sukhov

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


aerv Перейти

В принципе, для меня это не критично, все остальное работает, но несколько не понятно: почему в таблице всех сделок Квика направление указано для всех сделок, а в _trader.Trades только для "чужих".


Потому что для MyTrade информация не берется из таблицы всех сделок. Вся необходимая информация есть в таблице Мои Сделки. А направления там нет.
Спасибо:

aerv

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


Та сделка которую совершил мой робот попадает в обе таблицы Квика: "Все сделки" и "Мои сделки" со всей требуемой информацией.
Затем эта сделка попадает в список _trader.Trades но почему-то уже без направления.
Почему - не понятно.
Я сначала подумал: может это ошибка какая-то? Но если это "by design" и так и должно быть, то ладно.
Спасибо:

Mikhail Sukhov

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


aerv Перейти
Та сделка которую совершил мой робот попадает в обе таблицы Квика: "Все сделки" и "Мои сделки" со всей требуемой информацией.


Только вот сканирования всех сделок на поиск направление не было сделано в целях оптимизации.

aerv Перейти

Затем эта сделка попадает в список _trader.Trades но почему-то уже без направления.
Почему - не понятно.


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

aerv Перейти

Я сначала подумал: может это ошибка какая-то? Но если это "by design" и так и должно быть, то ладно.


Я бы сказал так - исторически сложившаяся бага.Smile Я занес в баг трекинг ссылку на топик. Но пока не скоро смогу что-то придумать - есть баги приоритетнее.
Спасибо:

aerv

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


Mikhail Sukhov Перейти
aerv Перейти
Та сделка которую совершил мой робот попадает в обе таблицы Квика: "Все сделки" и "Мои сделки" со всей требуемой информацией.
Затем эта сделка попадает в список _trader.Trades но почему-то уже без направления.
Почему - не понятно.


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

Я бы сказал так - исторически сложившаяся бага.Smile Я занес в баг трекинг ссылку на топик. Но пока не скоро смогу что-то придумать - есть баги приоритетнее.


Я бы предложил заполнять список QuikTrader.Trades только по данным ДДЕ из таблицы "Все сделки" Квика.
Пытаться мудрить и комбинировать его с данными из таблицы "Мои сделки" - ИМХО только лишние взаимосвязи городить. Запутаться и без этих сложностей можно. Я, например, точно смогу Smile

Спасибо Вам Михаил за библиотеку и ее поддержку!
Спасибо:

aerv

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


Кстати, в то же время когда мой робот совершает сделку, может возникнуть и дублирующаяся свеча:
20110203,172300,191535,191535,191535,191535,3
20110203,172300,191600,191655,191505,191550,1113
- это свечи, полученные _candleManager.GetTimeFrameCandles(...): дата, время, цены, объем.
"3" - как раз объем моей сделки.

20110203,172339,-1,191535,3
- это из списка всех сделок, полученных из QuikTrader.Trades.
"-1" - это нет направления.

Предположу, что это связанные проблемы:
заполнение Trades сделками из MyTrades
и дублирующиеся свечи https://stocksharp.ru/forum/133...ger-GetTimeFrameCandles/
Спасибо:

Mikhail Sukhov

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


aerv Перейти
Предположу, что это связанные проблемы:
заполнение Trades сделками из MyTrades
и дублирующиеся свечи https://stocksharp.ru/forum/133...ger-GetTimeFrameCandles/


Точно, как раз из-за этого. Собственная сделка приходит раньше, поэтому на какой-то момент формируется свечка раньше времени. Поэтому, я решил сделать то, как Вы предложили, и убить сразу 2-ух зайцев. Но тогда ITrader.Trades.Contains(myTrade.Trade) будет возвращать false, но я пока не вижу, когда это может быть полезно.
Спасибо:

aerv

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


Mikhail Sukhov Перейти
Но тогда ITrader.Trades.Contains(myTrade.Trade) будет возвращать false, но я пока не вижу, когда это может быть полезно.


Не думаю, что это сильно помешает. Искать свою сделку можно, например, так:
Код

_trader.Trades.Contains(myTrade.Trade, new TradeByIdComparer());
// Или так
int index = Array.BinarySearch(_trader.Trades.ToArray(), myTrade.Trade, new TradeByIdComparer());

// Где-то в другом месте
class TradeByIdComparer : IComparer<Trade>, IEqualityComparer<Trade> {
public int Compare(Trade t1, Trade t2) { return (int) (t1.Id - t2.Id); }
public bool Equals(Trade t1, Trade t2) { return t1.Id == t2.Id; }
public int GetHashCode(Trade obj) { return obj.Id.GetHashCode(); }
}
Спасибо:


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

loading
clippy