示例#1
0
 def get_balance(self):
     """获取资金"""
     data = self.trd_ctx.accinfo_query(trd_env=self.futu_trd_env)
     balance = AccountBalance()
     for col in data.columns:
         if col in ('risk_level', 'risk_status'):
             continue
         setattr(balance, col, data[col].values[0])
     return balance
示例#2
0
 def init_portfolio(self, strategy_account:str, strategy_version:str, init_strategy_cash:float):
     """初始化投资组合相关信息"""
     self.strategy_account = strategy_account
     self.strategy_version = strategy_version
     # 先初始化投资组合管理,account_balance和position会在后面进行同步sync
     self.portfolio = Portfolio(
         account_balance=AccountBalance(cash=init_strategy_cash), # 账户余额
         position=Position(),                                     # 头寸管理
         market=self.market                                       # 交易通道
     )
示例#3
0
 def get_broker_balance(self) -> AccountBalance:
     """获取券商资金"""
     ret_code, data = self.trd_ctx.accinfo_query(trd_env=self.futu_trd_env)
     if ret_code:
         print(f"获取券商资金失败:{data}")
         return
     balance = AccountBalance()
     balance.cash = data["cash"].values[0]
     balance.power = data["power"].values[0]
     balance.max_power_short = data["max_power_short"].values[0]
     balance.net_cash_power = data["net_cash_power"].values[0]
     if not isinstance(balance.max_power_short, float):
         balance.max_power_short = -1
     if not isinstance(balance.net_cash_power, float):
         balance.net_cash_power = -1
     return balance
示例#4
0
 def get_db_balance(self, strategy_account:str, strategy_version:str)->AccountBalance:
     """从数据库加载balance(如果数据库无记录,返回None)"""
     balance_df = self.db.select_records(
         table_name="balance",
         broker_name=GATEWAY["broker_name"],
         broker_environment=self.market.trade_mode.name,
         broker_account=GATEWAY["broker_account"],
         strategy_account=strategy_account,
         strategy_version=strategy_version,
     )
     if balance_df.empty:
         return None
     assert balance_df.shape[0]==1, f"There are more than one rows in balance: {self.strategy_account} {self.strategy_version}"
     account_balance = AccountBalance(
         cash=balance_df["cash"].values[0],
         power=balance_df["power"].values[0],
         max_power_short=balance_df["max_power_short"].values[0],
         net_cash_power=balance_df["net_cash_power"].values[0]
     )
     return account_balance
示例#5
0
        securities=stock_list,
        start=datetime(2021, 3, 15, 9, 30, 0, 0),
        end=datetime(2021, 3, 17, 16, 0, 0, 0),
    )

    # market = FutuGateway(
    #     securities=stock_list,
    #     end=datetime(2021, 3, 25, 16, 0, 0, 0),
    # )

    market.TIME_STEP = 60  # 设置时间步长

    # 头寸管理
    position = Position()
    # 账户余额
    account_balance = AccountBalance()
    # 投资组合管理
    portfolio = Portfolio(account_balance=account_balance,
                          position=position,
                          market=market)
    # 执行引擎
    engine = Engine(portfolio)

    # 初始化策略
    strategy = DemoStrategy(securities=stock_list, engine=engine)
    strategy.init_strategy()

    # 事件引擎启动
    recorder = BarEventEngineRecorder()
    event_engine = BarEventEngine(strategy,
                                  recorder,