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:
ODE0�
Вывода так и не увидел. Но по коду кое что понятно. Вы в событии новых свечек вызываете 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:
ODE0�
Запустил тест (переделав его, так как махинации со временем мне остались не понятны) и увидел следующее. Действительно, в логе свечки двоятся. Но они двоятся не из-за того, что метод 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:
Нет, у меня диапазон запрашивается один раз при запуске робота, свечки двоятся внутри одного диапазона.
Насколько я вижу по приведенному коду, диапазон конструируется не при запуске, а внутри события. Может выводить диапазон так же в лог?
|
|
|
|
Спасибо:
|
|
|
|
|