josephchenhk/qtrader

engine的portfolios和strategy里的portfolios两者是有什么区别和联系呢

Opened this issue · 7 comments

BaseStrategy类下看到如下几个方法:

    def get_portfolio_value(self, gateway_name: str) -> float:
        return self.engine.portfolios[gateway_name].value

    def get_strategy_portfolio_value(self, gateway_name: str) -> float:
        return self.portfolios[gateway_name].value

    def get_account_balance(self, gateway_name: str) -> AccountBalance:
        return self.engine.portfolios[gateway_name].account_balance

    def get_strategy_account_balance(self, gateway_name: str) -> AccountBalance:
        return self.portfolios[gateway_name].account_balance

    def get_position(self, gateway_name: str) -> Position:
        return self.engine.portfolios[gateway_name].position

    def get_strategy_position(self, gateway_name: str) -> Position:
        return self.portfolios[gateway_name].position

不太理解,portfolios分别在engine里获取和策略里获取,是因为engine里的投资组合不同吗,在什么场景下使用呢,希望作者能帮忙解答

Hi 你好,是因为同一个engine可能有多个strategy同时跑

Hi 你好,是因为同一个engine可能有多个strategy同时跑

那我是不是可以理解为:多个strategy的portfolios总值等于一个engine的portfolios呢

Hi 你好,是因为同一个engine可能有多个strategy同时跑

那我是不是可以理解为:多个strategy的portfolios总值等于一个engine的portfolios呢

是的

Hi 你好,是因为同一个engine可能有多个strategy同时跑

那我是不是可以理解为:多个strategy的portfolios总值等于一个engine的portfolios呢

是的

但是在main_demo.py里只看到下面这句,engine是怎么把它们组合在一起呢,要是能看到engine的代码就好了。engine是怎么把多个策略的账户关联起来的,然后数据库更新还能把对应的策略更新到数据库里,难道是每启动一个策略,就新建一个进程

# Engine
engine = Engine(gateways={gateway_name: gateway})

@josephchenhk 大佬,这块儿有点儿懵。因为如果是每个策略都新启动一个进程,那就不可能存在一个Engine对应多个账户,这儿是怎么设计的。跑一个进程是一个策略,还是可以多个策略。在event_engine里是怎么处理这个关系呢

@josephchenhk 大佬,这块儿有点儿懵。因为如果是每个策略都新启动一个进程,那就不可能存在一个Engine对应多个账户,这儿是怎么设计的。跑一个进程是一个策略,还是可以多个策略。在event_engine里是怎么处理这个关系呢

多个策略都是跑在同一个进程里的,在同一个bar的时间内,策略是按顺序启动执行的,所以要注意单个策略的运算时间不宜过长。

@josephchenhk 大佬,这块儿有点儿懵。因为如果是每个策略都新启动一个进程,那就不可能存在一个Engine对应多个账户,这儿是怎么设计的。跑一个进程是一个策略,还是可以多个策略。在event_engine里是怎么处理这个关系呢

多个策略都是跑在同一个进程里的,在同一个bar的时间内,策略是按顺序启动执行的,所以要注意单个策略的运算时间不宜过长。

了解了,那就是串行的执行多个策略。这样的话是不是可以启动多个子进程充分利用cpu并行支持策略,或者每个策略单独启动一个进程。
另外想单独联系大佬,看下engine的逻辑代码,主要是想知道数据库的存储在多个策略的时候是怎么处理的。非常感谢