编辑:唐果
文章部分翻译自The Ocean
正如大家所知,算法帮助金融市场实现了速率、准确性和贸易规约纪律三者的同步超越,在个人投资中,我们也可以利用回溯测试(backtest)去预测我们所选投资战略的实际表现。但是不同算法的复杂程度不同,其实际结果也不尽相同,比如说,想要获得稳定收益均值,有时候均值回归这种简单模型就已经足够准确了,而如果不恰当的考虑交易成本的话,即使用了更高级的算法也还是会亏很多钱。
让我们先来回顾一下算法交易的主要构成要素:
进入市场的信号(Entry signal): 发生什么事件时我们应该进入市场
时间频率(Time frequency): 我们相隔多久应该重新评估市场信号。评估得太频繁,可能我们就需要经常调仓,手续费和人力成本都会增加。评估不够频繁则会导致我们的交易模型没有考虑最新的市场信息。
交易规模(Size): 我应该投入的交易量。如果我对当前所做的买卖决策够自信,可以加大交易量,否则就不要贸然行动。
退出市场的信号(Exit signal): 发生什么事情时我们应该退出市场,锁定利润抑或是终结亏损。
评估基准(Evaluation benchmark): 我们应该将投资表现与什么进行比较、如何比较。考虑收益和亏损的绝对值是没有意义的,大多数时候我们希望我们的模型能够表现得好过市场平均水平。如果忙活大半天建模选股调仓,结果还比不上沪深300指数,那我们岂不是白忙活一场?倒不如直接买个指数基金躺着数钱。
所有上述元素都应该谨慎考虑并融入代码中,这样代码才会运行准确。
下面我们来看一个建立在移动平均数基础上的长期动量交易决策(long momentum based strategy)。所谓长期动量决策,是预先对股票收益和交易量设定过滤准则,当股票收益或股票收益和交易量同时满足过滤准则就买入或卖出股票的投资策略。通俗来说,我们对所选的股票不停的“追涨杀跌”就是动量交易决策的体现。
它的数学模型如下
Xt ~ N(0, σ2)是误差区间,bt是参数, M是这个时间序列的平均值,q是滞后天数
它的预期与变化量如下,
现在让我们来假设参数bi(i=1,2,…q)=1, 我们的采样区间是每天,我们的头寸是一个ZRX,我们的移动平均(MA)滞后期是5天,经过计算我们就会得到如下移动平均值(MA):
如果收盘价格高于移动平均(MA),说明市场价格将成上升趋势,这是我们进入市场的信号,反之,当价格收盘价低于MA,我们应当卖出资产。
收盘价0.925大于MA 0.915,算法告诉我们该以0.925的价格买入一单元了。
开盘价和收盘价都大于MA, 此时我们应继续持有。
而在第五天,收盘价低于了MA,我们应该卖出一单元。我们的评估基准是利润1-0.925=0.075。
这个循环的长期动量交易模型随着天数的延长依然奏效。
当然,这个模型的假设条件是如果价格高于预期平均,那么未来价格会继续上升,我们对这个上升趋势深信不疑。反之,如果有低于原始买入价格的骤降,我们也坚信亏损是不可避免的。这是一个较为简单的模型,因为它依靠的是历史数据,所以准确地将数据参数化就能够实现,而在给定的数据中设置移动平均数也很直接。通过对比MA的值与原始价格我们就能决定何时加仓。如果我们进一步做一些相对复杂的操作,比如调整滞后期、卖空、在操作期间调整投资规模,改变测试模型的频率,这个模型就会实现更多的应用空间。
需要注意的是,交易成本在计量的时候是一定要考虑到的,曾有许多优秀的算法模型因为忽视了这一点而失效。
如果我们的文章对您有帮助的话,欢迎点赞、转发和关注我们。