TimeFrameCandle
Atom
5/9/2011


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

Code
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 запущен (Таблица всех сделок) , то

Code

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


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

Code

_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 неверно, и ничего вам не вернёт. Простейший способ - повесить на отдельную кнопку, ну или на событиях ждать...

Code

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


А вообще документация рулит.
http://www.stocksharp.co...e-9a56-4e9a001f0792.htm
Thanks:

Ilya Gruntal

Avatar
Date: 5/9/2011
Reply


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

Code

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

Thanks: hobo

Mikhail Sukhov

Avatar
Date: 5/9/2011
Reply


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


http://stocksharp.com/fo...66/sviechi-micex10index/
Thanks:

hobo

Avatar
Date: 5/9/2011
Reply


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

http://stocksharp.com/do...ndles_CandleManager.htm
В ваших советах GetTimeFrameCandles используется - такого метода вообще не вижу, получаю "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 Go to
По CandlesChanged - свечка приходит, но вот старые свечки получить бы.

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


Code
using Ecng.Trading.Algo;


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

hobo Go to

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


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

hobo

Avatar
Date: 5/10/2011
Reply


Mikhail Sukhov Go to
Code
using Ecng.Trading.Algo;


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


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


Code
_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 Go to

Сегодня вот такой поведение вижу: 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