You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
EntityFactory определена как singleton:
static EntityFactory()
{
Instance = new EntityFactory();
}
public static EntityFactory Instance { get; private set; }
Определен наследник от него:
private sealed class EmulationEntityFactory : EntityFactory
у которого перегружен метод:
public override Portfolio CreatePortfolio(string name)
{
return _portfolios.TryGetValue(name) ?? base.CreatePortfolio(name);
}
Есть EntityCache, который использует синглетон:
private IEntityFactory _entityFactory = Algo.EntityFactory.Instance;
public IEntityFactory EntityFactory
{
get { return _entityFactory; }
.... cuted ....
}
... cuted ...
var portfolio = _portfolios.SafeAdd(name, key =>
{
var p = EntityFactory.CreatePortfolio(key);
... cuted ...
В результате:
а. Перегруженный метод (override Portfolio CreatePortfolio) никогда не сработает
б. В коннекторе на истори создается клон портфеля, а не тот, что был передан в стратегию и в коннектор.
PS: А сам EntityCache в Connector приватный
The text was updated successfully, but these errors were encountered:
Я про проблему, что после окончания работы портфель у стратегии отличается от портфеля коннектора (HistoryEmulationConnector), хотя на вход обоим подается один и тот же объект.
Вкратце:
var portfolio = new Portfolio() { Name = "n", BeginValue = 1000000, };
var connector = new HistoryEmulationConnector( new[] { oneSecurity }, new[] { portfolio } ) { ... };
var strategy = new MyStrategy( oneSeries ) { Portfolio = portfolio, ... };
connector.Start( startTime, stopTime );
После окончания работы стратегии:
connector.Portfolios.FirstOrDefault() будет содержать актуальные данные (CurrentValue, RealizedPnL и т.п.)
А strategy.Portfolio не будет содержать актуальных данных (т.е. останется таким же пустым, каким был при создании).
EntityFactory определена как singleton:
static EntityFactory()
{
Instance = new EntityFactory();
}
public static EntityFactory Instance { get; private set; }
Определен наследник от него:
private sealed class EmulationEntityFactory : EntityFactory
у которого перегружен метод:
public override Portfolio CreatePortfolio(string name)
{
return _portfolios.TryGetValue(name) ?? base.CreatePortfolio(name);
}
Есть EntityCache, который использует синглетон:
private IEntityFactory _entityFactory = Algo.EntityFactory.Instance;
public IEntityFactory EntityFactory
{
get { return _entityFactory; }
.... cuted ....
}
... cuted ...
var portfolio = _portfolios.SafeAdd(name, key =>
{
var p = EntityFactory.CreatePortfolio(key);
... cuted ...
а. Перегруженный метод (override Portfolio CreatePortfolio) никогда не сработает
б. В коннекторе на истори создается клон портфеля, а не тот, что был передан в стратегию и в коннектор.
PS: А сам EntityCache в Connector приватный
The text was updated successfully, but these errors were encountered: