Объединение свечей из разных источников

Объединение свечей из разных источников
Atom
12/26/2011
pehas


Как можно объединить в одном токине СandleManager свечи из разных источников?
Пытаюсь объединить исторические свечи со свечами из шлюза таким образом
Code

            this._cm = new CandleManager(this._trader);

            // хранилище, через которое будет производиться доступ к тиковой и котировочной базе
            this.storage = new TradingStorage(new InMemoryStorage()){ BasePath = "Sec" };

            var builder = new CandleBuilder(new TradeStorageCandleBuilderSource(storage));
            this._cm.Sources.Add(builder);

            // Регистрируем свечи
            var candleToken = this._cm.RegisterTimeFrameCandles(security, this._timeFrame);

В итоге приходят только свечи из шлюза.
Если добавить
Code

builder.RegisterTimeFrameCandles(security, _timeFrame);

то в CandleManager придут все свечи и история и трейдер, но это будет два разных токена.

Tags:


Thanks:


1 2 3  >
Mikhail Sukhov

Avatar
Date: 12/26/2011
Reply


pehas

Если добавить
Code

builder.RegisterTimeFrameCandles(security, _timeFrame);

то в CandleManager придут все свечи и история и трейдер, но это будет два разных токена.


Вызывать только второй?
Thanks:

pehas

Avatar
Date: 12/26/2011
Reply


Mikhail Sukhov

Вызывать только второй?

Дело в том, что это нужно для корретной обработки индикатора на исторических данных. А он определяется через IndicatorManager, который принимает конкретный токен.
Code

this.ATRToken = indicatorManager.RegisterIndicator(new AverageTrueRange { Length = 20 }, new CandleTokenIndicatorSource(candleToken, BaseCandleIndicatorSource.ByClose));

Соответственно, если я буду брать только последний токен, индикатор не обработает свечи первого токена.
Thanks:

Mikhail Sukhov

Avatar
Date: 12/26/2011
Reply


А зачем два токена?
Thanks:

pehas

Avatar
Date: 12/26/2011
Reply


Mikhail Sukhov
А зачем два токена?

В этом как раз и фишка, что мне нужен только один, но я не знаю, как в него засунуть нужные мне свечи [confused]
У меня в гидре хранятся свечи за вчера. Я сегодня утром включаю квик и хочу чтобы индикаторы обработали вчерашние свечи взяв их из гидры и те, что уже успели появиться сегодня в квике.
Как получить все эти свечи в одном Токине, чтоб потом использовать в IndicatorManager?
Thanks:

freelancer

Avatar
Date: 12/26/2011
Reply


Я сделал так:
воспользовался экспортом произвольных таблиц из примеров. Но ! Новые свечки в той таблице у меня появляются с задержкой в 2 секунды. Поэтому оттуда не беру сегодняшние свечи, а беру их их по таблице всех сделок. А внутри стратегии просто складываю их в одну коллекцию и всё. Всё проходит очень быстро
Thanks:

pehas

Avatar
Date: 12/26/2011
Reply


freelancer
Я сделал так:
воспользовался экспортом произвольных таблиц из примеров. Но ! Новые свечки в той таблице у меня появляются с задержкой в 2 секунды. Поэтому оттуда не беру сегодняшние свечи, а беру их их по таблице всех сделок. А внутри стратегии просто складываю их в одну коллекцию и всё. Всё проходит очень быстро


Получается, что вы не работаете с индикаторами, по крайней мере не через IndicatorManager, верно? У меня все заточено под CandleManager. C него берут значения все индикаторы и в стратегии стоят правила на приход и обновление свечей по CandleManager. Поэтому просто использовать отдельную коллекцию не получится. А вот если ее положить каким-то образом в CandleManager, то возможно. Но, например, вот так невыходит
Code

CM.Container.AddCandles(candleToken, this.historyCandles);

События CandlesChanged, CandlesStarted для historyCandles (полученных из квика) не вызываются..
Thanks:

freelancer

Avatar
Date: 12/26/2011
Reply


Ну да. IndicatorManager у меня нет.
В OnStarting: соединяю свечи, потом:

foreach (Candle c in _candles)
Индикатор.Process(new StockSharp.Algo.Indicators.CandleIndicatorValue(c));

А в CandlesFinished прибавляю пришедшую свечу и еще раз Индикатор.Process(new StockSharp.Algo.Indicators.CandleIndicatorValue(пришедшая_свеча));

Как-то так
Thanks:

pehas

Avatar
Date: 12/26/2011
Reply


freelancer, cпасибо
Поидее, даже учитывая, что CandleManager будет содержать один набор свечек (только из трейдера), можно будет попробовать скормить исторические свечи квика индикаторам через process()
Правда, все же странно, что нельзя в S# объединить две группировки свечек..

Thanks:

russ

Avatar
Date: 2/14/2012
Reply


pehas
freelancer, cпасибо
Поидее, даже учитывая, что CandleManager будет содержать один набор свечек (только из трейдера), можно будет попробовать скормить исторические свечи квика индикаторам через process()
Правда, все же странно, что нельзя в S# объединить две группировки свечек..


Кстати действительно очень интересный и не понятный момент.
Допустим берем свечи из примера на QPILE как экспорт произвольных таблиц, там есть свечи за предыдущие и частично сегоднешний день, допустим робота запускаем в 12 часов.
Теперь регистрируем токен:
_tokenWorkingTF = _candleManager.RegisterTimeFrameCandles(_security, TimeSpan.FromMinutes(30));
сразу получаем несколько 30 минуток т.к. сессия уже идет, сразу вопрос всегда ли будут получаться только свечи сегодняшнего дня или нет?

Потом загружаем свечи из экспорта произвольных таблиц
List<Candle> candles = new List<Candle>();
foreach (QuikCandleFutDay qk in lst)
{
TimeFrameCandle cndl = new TimeFrameCandle
{
OpenPrice = qk.OpenPrice,
HighPrice = qk.HighPrice,
LowPrice = qk.LowPrice,
ClosePrice = qk.ClosePrice,
TimeFrame = (TimeSpan)token.Arg,
Time = DateTime.ParseExact(qk.DateTime.Date + qk.DateTime.Time, "yyyyMMddHHmmss", CultureInfo.InvariantCulture),
TotalVolume = qk.Volume,
Security = token.Security,
};
candles.Add(cndl);
}
_candleManager.Container.AddCandles(token, candles);

Соответственно в _candleManager будет полный бардак, сначала будут идти свечи части сегодняшнего дня, а потом будут идти свечи из экспорта.
Казалось бы можно сначала запихнуть свечи из экспорта, но это невозможно, т.к. нужно создать токен, а как только создается токен в него сразу загоняются свечи сегодняшнего дня.
Как решить эту проблему? Т.е. хотелось бы в _candleManager всунуть сначала свечи истории, а потом чтобы туда поступали свечи сегодняшнего дня.
Thanks:

Mikhail Sukhov

Avatar
Date: 2/14/2012
Reply


russ
Как решить эту проблему? Т.е. хотелось бы в _candleManager всунуть сначала свечи истории, а потом чтобы туда поступали свечи сегодняшнего дня.


См. 4.1 из дев ветки. Все сильно поменялось в плане свечек.
Thanks:
1 2 3  >

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

loading
clippy