Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Junffzz opened this issue May 6, 2023 · 7 comments

Comments

@Junffzz
Copy link

Junffzz commented May 6, 2023

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里的投资组合不同吗,在什么场景下使用呢,希望作者能帮忙解答

@josephchenhk
Copy link
Owner

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

@Junffzz
Copy link
Author

Junffzz commented May 6, 2023

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

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

@josephchenhk
Copy link
Owner

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

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

是的

@Junffzz
Copy link
Author

Junffzz commented May 7, 2023

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

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

是的

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

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

@Junffzz
Copy link
Author

Junffzz commented May 11, 2023

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

@josephchenhk
Copy link
Owner

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

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

@Junffzz
Copy link
Author

Junffzz commented May 23, 2023

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants