← Назад

[major] хранение и восстановление сделок стратегии

Вопрос: как восстановить инфу к какой стратегии относится сделка?

Имеется робот с несколькими стратегиями. Эти стратегии генерируют сделки на одной бумаге. Для работы стратегий требуется история сделок, которые они совершили и информация, есть ли открытие позиции. Хочется после остановки и повторного запуска восстанавливать состояние стратегий. В S# есть механизм хранения данных, но в его API есть только сохранение сделок с привязкой к бумаге. Нет информации о стратегиях.

Хорошо, я могу сохранять инфу о трейдах в своем собственном хранилище, восстанавливать состояние при старте стратегии, но в S# этой инфы не будет и весь механизм подсчета статистики S# не будет работать. Можно ли как-нибудь при загрузке стратегии указывать ей, какие сделки ее?

Комментарии (4)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

Хранилище данных пока не доработано, и работает только в случае с Гидрой. Как вариант, реализуйте своего наследника от StrategyPositionManager и передайте в стратегию.

Greene-nsk
Greene-nsk Автор

Михаил, я подменяю PositionManager на свой, работает хорошо. Можно ли как-нибудь подменить PositionManager у PnLManager, чтобы в нем учитывались подгруженные сделки?

        base.PositionManager = newPositionManager;
        base.PnLManager.PositionManager = newPositionManager; <--  здесь ошибка, что поле readonly

    public class MyStrategyPositionManager : StrategyPositionManager
    {
        public MyStrategyPositionManager(Strategy strategy, IEnumerable<MyTrade> myTradesPreloaded)
            : base(strategy)
        {
            base.Strategy.MyTrades.AddRange(myTradesPreloaded);
        }
    }

Alexander
Alexander

Greene-nsk: Михаил, я подменяю PositionManager на свой, работает хорошо. Можно ли как-нибудь подменить PositionManager у PnLManager, чтобы в нем учитывались подгруженные сделки?

        base.PositionManager = newPositionManager;
        base.PnLManager.PositionManager = newPositionManager; <--  здесь ошибка, что поле readonly
public class MyStrategyPositionManager : StrategyPositionManager
{
    public MyStrategyPositionManager(Strategy strategy, IEnumerable<MyTrade> myTradesPreloaded)
        : base(strategy)
    {
        base.Strategy.MyTrades.AddRange(myTradesPreloaded);
    }
}


Также подмени и PnLManager.
Greene-nsk
Greene-nsk Автор

Alexander: Также подмени и PnLManager.

Гениально ) Спасибо!