← Zurück

Как добавить новый тип свечей?

Не получается у меня методом тыка это сделать (

Задача такая, использую RangeCandle 100 на пунктов: Хочу к примеру изменить RangeCandle - сделать чтобы максимальная дискретность свечи была секунда - т.е. если кто-то ударит по рынку на 500п, то я хочу увидеть одну свечу на 500пп вместо пяти свечей по 100п - всё равно в промежутке между ними войти в маркет невозможно.

Попытка 1.


  class RangeDelayCandleFactory : RangeCandleFactory
    {
        public override bool IsCandleFinished(CandleToken<RangeCandle, Unit> token, RangeCandle currentCandle, Trade trade)
        {
            return base.IsCandleFinished(token, currentCandle, trade) && 
                (currentCandle.Time.Minute != trade.Time.Minute || currentCandle.Time.Second != trade.Time.Second);
        }
    }

При попытке candleManager.RegisterCandleFactory(candleFactory) - ругается что для RangeCandles фабрика уже зарегистрирована.

Попытка 2. Делаю class RangeDelayCandle : RangeCandle. Наследуюсь от CandleFactory, дублирую один в один код из RangeCandleFactory заменяя RangeCandle на RangeDelayCandle

Теперь не ругается.


RangeDelayCandleFactory candleFactory = new RangeDelayCandleFactory();
candleFactory.CreateToken(Security, priceRange);                
candleManager.RegisterCandleFactory(candleFactory);                

...

_manager.StateChanged += () => this.GuiSync(() => 
	{
            if (_manager.State != StrategyManagerStates.Runned)
            {
                        this.FindedTrades.ItemsSource = candleManager.GetCandles<RangeDelayCandle, Unit>(Security, priceRange, new Range<DateTime>(this.FromDate, this.ToDate));                        
            }
        }

Но свечи так и не появились. Если делать candleManager.RegisterRangeCandles(Security, priceRange) - свечки строятся Что я ещё упустил?

War dieses Thema hilfreich?

Thema teilen

Kommentare (2)

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

Mikhail Sukhov
Mikhail Sukhov

Garic: При попытке candleManager.RegisterCandleFactory(candleFactory) - ругается что для RangeCandles фабрика уже зарегистрирована.

Нужно сделать UnRegisterCandleFactory для старой фабрики.

Garic: Но свечи так и не появились. Если делать candleManager.RegisterRangeCandles(Security, priceRange) - свечки строятся Что я ещё упустил?

Упустили тот момент, что есть регистрация фабрики свечек и самих свечек. Последние зависят от параметра (priceRange может быть бесконечно много, а фабрика одна). И да, нужно тогда не RegisterRangeCandles, а RegisterCandles<TCandle, TArg>(Security security, TArg arg), раз у вас свой наследний от RangeCandle.

Garic
Garic Autor

Спасибо, заработало!


RangeDelayCandleFactory candleFactory = new RangeDelayCandleFactory();                
candleManager.UnRegisterCandleFactory<RangeCandle>();                
candleManager.RegisterCandleFactory(candleFactory);
candleManager.RegisterCandles<RangeCandle, Unit>(Security, priceRange);