Mikhail Sukhov
|
Дата: 21.01.2011
Alter Вызываю метод, он выдает все минутные свечки за день, и среди них попадаются пары с одинаковым временем (формат time O H L C V): 12:57:00 187035 187035 187035 187035 1 12:57:00 187025 187125 187020 187125 744
Приведите код, как именно выводите.
|
|
Спасибо:
|
|
|
|
|
Alter
|
Дата: 21.01.2011
Код private void CandleManager_NewCandles(CandleToken token, IEnumerable<Candle> candles) { if (candles.Last().Time >= WorkingSecurity.LastTrade.Time.TruncateSeconds()) { DateTime start = WorkingQuote.Count > 0 ? WorkingQuote[0].DateAndTime : DateTime.Today; DateTime end = candles.Last().Time; var newCandles = CandleManager.GetTimeFrameCandles(WorkingSecurity, Timeframe, new Range<DateTime>(start, end)); ... } ... }
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 21.01.2011
Alter Код private void CandleManager_NewCandles(CandleToken token, IEnumerable<Candle> candles) { if (candles.Last().Time >= WorkingSecurity.LastTrade.Time.TruncateSeconds()) { DateTime start = WorkingQuote.Count > 0 ? WorkingQuote[0].DateAndTime : DateTime.Today; DateTime end = candles.Last().Time; var newCandles = CandleManager.GetTimeFrameCandles(WorkingSecurity, Timeframe, new Range<DateTime>(start, end)); ... } ... }
Вывода так и не увидел. Но по коду кое что понятно. Вы в событии новых свечек вызываете CandleManager.GetTimeFrameCandles (получение диапазона). Вполне может быть так, что по Вашему диапазону будет получено более одной свечки.
|
|
Спасибо:
|
|
|
|
|
Alter
|
Дата: 21.01.2011
Вывод - это далее foreach (var candle in newCandles) {...}. Понятно, что по моему диапазону может быть более одной свечки =) Непонятно, почему у некоторых из них одинаковое значение candle.Time.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 21.01.2011
Alter Вывод - это далее foreach (var candle in newCandles) {...}. Понятно, что по моему диапазону может быть более одной свечки =) Непонятно, почему у некоторых из них одинаковое значение candle.Time. Да, слона я не увидел... Чтобы точно все определить, можете полностью привести код вывода в лог.
|
|
Спасибо:
|
|
|
|
|
Alter
|
Дата: 21.01.2011
|
|
|
|
Код foreach (var candle in newCandles) { Logger.Log.Info("*** {0} {1} {2} {3} {4} {5}", candle.Time, candle.OpenPrice, candle.HighPrice, candle.LowPrice, candle.ClosePrice, candle.TotalVolume); WorkingQuote.Add(CandleToBar(candle)); }
Лог получается такой: Код 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:46:00 187050 187070 186960 186970 3001 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:47:00 186970 186970 186970 186970 1 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:47:00 186970 187105 186965 187050 1510 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:48:00 187050 187110 187015 187070 703 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:49:00 187080 187225 187075 187190 2387 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:50:00 187185 187200 187100 187115 1204 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:51:00 187130 187155 187095 187135 973 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:52:00 187135 187175 187120 187145 355 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:53:00 187140 187165 187110 187110 262 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:54:00 187110 187185 187085 187175 1376 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:55:00 187180 187185 187120 187120 444 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:56:00 187120 187135 187005 187020 2016 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:57:00 187035 187035 187035 187035 1 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:57:00 187025 187125 187020 187125 744 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:58:00 187105 187195 187080 187190 1234 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:59:00 187190 187190 187190 187190 1 01/20/2011 23:19:21 [10] - *** 20.01.2011 12:59:00 187190 187200 187100 187135 671 01/20/2011 23:19:21 [10] - *** 20.01.2011 13:00:00 187135 187165 187095 187155 810 01/20/2011 23:19:21 [10] - *** 20.01.2011 13:01:00 187165 187195 187095 187150 1016
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 27.01.2011
Alter Код private void CandleManager_NewCandles(CandleToken token, IEnumerable<Candle> candles) { if (candles.Last().Time >= WorkingSecurity.LastTrade.Time.TruncateSeconds()) { DateTime start = WorkingQuote.Count > 0 ? WorkingQuote[0].DateAndTime : DateTime.Today; DateTime end = candles.Last().Time; var newCandles = CandleManager.GetTimeFrameCandles(WorkingSecurity, Timeframe, new Range<DateTime>(start, end)); ... } ... }
Запустил тест (переделав его, так как махинации со временем мне остались не понятны) и увидел следующее. Действительно, в логе свечки двоятся. Но они двоятся не из-за того, что метод GetTimeFrameCandles возвращает два раза одну и ту же свечку, а из-за передаваемого диапазона. Последняя запрашиваемая свечка из предыдущего диапазона была равна первой из следующего. Если у Вас так же, то в этом и причина.
|
|
Спасибо:
|
|
|
|
|
Alter
|
Дата: 27.01.2011
Нет, у меня диапазон запрашивается один раз при запуске робота, свечки двоятся внутри одного диапазона.
|
|
Спасибо:
|
|
|
|
|
Alter
|
Дата: 27.01.2011
Еще одно наблюдение. Сравниваю свечки, полученные через S# c загруженными с финама. Иногда попадается следующее: КодФинам: 20110127,155600,190065,190110,190015,190015,509 20110127,155700,190020,190030,189900,189955,2031
S#: 20110127,155600,190065,190110,190015,190020,511 20110127,155700,190025,190030,189900,189955,2029 То есть 2 сделки из свечки 15:57 записались в свечку 15:56, как видно по объему и ценам. У вас такое не воспроизводится?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 28.01.2011
Alter Нет, у меня диапазон запрашивается один раз при запуске робота, свечки двоятся внутри одного диапазона. Насколько я вижу по приведенному коду, диапазон конструируется не при запуске, а внутри события. Может выводить диапазон так же в лог?
|
|
Спасибо:
|
|
|
|