ó ÐÏÍÏÝØÀ Ó×ÏÅÇÏ ÍÅÔÏÄÁ: 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 ÎÅ ÓÅÌÌ É ÎÅ ÂÁÊ - ÂÕÄÅÔ ÏËÏÛËÏ ×ÙÄÁ×ÁÔØ. ôÁË ÈÏÔØ ÍÏÖÎÏ ÂÕÄÅÔ ÐÏÎÑÔØ × ËÁËÏÍ ÉÍÅÎÎÏ ÍÅÓÔÅ ×ÏÚÎÉËÁÅÔ ÏÛÉÂËÁ, ÏÔÐÉÛÕÓØ.
Comentarios (15)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Что-то совсем плохие сервисы у гугла стали... Можешь написать русский текст отдельным сообщением?
ó ĐĎÍĎÝŘŔ Ó×ĎĹÇĎ ÍĹÔĎÄÁ: 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 ÎĹ ÓĹĚĚ É ÎĹ ÂÁĘ - ÂŐÄĹÔ ĎËĎŰËĎ ×ŮÄÁ×ÁÔŘ. ôÁË ČĎÔŘ ÍĎÖÎĎ ÂŐÄĹÔ ĐĎÎŃÔŘ × ËÁËĎÍ ÉÍ
äÁĚŘŰĹ ÔĹËÓÔ ĎÂŇŮ×ÁĹÔÓŃ =)
Андрей, Вы мега хацкер.
Александр, лучше сразу мониторить ProcessWellKnownDdeData и ждать там такие сделки. Если пустое направление - сразу записывать дде данные.
Такие результаты:
Без лога сложновато разораться... Еще такой вопрос. А эти сделки случаем не являются ли собственными (тиковая сделка, порожденная собственно)?
Нет, не являются. Они печатаются просто из MultiTrader.Trades, в первом сообщении скидывал кусок кода.
Куда лог добавить? Могу поэкспериментировать. хотя можем посмотреть как повлияет фикс в 2.3.1 который, как я понимаю, не будет в MultiTrader.Trades выдавать все сделки от 6 квиков, а только объединённые.
То, что сделка получается через MultiTrader.Trades еще не является гарантом того, что она не своя. Своя сделка - это объединение тиковой
Лог добавлять в QuikTrader, так как это его событие. А уже его в MultiTrader.
У меня сходная ситуация. Анализирую у QuikTrader все сделки: попадаются с trade.OrderDirection == null. По Id сделки выяснил, что это как раз мои сделки. Чтоб много букав не писать привожу примерный код:
В принципе, для меня это не критично, все остальное работает, но несколько не понятно: почему в таблице всех сделок Квика направление указано для всех сделок, а в _trader.Trades только для "чужих".
Потому что для MyTrade информация не берется из таблицы всех сделок. Вся необходимая информация есть в таблице Мои Сделки. А направления там нет.
Та сделка которую совершил мой робот попадает в обе таблицы Квика: "Все сделки" и "Мои сделки" со всей требуемой информацией. Затем эта сделка попадает в список _trader.Trades но почему-то уже без направления. Почему - не понятно. Я сначала подумал: может это ошибка какая-то? Но если это "by design" и так и должно быть, то ладно.
Только вот сканирования всех сделок на поиск направление не было сделано в целях оптимизации.
Потому что таблица с собственными сделками обновляется быстрее. QuikTrader смотрит, если ли для свой сделки такая же тиковая сделка. Если нет, то QuikTrader создает тиковую сделку исходя из данных в таблице мои сделки. А там направление как раз и нет.
Я бы сказал так - исторически сложившаяся бага.🙂 Я занес в баг трекинг ссылку на топик. Но пока не скоро смогу что-то придумать - есть баги приоритетнее.
Я бы предложил заполнять список QuikTrader.Trades только по данным ДДЕ из таблицы "Все сделки" Квика. Пытаться мудрить и комбинировать его с данными из таблицы "Мои сделки" - ИМХО только лишние взаимосвязи городить. Запутаться и без этих сложностей можно. Я, например, точно смогу 🙂
Спасибо Вам Михаил за библиотеку и ее поддержку!
Кстати, в то же время когда мой робот совершает сделку, может возникнуть и дублирующаяся свеча: 20110203,172300,191535,191535,191535,191535,3 20110203,172300,191600,191655,191505,191550,1113
20110203,172339,-1,191535,3
Предположу, что это связанные проблемы: заполнение Trades сделками из MyTrades и дублирующиеся свечи http://stocksharp.com/forum/1330/Niepravil-naia-vydacha-sviechiek-v-CandleManager-GetTimeFrameCandles/
Точно, как раз из-за этого. Собственная сделка приходит раньше, поэтому на какой-то момент формируется свечка раньше времени. Поэтому, я решил сделать то, как Вы предложили, и убить сразу 2-ух зайцев. Но тогда ITrader.Trades.Contains(myTrade.Trade) будет возвращать false, но я пока не вижу, когда это может быть полезно.
Не думаю, что это сильно помешает. Искать свою сделку можно, например, так: