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

Как добавить новый тип свечей?
Atom
5/4/2011
Garic


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

Задача такая, использую 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) - свечки строятся Что я ещё упустил?


Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 5/4/2011
Reply


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

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

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

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

Thanks:

Garic

Avatar
Date: 5/5/2011
Reply


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


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

Thanks:


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

loading
clippy