Не получается у меня методом тыка это сделать (
Задача такая, использую 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) - свечки строятся Что я ещё упустил?
Comentarios (2)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Нужно сделать UnRegisterCandleFactory для старой фабрики.
Упустили тот момент, что есть регистрация фабрики свечек и самих свечек. Последние зависят от параметра (priceRange может быть бесконечно много, а фабрика одна). И да, нужно тогда не RegisterRangeCandles, а RegisterCandles<TCandle, TArg>(Security security, TArg arg), раз у вас свой наследний от RangeCandle.
Спасибо, заработало!