交易系统有两种形式:基于模型和数据挖掘。本文讨论基于模型的策略。即使基本算法不复杂,正确开发它们也有其困难和陷阱(否则任何人都会这样做)。严重的市场效率低下只会给系统带来相对较小的优势。任何小错误都可以将成功的策略变成失败的策略。而且您不一定会在回测中注意到这一点。
趋势
价格曲线中的动量可能是最重要,利用最多的异常。此处无需赘述,因为趋势跟随是该博客上整个文章系列的主题。趋势跟随的策略很多,经典的是移动平均交叉法。这种“hello world”策略通常会失败,因为它无法区分实际动量和价格曲线中的随机高峰或低谷。
问题是:势头并非一直存在于所有市场中。任何资产都可能具有较长的非趋势期。与普遍看法相反,这不一定是“侧向市场”。随机行走曲线可以上下移动,但仍具有零动量。因此,对于趋势跟踪系统而言,一些检测实际市场状况的良好过滤器必不可少。这是一个最小的Zorro策略,该策略使用低通滤波器检测趋势反转,并使用MMI指标确定何时进入趋势状态:
该策略的利润曲线:
均值回归
均值回归策略相信资产的“实际价值”或“公允价格”。交易者在实际价格比他们认为的便宜时进行购买,而在价格更高时进行出售。与随机游走相比,这会使价格曲线更频繁地恢复为均值。随机数据的平均恢复时间为75%(此处为证明),因此高于75%的任何数据都是由市场效率低下引起的。一个模型:
半衰期因子越高,平均回归值越弱。价格序列的均值回复半衰期通常在50-200巴的范围内。您可以通过y t-1和(y t-1 -y t)之间的线性回归来计算λ。由于允许公平价格浮动,因此价格序列不必一定会经历均值回归。它只需要像随机行走一样减少漂移。通常通过从价格曲线中删除趋势并将结果标准化来利用均值回归。这将产生一个振荡信号,当其接近顶部或底部时可以触发交易。这是一个简单的均值回归系统的脚本:
高通滤波器会抑制30 bar以上的所有周期,从而从价格曲线中消除趋势。结果通过Fisher变换进行归一化,该变换产生数据的高斯分布。这使我们能够确定在1和-1处的固定阈值,以将尾部与生成的钟形曲线分开。如果价格在任何方向进入尾巴,则会触发一项交易,因为预期它很快就会重回钟声。为了检测均值回复状态,脚本使用了Hurst指数。随机游走的指数为0.5。高于0.5开始动量状态,低于0.5则开始平均反转状态。
均值回归利润曲线
统计套利
策略可以利用两个或多个资产之间的相似性。这允许通过在第二资产中的反向头寸对冲第一资产,并以这种方式从平均价差的价格转换中获利:
[pmath size = 16] y〜=〜h_1 y_1 – h_2 y_2 [/ pmath]
其中y1和y2是两种资产的价格,乘h1和h2是它们的套期保值比率。套期比率以差y的平均值为零或恒定值的方式计算。计算套期比率的最简单方法是y 1和y 2之间的线性回归。然后可以将上述平均回归策略应用于y。
资产不必是同一类型;一个典型的套利系统可以基于指数ETF与其主要股票之间的价格差异。当y不平稳时(意味着其均值趋于缓慢波动),必须实时调整对冲比率以进行补偿。这 是一个 博客作者使用卡尔曼滤波器的建议。
R教程中的简单套利系统:
价格约束
价格约束是一种造成恒定价格波动或确定价格范围,下限或上限的人为力量。最著名的例子是本系列第一部分中提到的EUR / CHF价格上限。但是,即使取消上限,欧元/瑞郎的价格仍然受到限制,这次不是由国家央行执行,而是由于当前欧元和瑞郎的显著的购买力不对称。波动价格的一个极端示例是EUR / DKK对(请参见下文)。所有这些限制条件都可以用于交易者的策略中。
EUR / DKK价格范围2006-2016
周期
非季节性周期是由价格曲线的反馈引起的。当交易员相信资产的“公允价格”时,他们通常会在价格与该价值达到一定距离时出售或购买头寸,以期实现逆转。或者当最喜欢的价格运动开始减速时,他们关闭获胜头寸。这样的影响可以使大量交易者之间的进出交易同步,并导致价格曲线在几个周期内保持稳定的周期内波动。通常,许多此类循环会叠加在曲线上,如下所示:
[pmath size = 16] y_t〜=〜hat {y}〜+〜sum {i} {} {a_i sin(2 pi t / C_i + D_i)}〜+〜epsilon [/ pmath]
当您知道主导周期的周期 C i和阶段D i时,只要周期持续,就可以计算出最佳的交易进入点和退出点。可以使用频谱分析功能检测价格曲线中的周期-例如,快速傅立叶变换(FFT)或仅是一组窄带通滤波器。以下是2015年10月欧元/美元的频谱:
欧元/美元频谱,周期长度(以巴为单位)
利用周期比趋势跟踪或均值回归要难一些。您不仅需要计算频谱主要周期的周期长度,还需要计算其相位(用于在正确的时刻触发交易)和振幅(用于确定是否存在一个值得交易的周期)。这是一个准系统脚本:
所述DominantPhase函数确定相位和在光谱的主峰值的周期长度; 后者存储在rDominantPeriod变量中。相位转换为正弦曲线,向前移动 π/ 4。通过此技巧,我们将获得一条正弦曲线,该曲线位于价格曲线之前。因此,我们在这里进行真实的价格预测,唯一的问题是价格是否会遵循我们的预测。这通过将在主导周期的价格曲线为中心的带通滤波器,并测量它的振幅(确定一个我在公式)。如果幅度高于阈值,则可以得出结论,我们有足够强的周期。然后,脚本在超前正弦曲线的波谷处输入多头,在波峰处输入空头。由于周期是短暂的,因此交易时间受ExitTime限制为最多10个周期。
从损益曲线可以看出,2012年和2014年的时间较长,欧元/美元价格曲线没有强劲的周期。
集群
导致价格波动的相同影响也可以使它们聚集在一定水平上。极端集群甚至可以产生“供应”和“需求”线(也称为“ 支撑和阻力 ”),这是交易研讨会上最喜欢的主题。专家研讨会的讲师可以在任何图表上绘制支撑线和阻力线,无论是猪肚价格还是去年的棒球得分。然而,这些界限的存在仍然有待商榷,几乎没有能够真正识别和利用它们的策略,甚至更少能真正产生利润的策略。价格曲线中的簇仍然是真实的,并且可以在类似于周期频谱图的直方图中轻松识别。
价格形态
它们源于交易者的重复行为。交易者不仅生产,而且还相信许多曲线形态。大部分都是神话(例如,我还没有发现任何统计证据,也没有听说过其他任何能够证实形态存在的研究,例如传说中的预测趋势反转的“头肩顶/头肩底”模式)。但是确实存在一些模式,例如“杯子”或“半杯子”,并且确实可以先于向上或向下运动。曲线图案(不要与烛形图案混淆)可以通过诸如Fréchet算法之类的图案检测方法加以利用。
价格形态的一种特殊变体是“突破” - 长时间横向移动后突然产生的动量。例如,可能是由于交易者倾向于将止损设置为当前高点下方或上方的一小段距离而引起的。触发第一个止损然后加速价格运动,直到触发越来越多的止损。可以通过检测侧向周期然后等待任何方向的第一个移动的系统来利用这种效果。
季节性
“季节”不一定表示一年的季节。供求也可以遵循可以被策略检测和利用的每月,每周或每天的模式。例如,据说S&P500指数通常在一个月的第一天上涨,或者在一天的主要交易时段的清早时段显示出上涨趋势。由于季节性效应易于开发,因此通常寿命短,作用弱,因此仅通过盯着价格曲线很难发现。但是可以通过绘制平均价格曲线差异的日,周或月曲线来找到它们。
缺口
当市场参与者考虑是否建立或关闭头寸时,他们似乎有时间在晚上或周末考虑一下时得出类似的结论。当市场再次开放时,这可能导致价格从不同的水平开始。隔夜或周末的价格差距通常比交易时段内的价格变化更容易预测。当然,可以在策略中加以利用。最近在Zorro论坛上讨论了“ One Night Stand System ”,这是一个简单的货币周末差额交易商,利润丰厚。
自回归和异方差
后者是一个花哨的词,它表示:“价格波动很大,并且抖动随时间变化”。ARIMA和GARCH模型是您在金融数学中遇到的第一个模型。他们假设可以使用过去收益或过去波动率的线性组合来确定未来收益或未来波动率。这些模型通常被认为仅仅是理论上的,没有实际用途。不正确:您可以像使用其他任何模型一样使用它们来预测明天的价格。您可以检查相关图 -当前收益与先前柱的收益之间的相关性统计信息-以确定ARIMA模型是否适合某个价格序列。
价格冲击
当公司或组织发布影响市场的好消息或坏消息时,价格冲击通常发生在星期一或星期五上午。即使不知道消息,策略也可以检测到最初的价格反应并迅速跳入潮流。当大冲击震撼市场时,这尤其容易。这是一个简单的外汇投资组合策略,可评估货币的相对强度以检测价格冲击:
上方的蓝色曲线反映了货币价格小幅上涨和大幅度上涨带来的利润。您可以清楚地识别出英国退欧和瑞郎的价格上限冲击。当然,如果可以以某种方式及早发现和解释新闻,则这种策略会更好。一些数据服务为新闻事件提供二进制评估,例如“好”或“坏”。由Zacks或Xignite等数据服务提供的收益报告尤其令人关注。根据收益报告包含哪些意外,股价和隐含波动率在报告日可能会急剧上升或下降,并产生快速利润。
为了了解以更具创造性的方式使用新闻时可能发生的情况,我推荐罗伯特·哈里斯(Robert Harris)撰写的《恐惧指数》(Fear Index),这是任何金融黑客的必读书籍。