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


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

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

Теги:


Спасибо:




2 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.05.2011
Ответить


Garic Перейти

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


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

Garic Перейти

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


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

Garic

Фотография
Дата: 05.05.2011
Ответить


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

Код

RangeDelayCandleFactory candleFactory = new RangeDelayCandleFactory();
candleManager.UnRegisterCandleFactory<RangeCandle>();
candleManager.RegisterCandleFactory(candleFactory);
candleManager.RegisterCandles<RangeCandle, Unit>(Security, priceRange);
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy