TimeFrameCandle
Atom
5/9/2011
hobo


Добрый день. Версия - 3.0.19. Как получить 2 последние пятиминутные свечи?

var candleTimeFrame = TimeSpan.FromMinutes(5);

_candleManager = new CandleManager(_trader);
CandleToken token = _candleManager.RegisterCandles<TimeFrameCandle, TimeSpan>(_secur, candleTimeFrame);

var candles1 = _candleManager.GetTimeFrameCandle(_secur, candleTimeFrame, DateTime.Now - TimeSpan.FromDays(2));
var candles2 = _candleManager.GetTimeFrameCandle(_secur, candleTimeFrame, DateTime.Now);

В аргумент "период" (который DateTime вроде) что только не пробовал подставить - безрезультатно. В частности candles1 и candles2 - null [cursing]


Tags:


Thanks:


Ilya Gruntal

Avatar
Date: 5/9/2011
Reply


Дорогой hobo! Если экспорт по DDE запущен (Таблица всех сделок) , то


_candleManager = new CandleManager(_trader);
_candleManager.RegisterTimeFrameCandles(_secur, TimeSpan.FromMinutes(5));

Здесь вы говорите менеджеру свечек собирать свечки по пятиминуткам. Но поскольку вы сделали это только-только по коду, то свечки ещё не сформированы, процесс только запущен. Дальше есть два варианта (как минимум). Первый это подписаться на события формирования свечек.


_candleManager.NewCandles += DrawCandles;
_candleManager.CandlesChanged += DrawCandles;

private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
{
   foreach (var candle in candles)
      {
         //candle <- свечка
      }
}

Второй вариант, это вызывать GetTimeFrameCandles, кстати рекоммендую скачать версию 3.1.19 S# (обещали на выходных выпустить). Но, эсли использовать этот метод, то вам нужно дождаться пока CandleManager сформирует все свечи внутри этого таймфрайма по таблице сделок, и поскольку это не мгновенный процесс, то вызывать GetTimeFrameCandles сразу после RegisterTimeframe неверно, и ничего вам не вернёт. Простейший способ - повесить на отдельную кнопку, ну или на событиях ждать...


/ получить 100 свечек-пятиминуток
var candles = _candleManager.GetTimeFrameCandles(_secur, TimeSpan.FromMinutes(5), 100);
   foreach (var candle in candles)
      {
         //candle <- свечка
      }

А вообще документация рулит. http://www.stocksharp.com/doc/help/html/cd52cfcf-938c-4fce-9a56-4e9a001f0792.htm

Thanks:

Ilya Gruntal

Avatar
Date: 5/9/2011
Reply


hobo: Добрый день. Версия - 3.0.19. Как получить 2 последние пятиминутные свечи? ... [cursing]


var candles = _candleManager.GetTimeFrameCandles(_secur, TimeSpan.FromMinutes(5), 2);

Thanks: hobo

Mikhail Sukhov

Avatar
Date: 5/9/2011
Reply


hobo: В аргумент "период" (который DateTime вроде) что только не пробовал подставить - безрезультатно. В частности candles1 и candles2 - null [cursing]

http://stocksharp.com/forum/1566/sviechi-micex10index/

Thanks:

hobo

Avatar
Date: 5/9/2011
Reply


По CandlesChanged - свечка приходит, но вот старые свечки получить бы.

http://stocksharp.com/doc/help/html/AllMembers_T_Ecng_Trading_Algo_Candles_CandleManager.htm В ваших советах GetTimeFrameCandle: используется - такого метода вообще не вижу, получаю "Ecng.Trading.Algo.Candles.CandleManager' does not contain a definition for 'GetTimeFrameCandles'. А вот GetTimeFrameCandle хочет DateTime, как третий аргумент.

Подписался на CandlesFinished - пришло 7 свечей. Почему именно 7 не знаю. В таблице "все сделки", первая сделка - 12 часов назад, график цены тоже самое показывает.

Thanks:

Mikhail Sukhov

Avatar
Date: 5/9/2011
Reply


hobo: По CandlesChanged - свечка приходит, но вот старые свечки получить бы.

http://stocksharp.com/doc/help/html/AllMembers_T_Ecng_Trading_Algo_Candles_CandleManager.htm В ваших советах GetTimeFrameCandle: используется - такого метода вообще не вижу, получаю "Ecng.Trading.Algo.Candles.CandleManager' does not contain a definition for 'GetTimeFrameCandles'. А вот GetTimeFrameCandle хочет DateTime, как третий аргумент.

using Ecng.Trading.Algo;

По хорошему, такие вещи лучше начинать с изучения примеров.

hobo: Подписался на CandlesFinished - пришло 7 свечей. Почему именно 7 не знаю. В таблице "все сделки", первая сделка - 12 часов назад, график цены тоже самое показывает.

Чуть больше деталей.

Thanks:

hobo

Avatar
Date: 5/10/2011
Reply


Mikhail Sukhov: ODE0�

Да уж, не догадался.

Чуть больше деталей.

_candleManager = new CandleManager(_trader);
var _candleTimeFrame = TimeSpan.FromMinutes(5);
CandleToken token = _candleManager.RegisterCandles<TimeFrameCandle, TimeSpan>(_secur, _candleTimeFrame);
_candleManager.CandlesFinished += GetOldCandles;   


private void GetOldCandles(CandleToken token, IEnumerable<Candle> candles)
{
    var candles2 = _candleManager.GetTimeFrameCandles(_secur, TimeSpan.FromMinutes(5), 25);
}

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

  • Пришло 11 свечей, 16.55-17.45
  • Пришло 12 свечей, нулевая = 17.50, остальные те же самые 11 свечек.
  • Пришло 11 свечей, 17.50-18.40 и т.д.

Это ожидаемое поведение? Нужно дожидаться, пока нужное количество не сформируется?

Thanks:

Mikhail Sukhov

Avatar
Date: 5/10/2011
Reply


hobo: Сегодня вот такой поведение вижу: CandlesFinished срабатывает несколько раз, в candles свечи приходят порциями (7-16 по моим наблюдениям). Пробовал несколько раз, в последний раз получилось так (в порядке срабатывания события)

  • Пришло 11 свечей, 16.55-17.45
  • Пришло 12 свечей, нулевая = 17.50, остальные те же самые 11 свечек.
  • Пришло 11 свечей, 17.50-18.40 и т.д.

Это ожидаемое поведение? Нужно дожидаться, пока нужное количество не сформируется?

У вас Квик? Тогда да, ожидаемое. Квик сделки транслирует с самого начала сессии. Поэтому и свечки отдаются в начале пачками. Потом такое быть не должно. Если у вас так, то пришлите лог, где будет вижно, за какой период пришли свечки + отметку во времени на компьютере.

Thanks: hobo

hobo

Avatar
Date: 5/11/2011
Reply


Потом по одной появляются, в листбокс выводил. Всем спасибо!

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy