Как можно объединить в одном токине СandleManager свечи из разных источников? Пытаюсь объединить исторические свечи со свечами из шлюза таким образом
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);
В итоге приходят только свечи из шлюза. Если добавить
builder.RegisterTimeFrameCandles(security, _timeFrame);
то в CandleManager придут все свечи и история и трейдер, но это будет два разных токена.
评论 (25)
登录 或 创建账户, 登录或注册以发表评论
builder.RegisterTimeFrameCandles(security, _timeFrame);
Соответственно, если я буду брать только последний токен, индикатор не обработает свечи первого токена.
А зачем два токена?
Я сделал так: воспользовался экспортом произвольных таблиц из примеров. Но ! Новые свечки в той таблице у меня появляются с задержкой в 2 секунды. Поэтому оттуда не беру сегодняшние свечи, а беру их их по таблице всех сделок. А внутри стратегии просто складываю их в одну коллекцию и всё. Всё проходит очень быстро
Получается, что вы не работаете с индикаторами, по крайней мере не через IndicatorManager, верно? У меня все заточено под CandleManager. C него берут значения все индикаторы и в стратегии стоят правила на приход и обновление свечей по CandleManager. Поэтому просто использовать отдельную коллекцию не получится. А вот если ее положить каким-то образом в CandleManager, то возможно. Но, например, вот так невыходит
События CandlesChanged, CandlesStarted для historyCandles (полученных из квика) не вызываются..
Ну да. IndicatorManager у меня нет. В OnStarting: соединяю свечи, потом:
foreach (Candle c in _candles) Индикатор.Process(new StockSharp.Algo.Indicators.CandleIndicatorValue(c));
А в CandlesFinished прибавляю пришедшую свечу и еще раз Индикатор.Process(new StockSharp.Algo.Indicators.CandleIndicatorValue(пришедшая_свеча));
Как-то так
freelancer, cпасибо Поидее, даже учитывая, что CandleManager будет содержать один набор свечек (только из трейдера), можно будет попробовать скормить исторические свечи квика индикаторам через process() Правда, все же странно, что нельзя в S# объединить две группировки свечек..
Потом загружаем свечи из экспорта произвольных таблиц 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 всунуть сначала свечи истории, а потом чтобы туда поступали свечи сегодняшнего дня.
См. 4.1 из дев ветки. Все сильно поменялось в плане свечек.
да
Заведите отдельную коллекцию для всех свечей
Поддерживаю.
Вопрос к разработчикам.
Во многих постах на форуме предлагаете переходить на 4.1 Но если нет справки то как изучать новую функциональность?
Пользоваться objectBrowser не совсем удобно. Или методом научного тыка на основе примеров? Может есть какой то прототип справки? Или если на codeplex в dev ветке, в файлах справки есть что почитать, то как эту справку собрать?
Справки нет только для свечек. Всё остальное не менялось.
Если используете свечки - то вкратце - CandleToken поменялся на CandleSeries
Спасибо вкратце, сделал свой контейнер, сделал свой график, нарисовал. Но хотелось использовать имеющиеся механизмы. Нет так нет.
вы о чём?
И я отвечал на ваши вопросы. В основном по Гидре. Поверьте, если бы не помощь по индикаторам, ответом было бы меньше, так как мы отвечаем только на вопросы, касающиеся багов.
Предлагаю взять паузу на выходные. Чувствую, неделя была у всех тяжелая... По свечкам - как выложим официально бету в паблик, так и доку обновим. Нет ни времени ни смысла каждому сейчас расказывать о том, как свечки устроены в новой версии, если можно за раз написать доку, и всех отправлять ее читать.
Если есть претензии по текущей доке, то надо их высказывать сейчас. Будем смотреть, исправлять. До этого вы ничего не писали про качество документации. Значит все было окей. Сейчас что-то изменилось?
Разбираюсь с 4.1 столкнулся с проблемой.
В 4.0
Два метода, один рисует свечки за сегодняшний день, другой - на основе истории.
Делаю по аналогии в 4.1
За текущий день отрисовывает, историю - нет. Данные от 4.0 переконвертировал в 4.1. Проверил в тесте на истории - нормально.
Что делаю не так? В чем причина?
Отвечу сам на свой вопрос. Для того чтобы отрисовались свечки, надо немного подождать.🙂
Время отрисовки свечек по RI за один день: В 4.0 10 сек. В 4.1 90 сек.
Также в 4.1 наблюдается странный глюк. Допустим есть данные за неделю 26-30 марта. Если выставить дату по которой нет данных, например 25 марта, то будет ошибка - очередь пуста, все правильно. Если выставить дату 30 марта, т.е. последний день существующих данных, то ошибки не будет, но и свечки по какой то причине не генерируются. Если выставить 29 марта, все нормально отрисуется.
Проверял данные в тесте на истории за этот же день(30 марта), все нормально.
В 4.0 такого не наблюдается.
Подгрузили историю, проверили кол-во значений/свечек в IndicatorManager.Container и CandleManager.Container Подгрузили сегодняшний день, проверили кол-во значений/свечек в IndicatorManager.Container и CandleManager.Container
При остановке series и смене построителя свечек, а затем повторном запуске этой же series свечки в СandleManager.Container за прошлый день не сохраняются. В IndicatorManager.Container прошлые значения сохраняются. Может сделать чтобы также было в СandleManager.Container?
Можно конечно сделать свой CandleManagerContainer и в него складывать свечки, но это не очень удобно.
Весь код, может кому пригодится.🙂