当前位置: 首页 > 后端技术 > Python

1个人管理10亿?WonderTrader助您轻松搞定!

时间:2023-03-26 14:25:39 Python

前言WonderTrader是一个量化开发交易平台。除了C++底层带来的极致速度体验,最核心也是最重要的杀手锏就是投资组合管理。WonderTrader的组合盘是指一系列策略配置的组合盘。组合盘中的策略可以是不同策略的实例,也可以是同一策略不同品种的实例。如何配置组合日内策略是投资经理需要解决的问题。在投资经理确定了投资组合中的策略比率和单位基金规模后,WonderTrader这个投资组合管理的神器就开始发挥作用了。本文将重点介绍WonderTrader的组合盘管理功能!借助WonderTrader,一人轻松管理十亿!量化交易好麻烦!张三的烦恼张三是X私募基金的研发人员。他每天的工作是:阅读文献、分析数据、研究模型,最后将其转化为盈利的交易策略。通常,张三直接用matlab写策略逻辑,回测分析数据,并无劣势。不过最近公司要求所有研发人员将策略转移到P量化平台上。他在写策略的时候遇到了一些问题:股指期货今天佣金高,而沪金、沪银今天佣金低。如何控制策略中策略的开仓、平仓、今日水平?要不要根据品种在攻略里面写逻辑啊!?实时调用查询持仓接口,异步等待结果返回,那么逻辑应该怎么写呢?是不是都得写在callback里?!如果位置数据保存在本地呢?还需要根据订单返还和成交返还修改总持仓量和可平仓量,否则如何控制平仓量?为什么这些细节这么复杂!!!什么!跨期套还需要考虑远期合约不活跃时超时取消订单的问题!?那我就可以直接挂限价了!(领队:小张,怎么你们这边的单子都挂在涨跌停板上,滑点怎么能控制成这样!!)天啊!在对交易策略中,当K线收盘时,需要考虑两个品种是否平盘触发计算逻辑!如果我在一个策略中有十个品种,代码应该是乱七八糟的。……张三在心里默默的想:难道不能让我们的研发人员专注于战略逻辑吗?能不能把这些政策逻辑都抛到脑后?李斯的麻烦李斯是X私募基金的投资经理,也是张三的直接领导。李斯的工作就是将团队中研发人员制定的策略,通过一套模型合理配置成一个复合盘。李斯是一个很有自信的人。他开发的投资组合配置模型可以有效提高30%的回报率,减少20%的最大回撤。但随着产品上线时间变长,在实际操作中,根据交易员的反馈,李斯也遇到了很多麻烦:对于组合中的多个策略,组合中有10多个策略,如果每个策略都是独立运行的话,需要建立10个以上的交易渠道。但交易员反映CTP交易通道只允许5个实例同时在线!如果将策略放在一起运行,则交易回报不容易安排。在这种情况下,你必须要求IT编写一个中间件来专门为每个策略分配交易回报。...如果有不同的策略交易同一个产品,如果接口直接暴露给策略,也可能导致每个策略检测到的仓位不正确,从而不断发出交易指令!即使解决了仓位分配问题,仍然可能出现交叉开仓的问题,浪费大量佣金!上次期货公司打电话问,好像有自营?好在手不多,也能解释过去。融入网位,发出去?上次做了,结果张三和我纠缠了半天,说他的战略表现不对!……李斯靠在椅子上,闭上眼睛沉思:难道没有更好的办法吗?王五的抑郁症王五是X私募股权基金的交易员。他平时的工作就是保证各个产品方案的运行。如果触发风控,会有一些人工清算操作。从去年到现在,公司产品规模不断扩大,管理的账户已超过20个。王五以前8:30上班,准时到公司,可以在9:00开市前完成所有验货工作。但是随着管理的账户越来越多,需要检查的地方也越来越多。为了在9:00之前完成工作,王舞提前8:10到达了公司。他真是越来越郁闷了:watchdog竟然有20多个进程!上次不小心把马总账户的盘子组合改成了穆总账户的盘子……一个月的bonus没了!今天是星期三,明天IF又要换月了!真是头大啊,这次一定要列个单子,换个盘子就打上一个。还好上个月换月的时候,第二天早上又过一遍,不然又要出大事了。早上,李斯老师的新组合板又多了3个账号!3个账户的手数是如何匹配的?什么!P组合风控触发?快点,我记得P群有8个账号在跑!!!……王舞嘀咕:不能把交易和风控结合起来统一处理吗?如果我错了,我的工资将被再次扣除!我们上次谈到的公司叫什么名字?据说他们有一个新平台叫WonderTrader,非常好用!不然我还是跳下去吧,这地方真的不适合人。交给WonderTraderWonderTrader的设计目标就是让专业的人做专业的事,所以WonderTrader在架构上彻底解耦了各个层级。每个层次的每个功能模块都可以被极度简化。无论您是想直接使用WonderTrader现成的功能模块,还是开发自己的功能模块,都能体会到简约而不简单的设计理念。如果你是张三,那你就需要WonderTrader!如果你是李斯,那你也需要WonderTrader!如果你是王五,那你就更需要WonderTrader了!策略的解放不需要on_order,也不需要on_trade,而是on_calculate!策略的基类定义非常简单,只保留必要的接口。策略只需要关注这几个接口,剩下的由WonderTrader后台解决!让你的策略逻辑简洁明了,更容易维护。fromwtpyimportContextclassBaseStrategy:'''策略基类,所有策略都派生自该类\n包含策略的基本开发框架'''def__init__(self,name):self.__name__=namedefname(self):returnself.__name__defon_init(self,context:Context):'''策略初始化,在启动时调用\n加载自定义数据\n@context策略运行上下文'''returndefon_calculate(self,context:context):'''K线收盘时调用,一般用作策略的核心计算模块\n@context策略运行context'''returndefon_tick(self,context:Context,code:str,newTick:dict):'''数据一一进来的时候调用\n生产环境直接调用各个行情\n回测环境是模拟数据\n@contextStrategy运行上下文\n@codeContract代码@newTick最新逐笔报价'''returndefon_bar(self,context:Context,code:str,period:str,newBar:dict):'''Callback@contextstrategycontextwhenKlineclose\n@codecontractcode@periodKLinecycle@newBar最新收K线'''返回设置主K线,不管有多少周期,有多少品种,统统统一安排!WonderTrader在同一个策略中使用多周期多品种K线时,您可以选择出现频率最高的K线周期作为主K线,策略的重新计算将按照该周期进行调度不考虑哪条K线先收,哪条K线后收,如何控制收盘事件的先后顺序等df_bars=context.stra_get_bars("CFFEX.IF.HOT","m5",50,isMain=True)攻略的理论仓位相互独立,绝不会重复拉平!每种策略都有独立的理论持仓数据,互不干扰。每日收盘时会有独立的资金结算交易明细、平仓明细、讯号明细。特殊数据文件中有set_position接口,告别繁琐的多空开平仓!对于绝大多数策略开发者来说,多空开平的细节都非常模糊。WonderTrader的策略API简化到了极致。在策略中,只需要根据逻辑直接设置目标仓位即可。(WonderTrader的策略API依然保留多空进出接口,方便用户迁移和理解)#读取当前仓位curPos=context.stra_get_position(code)ifcurPos==0:ifhighpx>=upper_bound:context.stra_set_position(code,1,'enterlong')context.stra_log_text("突破%.2f>=%.2f,多头入场"%(highpx,upper_bound))returniflowpx<=lower_bound:context.stra_set_position(code,-1,'entershort')context.stra_log_text("突破%.2f<=%.2f,空头进场"%(lowpx,lower_bound))return目标持仓在后台执行,新手可以轻松掌控策略发展!因为策略逻辑和执行是完全分离的,策略中没有交易相关内容的接口,比如挂单、撤单、错单处理的逻辑。让策略开发者更专注于模型研究和策略逻辑,把这些交易接口的细节交给WonderTrader!组合板的第一级进化——净持仓管理组合板以每分钟一次的频率安排所有策略的重新计算(根据主K线周期触发重新计算)。策略重新计算后,组合板会读取策略的所有目标仓位(多策略、多品种),根据多空仓位自动平仓后,得到净仓位。该净头寸是投资组合的基本头寸。净仓的好处是显而易见的:一个产品只有单边持仓,防止自营仓位被拉平,净仓可以减少保证金占用(30比25做空,按大额保证金制度,也占用30手保证金,而净5手以上仓位只占用5手保证金)内部平仓,省去不必要的开仓,节省佣金(先开30多,再平25多,还可以得到净持仓5手,但手续费55手,直接执行5手以上净持仓,只花5手净持仓)二次进化-组合盘风控组合盘作为基础盘。基金管理人设定好策略比例和基础资金规模后,就可以基本确定风控参数。组合盘统一风控的好处是,基础盘的资金规模确定后,无论执行账户如何配置,都不会影响基础盘的风控参数。当出现盘面风险时,可以做到一刀切,而不用对每个账户单独处理。1+N模式的风控更及时。与多进程模式相比,需要一一确认,响应速度更快,降低了组合盘的风险控制。切断组合板与执行器之间目标位置的传递。该模式不会影响策略在不利市场条件下的继续执行,从而可以保留策略在不利市场条件下的表现数据。执行器——扩大管理规模的必杀技执行器是目标岗位执行的核心模块。一个组合盘可以配置多个执行器,也就是上面提到的1+N模式。而每个执行器实例都会与交易通道一一绑定,从而实现目标仓位的执行。WonderTrader执行器的主要特点如下:1+N模式,复制粘贴可以扩大资金管理规模。WonderTrader设置项中,executor设置是一个数组。复制粘贴执行器的配置项,并进行适当的修改。"executers":[{"active":true,"id":"exe0",//执行者ID"scale":1,//手数放大"policy"://执行逻辑调用策略{"default":{//默认策略"name":"WtExeFact.WtSimpExeUnit",//执行单元工厂中的WtSimpleExtUnit执行单元WtExeFact"offset":0,//执行单元参数"expire":40,"opposite":true}},"trader":"trader0"//绑定交易通道ID},{"active":true,"id":"exe1","scale":2,"policy":{"default":{"name":"WtExeFact.WtSimpExeUnit","offset":0,"expire":40,"opposite":true}},"trader":"trader1"},{"active":true,"id":"exe2","scale":3,"policy":{"default":{"name":"WtExeFact.WtSimpExeUnit","offset":0,"expire":40,"opposite":true}},"trader":"trader2"},......]分别配置基本手数的放大倍数,无论你有多少钱,都可以轻松应对它。上面显示的配置项中,一共有3个executor,exe0的放大倍数是1倍,exe1的放大倍数是2倍,exe2的放大倍数是3倍。如果基础盘资金为1000w,trader0有1000w左右的资金,trader1有2000w左右,同理,trader3有3000万左右的资金。一个执行者绑定一个交易通道,每次执行互不干扰。以上面的配置项为例,一个执行器绑定了一个交易通道。由于每个交易通道的目标手数不同,每个执行者都是独立执行的。配合算法交易后,每笔订单的手数和订单价格可能会有所不同。执行单元:让算法交易的执行变得极其简单。执行单元的核心是算法交易的逻辑!执行单元的简单性在于:无需考虑合约,只需要获取数据并进行逻辑运算即可,无需考虑开平仓,只需要根据标的以指定价格下单买入或卖出位置和当前位置。买卖顺序最终由交易通道根据其实际持仓情况和综合开平仓策略决定,开仓还是平仓,今天平还是昨天平等。独立的流量风险控制各交易渠道:告别期货公司风控呼声。交易渠道的流通主要受限于交易所和券商的柜台系统。大致可以分为两个方面:短时间内操作次数限制为一次交易日内操作次数限制单笔订单最大手数限制一个交易日内操作次数限制短时间内是最有可能出现的情况。大多数原因是由于数据错误。一旦达到阈值,将触发券商风控预警。基于交易渠道的流量风控可以很好的避免这种情况。如果单笔订单超过最大手数限制,将不会直接下单。对于资金量较大的账户,当手数较大时,交易通道会自动拆分成多个小手数订单。结语通过以上的介绍,相信大家已经明白了,一个人用WonderTrader管理十亿资金并不是一句空话(WonderTrader:当然有!我有实力!)。当然,WonderTrader只是一个工具平台。要想真正能够管理十亿基金,首先投资组合的市场容量要足够大。WonderTrader一直致力于解放量化行业人力资源的伟大目标。WonderTrader的口号是——让专业的人做专业的事。让苦着脸写代码的研究员少一些,让服务器苦苦挣扎的交易者少一些,把麻烦的事都交给WonderTrader吧!最后,又是一波广告。WonderTrader的github地址:https://github.com/wondertrad...WonderTrader的官网地址:https://wondertrader.github.io

猜你喜欢