Не получается у меня методом тыка это сделать (
Задача такая, использую 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) - свечки строятся Что я ещё упустил?
Kommentare (2)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Нужно сделать UnRegisterCandleFactory для старой фабрики.
Упустили тот момент, что есть регистрация фабрики свечек и самих свечек. Последние зависят от параметра (priceRange может быть бесконечно много, а фабрика одна). И да, нужно тогда не RegisterRangeCandles, а RegisterCandles<TCandle, TArg>(Security security, TArg arg), раз у вас свой наследний от RangeCandle.
Спасибо, заработало!