We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
通过重构 RQAlpha 实现如下目标:
在 RQAlpha 中存在 ACCOUNT_TYPE 的 Enum 作为账户类型,但这种方式使得账户类型已经固定,不能进行扩展,因此进行如下修改.
ACCOUNT_TYPE
DEFAULT_ACCOUNT_TYPE
Environment.get_instance().account_type_dict
Environment.get_instance().register_account_type(account_type, value)
比如,进行火币网账户扩展,我们可以通过构建一个 Mod 来实现对应的账户扩展
from rqalpha.interface import AbstractMod from rqalpha.const import CustomEnum class CUSTOM_ACCOUNT_TYPE(CustomEnum): HUOBI = 200 class CustomAccountMod(AbstractMod): def start_up(self, env, mod_config): # 扩展账户 env.register_account_type(CUSTOM_ACCOUNT_TYPE.HUOBI.name, CUSTOM_ACCOUNT_TYPE.HUOBI.value)
不同标的类型的账户,其计算逻辑可能并不相同,因此进行如下修改,是您可以构建自定义的账户和持仓来满足定制化的业务需求。
AbstractAccount
AbstractPosition
Environment.get_instance().set_account_model(account_type, AccountModel)
Environment.get_instance().set_position_model(account_type, PositionModel)
Environment.get_instance().get_account_model(account_type)/get_position_model(account)
比如,扩展火币网账户和持仓
from rqalpha.interface import AbstractMod, AbstractAccount, AbstractPosition from rqalpha.const import CustomEnum class CUSTOM_ACCOUNT_TYPE(CustomEnum): HUOBI = 200 class HUOBIAccount(AbstractAccount): ... class HUOBIPosition(AbstractPosition): ... class CustomAccountMod(AbstractMod): def start_up(self, env, mod_config): # 扩展 account_type env.register_account_type(CUSTOM_ACCOUNT_TYPE.HUOBI.name, CUSTOM_ACCOUNT_TYPE.HUOBI.value) # 扩展 AccountModel env.set_account_model(CUSTOM_ACCOUNT_TYPE.HUOBI.name, HUOBIAccount) # 扩展 PositionModel env.set_position_model(CUSTOM_ACCOUNT_TYPE.HUOBI.name, HUOBIPosition)
order
order_to
RQAlpha 提供了 order 和 order_to 作为通用性的下单函数,如果要进行了自定义账户的话,需要提供对应的下单逻辑支持。
鉴于此,增加 Environment.get_instance().set_smart_order(account_type, smart_order) 函数,order 和 order_to 会根据 order_book_id 自动选择对应 account_type 的 smart_order 函数来执行下单逻辑
Environment.get_instance().set_smart_order(account_type, smart_order)
order_book_id
account_type
smart_order
如下示例
from rqalpha.const import SIDE, ORDER_TYPE from rqalpha.environment import Environment from rqalpha.model.order import Order, MarketOrder, LimitOrder from rqalpha.interface import AbstractMod, AbstractAccount, AbstractPosition from rqalpha.const import CustomEnum class CUSTOM_ACCOUNT_TYPE(CustomEnum): HUOBI = 200 class HUOBIAccount(AbstractAccount): def order(self, order_book_id, quantity, style, target=False): position = self.positions[order_book_id] env = Environment.get_instance() position = env.portfolio.positions[order_book_id] if target: # For order_to quantity = quantity - position.quantity if quantity == 0: return None elif quantity > 0: side = SIDE.BUY else: side = SIDE.SELL price = env.get_last_price(order_book_id) r_order = Order.__from_create__(order_book_id, quantity, side, style) if r_order.type == ORDER_TYPE.MARKET: r_order.set_frozen_price(price) if env.can_submit_order(r_order): env.broker.submit_order(r_order) return r_order ... class HUOBIPosition(AbstractPosition): ... class CustomAccountMod(AbstractMod): def start_up(self, env, mod_config): # 扩展 account_type env.register_account_type(CUSTOM_ACCOUNT_TYPE.HUOBI.name, CUSTOM_ACCOUNT_TYPE.HUOBI.value) # 扩展 AccountModel env.set_account_model(CUSTOM_ACCOUNT_TYPE.HUOBI.name, HUOBIAccount) # 扩展 PositionModel env.set_position_model(CUSTOM_ACCOUNT_TYPE.HUOBI.name, HUOBIPosition)
RQAlpha 通过 --security 以及 --stock-starting-cash | --future-starting-cash 来设置策略交易标的及对应的初始资金。
--security
--stock-starting-cash
--future-starting-cash
或者通过如下配置进行
__config__ = { "securities": ['stock', 'future'], "stock_starting_cash": 100000, "future_starting_cash": 200000 }
这种方式的设置无法进行自定义账户的扩展,因此更改设置方式如下:
-a/--account account_type starting_cash
rqalpha run --acount stock 100000 --account future 200000 --account huobi 300000
securities
stock_starting_cash
future_starting_cash
accounts
__config__ = { "base": { "start_date": "2015-01-09", "end_date": "2015-03-09", "frequency": "1d", "matching_type": "current_bar", "benchmark": None, "accounts": { "stock": 20000, "future": 1000000 } } }
以上的修改内容 会对已存在的 Mod 产生比较大影响,甚至可能导致运行失败,但为了获得更好的扩展性,建议了解 breaking change 并进行升级。
以上更改目前还在 develop 分支开发和测试,最终 Release 版本 为 3.0.0
The text was updated successfully, but these errors were encountered:
wh1100717
No branches or pull requests
通过重构 RQAlpha 实现如下目标:
可以扩展账户类型
在 RQAlpha 中存在
ACCOUNT_TYPE
的 Enum 作为账户类型,但这种方式使得账户类型已经固定,不能进行扩展,因此进行如下修改.ACCOUNT_TYPE
为DEFAULT_ACCOUNT_TYPE
Environment.get_instance().account_type_dict
用于存储所有的 ACCOUNT_TYPE 及对应的 valueEnvironment.get_instance().register_account_type(account_type, value)
函数用于注册账户类型比如,进行火币网账户扩展,我们可以通过构建一个 Mod 来实现对应的账户扩展
可以扩展 AccountModel 和 PositionModel
不同标的类型的账户,其计算逻辑可能并不相同,因此进行如下修改,是您可以构建自定义的账户和持仓来满足定制化的业务需求。
AbstractAccount
和AbstractPosition
接口, 您扩展的 Account 和 Position 需要实现对应接口,从而保证 RQAlpha 可以争取而处理Environment.get_instance().set_account_model(account_type, AccountModel)
来注册 AccountModelEnvironment.get_instance().set_position_model(account_type, PositionModel)
来注册 PositionModelEnvironment.get_instance().get_account_model(account_type)/get_position_model(account)
来获取对应的 Model比如,扩展火币网账户和持仓
order
和order_to
函数可以支持该账户的下单操作RQAlpha 提供了
order
和order_to
作为通用性的下单函数,如果要进行了自定义账户的话,需要提供对应的下单逻辑支持。鉴于此,增加
Environment.get_instance().set_smart_order(account_type, smart_order)
函数,order
和order_to
会根据order_book_id
自动选择对应account_type
的smart_order
函数来执行下单逻辑如下示例
增加对应自定义账户及其初始资金的配置支持
RQAlpha 通过
--security
以及--stock-starting-cash
|--future-starting-cash
来设置策略交易标的及对应的初始资金。或者通过如下配置进行
这种方式的设置无法进行自定义账户的扩展,因此更改设置方式如下:
--security
|--stock-starting-cash
|--future-starting-cash
, 改为使用-a/--account account_type starting_cash
, 具体使用方式如下:securities
|stock_starting_cash
|future_starting_cash
, 改为使用accounts
, 具体配置如下:以上的修改内容 会对已存在的 Mod 产生比较大影响,甚至可能导致运行失败,但为了获得更好的扩展性,建议了解 breaking change 并进行升级。
以上更改目前还在 develop 分支开发和测试,最终 Release 版本 为 3.0.0
The text was updated successfully, but these errors were encountered: