ptrade里的仓位该怎么管住

有不少朋友虽然手里握着不错的交易策略,却往往在仓位控制上犯难,今天我就跟大伙儿唠唠ptrade里的仓位该怎么管住。这篇内容稍微有点长,您要是没耐心看完可以先点个关注。这里有个均线策略,规则挺简单:只要现在的价格比5日或者20日的均价高,就把手里的钱都买进去;要是比这两个均线都低,那就直接把持仓都清空。这个initialize函数是引擎自己在策略启动的时候调用一次的,会把一个context变量传进来。还有那个handle_data函数,也是引擎在开盘期间每隔几分钟就会去调用一次,把context和data这两个变量一起带过来。context你可以把它看成是个工具箱,咱们拿来看看账户里还有多少钱;data里面存的是当天各个股票的实时行情,比如开盘价、收盘价这些。 “def handle_data(context, data):”是个函数声明的写法,注意最后得跟个冒号。写代码的时候不管在哪一层级都得留够两个空格,这样代码看起来才整齐。像“if”、“elif”这些条件判断句后面也要加冒号。前面带着“g.”的变量是全局的,不管在哪个函数里都能用;要是没加“g.”,那它就在声明它的那个函数里才好使。当然你得先声明了变量才能用啊,不能一上来就用还没定义好的东西。 作为老韭菜,我总觉得全仓买入全仓卖出这种操作有点“虎”。咱们可以稍微改改:只在尾盘14点50分的时候动手。如果现在的价格同时比5日和20日均线高,就直接满仓干;要是只比其中一个高,那就买个半仓或者卖个半仓;要是比两个都低了,那就赶紧把手里的货全部清掉。 用自然语言来解释规则就是:先把过去5天的收盘价拉出来(因为是尾盘交易,所以要算上今天的收盘价格),算个5天的平均收盘价;再把过去20天的收盘价拉出来(同样要算上今天),算个20天的平均收盘价。拿到当前价格后看看情况:如果同时高于两个均线就全买;只高于其中一个就半仓操作;要是同时低于两个就全清。 现在咱们把代码写出来看看:要想拿到当前时间可以用context.current_dt这个属性,这样就能得到current_dt这个变量了。想知道现在几点几分就可以用current_dt.hour和current_dt.minute去拿小时和分钟数。ptrade提供的get_history接口默认是不包含今天数据的,所以咱们得先拿前4天的数据,再加上当天的价格一起算平均。(df1['close'].sum() + curr_price) / 5 这里的sum就是求和的意思,先算前4天的总和加上当天价格再除以5就是5天的均价了。 order_target_value是Ptrade提供的接口用来调整股票市值到指定数值的;context.portfolio.portfolio_value表示的是当前账户的总价值。最后那个else一般是放在条件判断的最后表示其它情况的。 看上面的回测结果就知道了,哪怕是这么简单的策略在3个月的时间里表现也挺猛:策略收益是20.6%、最大回测是7.60%、夏普比率2.45、年化收益率103.68%、胜率50%、盈亏比456.39%。下次有什么好东西再跟大家分享!