После успешного старта стратегии обнаруживаю разницу
var pos = _trader.Positions.First(p => p.Security == _security);
int tp = pos != null ? pos.CurrentValue : 0; // = 1
int sp = _strategy.PositionManager.Position; // = 0
Assert.AreEqual( tp, sp ); // Не равны
Как сделать, чтобы стратегия "подхватила" текущую позицию по бумаге? Возможны (нужны) два варианта:
// Сегодня были сделки
_trader.MyTrades.Count(t=> t.Trade.Security == _security) > 0
// Сделки были когда-то давно
_trader.MyTrades.Count(t=> t.Trade.Security == _security) == 0
Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь. А может просто, в стратегии использовать не _strategy.PositionManager.Position, а _strategy.Trader.Positions ?
Комментарии (3)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Сразу поправлю. Strategy.Position - это позиция по стратегии. А Trader.Positions - это позиции по бумагам. Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Positions. Если же все таки так, то надо самостоятельно где-то в своем коде восстанавливать текущую позицию.
но так нельзя, подскажите, пожалуйста, как можно. Сохраненной информации о старых трейдах по этой бумаге у меня, допустим, нет. Закрывать позицию вручную в терминале и потом открыть с помощью стратегии, конечно можно, но это не подходящий вариант для меня.
Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это кривой. Вариант со _strategy.PositionManager.StartPosition мне кажется наиболее правильным. Для вычисления текущей позиции нужно будет лишь к вычисленному по трейдам числу прибавлять это значение. Так, пожалуй, и сделаю.
Наиболее правильный будет как раз не менять существующий алгоритм подсчета, а подсунуть псевдо-данные для вычисления, произведя некоторую эмуляцию... Сделайте наследник от QuikTrader и в нем принудительно вызовите метод GetMyTrade. Этот метод возвращается сделку, и если она отсутсвует, то создает ее. Создавать объекты Order и MyTrade можно через new, внутри нет никакого специального подсчета.