← Zurück

TimeFrameCandle

Добрый день. Версия - 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 🤬

War dieses Thema hilfreich?

Thema teilen

Kommentare (8)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Ilya Gruntal
Ilya Gruntal

Дорогой 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

Ilya Gruntal
Ilya Gruntal

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


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

hobo
Mikhail Sukhov
Mikhail Sukhov

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

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

hobo
hobo Autor

По 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 часов назад, график цены тоже самое показывает.

Mikhail Sukhov
Mikhail Sukhov

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 часов назад, график цены тоже самое показывает.

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

hobo
hobo Autor

Mikhail Sukhov: ...

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

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

_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 и т.д.

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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

hobo
hobo Autor

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