06、构思一个可以实盘交易的策略
经过前几篇文章的介绍,大家应该已经对Ptrade有了一些基本的了解。接下来让我们尝试构思一个可以真正用来实盘交易的策略。以下是阿猪总结的一些基本思路,供大家参考:
一、明确需求
编写量化交易策略的本质仍然是编写程序,所以在动手写代码之前应当先有明确的需求,否则在写代码的时候容易想一出是一出,影响写代码的效率和代码的质量。
思考下边的两个问题,有助于让你明确自己的需求:
1、我希望赚的是什么钱
回答“赚什么钱”这个问题,可以帮助你明确自己的策略在大方向上属于哪种类型、什么风格。
比如有些投资者偏爱高分红的稳健型股票、有些投资者喜欢挖掘高成长性的股票、有些投资者热衷于短线打板、有些投资者专注于ETF日内交易……赚不同类型的钱,首先应当尽量熟悉相对应的底层逻辑、游戏规则,然后才好有的放矢地构建自己的交易体系,并通过量化交易策略去实现。
阿猪认为,在股市中赚钱从根本上可以分为两条途径,一是通过价格变动赚钱,二是通过股息红利赚钱。
关于影响价格变动的因素,阿猪认为主要是估值偏好变动和盈利水平变动:
(1)估值偏好的变动
在短期,题材炒作、重大的利好利空消息等,通常会导致投资者对某个板块或某只个股的估值偏好发生明显的变化,从而使股价发生较大幅度的波动,甚至出现一定级别的趋势性变化。
在中长期,市场估值偏好会产生周期性的变化,从而使股价产生周期性的波动(牛熊市)。投资者也会因长期看好/看衰某个行业而产生趋势性的估值偏好变化,从而在盈利水平给定的情况下,使股价产生趋势性的变化。对于给定的行业,业内竞争力强的龙头企业通常也会有一定的估值溢价。
(2)盈利水平的变动
对于周期性的行业,行业内公司的盈利水平会呈现出周期性的变动,从而带动股价产生周期性的变动。
对于处于长期上升/衰退期间的行业,行业内的公司的盈利水平会呈现出趋势性的变化,从而在估值水平给定的情况下,带动股价产生趋势性的变化。
2、为了赚这个钱,我该如何构建相应的交易体系
在大方向上明确了自己策略的类型之后,接下来需要构建适合自己的交易体系,用于明确具体的需求。以下是几个通常需要考虑的因素:
(1)选择交易工具
举一个例子,假如阿猪长期看好某个行业的发展前景,希望分享其发展红利,阿猪可以选择购买该行业内公司的股票,也可以选择购买该行业主题的ETF,或者购买前述个股、ETF的看涨期权,还可以卖出前述个股、ETF的看跌期权。
不同的交易工具具有不同的特性,合理的选择交易工具或者其组合,可以帮助投资者灵活的实现多样化的目标。使用不同的交易工具或者组合,还应当综合考虑交易成本、风险敞口等因素。
(2)选择交易标的
选择好交易工具后,接下里就是选择具体的交易标的了。
对于某一类交易工具,往往拥有多个不同的交易标的,他们具有不同的特性。例如A股市场目前有五千余只个股,分别具有不同的市值、流动性、财务状况等。
在目前公开分享的量化交易策略中,通常代码的大部分篇幅都是用在选股和择时上。阿猪的教程也以A股的正股为例。
在量化交易的实践中,选股的方式存在两个极端:一个极端是选择哪些因子、如何设定参数、如何组合,都是依靠投资者的个人主观决策,而策略只是以程序化的方式去实现这套主观的规则。另一个极端是把历史数据投喂给“黑匣子”训练,然后从结果中得到回测效果最理想的因子、参数及组合方式,但对于为什么这样的组合会有理想的结果却“不知其所以然”。
(3)确定买卖时机
通过前述步骤确定了交易工具和交易标的后,标的池中标的的价格水平或者走势在当下可能并不符合我们的预期。这个时候我们并不想立刻下单交易,而是耐心地等待标的的价格水平或者走势符合我们的预期之后再下单。
例如:趋势跟随型的投资者可能希望等待个股的K线站稳半年线后再买入;基本面投资者可能希望等待个股的PE回落到20以下再买入。
选股与择时之间既有区别又有联系,有时候甚至很难区别。大体来讲,选股更侧重于体现策略的大方向,而择时更侧重于买卖点的把握。
(4)资金管理
可以简单的把资金管理理解为“我打算分配多少资金给这个策略”。
我们可以综合考虑自身的财务状况、投资目标、风险偏好、风险承受能力等,再结合经济周期、金融市场环境等因素确定大类资产配置的类别和比例,确定用于股市投资的资金量。
如果资金量较大,而投资标的过于集中,或者市场的流动性较低,还应当考虑策略的市场容量。
(5)仓位管理
对于给定的资金量,可以结合策略的特性来制定适合的仓位管理规则,从而兼顾风险和收益的平衡。
一个好的策略除了应当有尽可能高的交易胜率,还应当让你能够在市场中长期存活下来,确保不会因连续的亏损或者其他极端情况而元气大伤。而仓位管理就是管控风险的重要手段之一。举例如下:
假设我们股票账户整体愿意承受的最大亏损是5%,单只股票愿意承受的最大亏损是20%,那么可以将单只股票的持仓上限控制在5%÷20%=25%。
假设我们股票账户这个月愿意承受的最大亏损是5%,当前的仓位是20%,当前持仓股的预设止损价位是亏损10%,那么留给我们的可亏损额度就是5%-10%×20%=3%。接下来应当确保每次下单的仓位和预设的止损都应当确保整体账户的潜在亏损不超过5%,否则当月就不应该再下单;对于持仓股,也应当确保整体账户的潜在亏损不超过5%,否则就应该减仓调整。
假设我们比较看好一只股票,但是既担心买入后会继续下跌,又担心不买会踏空错过行情。那么可以考虑先买入三分之一,等下跌到一定价位后再买入三分之一,待上涨趋势基本确立后再买入三分之一。
以上只是简单的举例,投资者应当根据自身的实际情况制定适合自己的仓位管理规则。
(6)止盈止损
先来举一个简单的例子:假设我们的选股胜率是60%,每笔交易在亏损10%时止损,而在盈利5%时就止盈,那么从概率的角度来看,这个策略长期的期望收益是5%×60%-10%×40%=-1%。
从这个例子可以看出,在选股胜率给定的情况下,止盈止损规则对策略期望收益的影响是显而易见的。一个好的止盈止损规则,应当能够帮助我们在交易胜率给定的情况下,尽可能的提高策略长期的期望收益。
列举几个止盈止损规则:
对于趋势跟随型的投资者,半年线向下击穿年线,表示长期上涨趋势可能已经结束,考虑清仓止盈。
对于短线交易者,K线跌破近期的横盘支撑位,可能表示短期将进入下跌行情,考虑清仓止损。
此外,止盈止损规则也可以结合仓位管理规则一起使用。例如,如果技术指标显示上涨动力不足,则先卖出一半仓位,锁定利润。如果后市继续上涨,则不会踏空;如果后市继续下跌至预设价位,则卖出剩余仓位。
二、梳理策略的代码实现逻辑
当我们明确了自己的需求后,可以结合Python语法、各种内置或第三方Python模块的功能、Ptrade的策略框架体系、各种API函数的功能来梳理需求的实现逻辑,将交易体系转化为量化交易策略的代码。(参考链接:Ptrade策略框架简介、API文档)
在接下来的文章中,阿猪将给出一个简单但完整的策略代码作为示例,并介绍一些编写Ptrade量化策略时常用到的小功能的实现方法。