轮动选股 (原创:Alex) 一、策略逻辑 本策略分为三个阶段:第一个阶段是从一篮子股票中筛选出满足某个条件(这里的条件是当天的开盘价向上跳空2%)的股票;当筛选出来的股票同时满足三均线进场条件时,通过量比进行排序,最多选出量比最大的3只股票,始终保持当前持仓最多只有3只股票,只有在股票出场之后,其它股票才能进场;第三个阶段是基于进场价格、单个股票的最大风险资金计算出股数,基于所计算的股数进场。 轮动选股策略由下单信号和资金管理信号组成;下单信号用于判断筛选条件是否满足、量比计算、三均线进出场条件是否满足,并且将筛选条件、量比值、当根bar的收盘价、三均线进场条件赋值给pmm全局变量;资金管理信号调用pmm全局变量中的值,用于量比排序、允许满足条件的股票进场、进场股数计算。 二、策略绩效 我们以上证50的50只成份股为一篮子股票,数据范围为2017-02-01到2017-12-08,周期为5分钟,手续费为成交金额的0.04%,指标运算参考的最大bars数量设置为50,初始资本为1000000,单个部位最大曝险率100%,总部位曝险率100%,保证金占100%的合约价值,最大潜在损失比率占合约价值的0%,其它地方设置使用默认即可。加载轮动选股策略之后的绩效如下: 图1. 投资组合交易设置 图2. 详细权益曲线
表1. 绩效概要 净利 | 178655.12 | 毛利 | 378682.87 | 毛损 | 200027.76 | 手续费 | 11771.88 | 盈利因子 | 1.89 | 投资组合最大回撤 | 74529.38 | 交易数量 | 54 | 胜率 | 50% | 盈亏比 | 1.89 |
三、投资组合交易关键字 MC中关于投资组合交易的关键字有很多,在这里就不一一阐述,只简单叙述一下轮动选股策略中使用到的投资组合关键字。 如图1所示,一篮子股票如左侧所示,它们依次从上而下进行排列,下单信号加载到一篮子股票中,依从上往下的顺序基于每一个股票执行计算,最后资金管理信号再计算,正如图中前头指示的顺序就是投资组合交易计算的顺序;为方便叙述,这里区分两个概念:一个是投资组合交易策略,另一个是策略;每一个策略都是一个股票与下单信号的组合,而投资组合交易策略由很多这样的策略与资金管理信号的组合。每一个策略都有一个策略编号,依次为策略编号0(图1中的最上方)、策略编号1一直到策略编号49(图1中的最下方),这个策略编号决定着它们计算顺序。 pmm_set_my_named_num关键字为当前策略设置一个数值型全局变量,例如:pmms_get_strategy_named_num(“name”,value1)语句将数值value1存储到全局变量”name”中,其它策略需要通过策略编号及全局变量名称来调用该关键字设置的数值。 pmms_get_strategy_named_num关键字通过指定策略编号和数值型全局变量名称来调用存储的数值,例如:pmms_get_strategy_named_num(1,”name”)返回的是策略编号为1中的名称为”name”的全局变量的数值。 portfolio_currententries关键字前面有portfolio,表明它返回的值是基于投资组合策略整体的值,所以该关键字返回的是投资组合当前未平仓的交易笔数。 pmms_strategies_count返回投资组合中的策略的数量,若一篮子股票的数量为50,那么该关键字的返回值是50。 Initialcapital在投资组合策略中,该关键字返回的是图1中圈出来的初始资本的值,这里是1000000。 portfolio_netprofit返回的是投资组合策略已经平仓的获利金额,这个关键字区别于浮动盈亏。 pmms_strategies_deny_entries_all关键字所有策略发送进场委托单。 pmms_strategy_allow_entries允许指定的策略发送进场委托单,例如:pmms_strategy_allow_entries(1)语句允许策略编号为1的股票进场。 pmms_strategy_set_entry_contracts关键字设置指定策略编号的商品进场的仓位大小,例如:pmms_strategy_set_entry_contracts(1,100)语句允许策略编号为1的股票进场100股。
四、注意事项 图1中的初始资金需要填写您的资金账户中真实的资金,因为无论是回测还是实盘交易,都会取这个设置的资金进行仓位控制和下单;例如,10手螺纹需要40000元,而若您在初始资本中设置的是10000元,那么当委托10手螺纹时,实际上只有进场2笔螺纹;所以,一句话就是这里的初始资本需要填写真实的资金数量。 图1中指出的“单个部位最大曝险率”用通俗的话说就是单个商品占用总资金的比例,而单个商品可占用的最大资金等于(初始资本+净利(即已经平仓获利金额)+浮动盈亏)*单个部位最大曝险率,单个商品会通过两种方式占用资金:一种是保证金,另一种是最大潜在损失,这两种方式如图1中圈出来的部分,它们会在每次商品进场时被计算在内,也就是每次进场时计算占用的资金。单个商品可占用的最大资金必须大于实际占用的资金,这个是由投资组合本身控制的,它会根据资金情况控制委托的数量。 这里的轮动选股投资组合策略使用参数account_per来计算股数,我们本来可以使用自带的关键字来调用上面所说的“单个部位最大曝险率”来代替account_per,但是实际上并不能完全精确的将25%的资金转换成相应的股数,并且该股数还是100的倍数,例如,若我们使用“单个部位最大曝险率”计算出3000股用于进场,而实际进场时,可能只可以下单2999股,那么国内每次买入的股数必须是100的倍数,但是MC自身并不能自动将2999股转换成2900股;所以,基于此原因,我们这里将“单个部位最大曝险率”设置成默认的100,而使用参数account_per来表示可用资金比例。 因为股票在这里并没有考虑杠杆,没有期货中的保证金,所以这里图1中的保证金选项设置成100% 最大潜在损失设置成0%,当设置成0%时,单个商品实际占用的资金就不会考虑最大潜在损失的金额。 本投资组合策略只是一个模板,对于上述的筛选条件、进场条件、量比排序,您可以根据自己的想法进行更改替换。 上证50成份股见附件txt文档,直接在投资组合中右键“商品”,选择“导入商品列表”,然后选择该txt文档即可批量导入上证50成份股。
|