AlphaMind:趋势跟踪及量化交易系统

合约1+1第三期直播正式开始前我们先热烈欢迎今天主讲的第一位老师AlphaMind

首先介绍一下AlphaMind(A神):全自动量化趋势交易员,合约帝实盘收益超250万,琅琊榜第一期榜首-AlphaMind。

A神给大家带来分享主题是:趋势跟踪及量化交易系统。

AlphaMind:哈喽哈喽~~~各位晚上好, 我们是AlphaMind, 来自国内头部金融机构的交易技术团队。

非常高兴今晚能参加合约帝和火币联合主办的这个活动, 来跟大家分享在币市交易的一些经验。前几期有梁大老师, 熊发发老师, 天启T老师等的精彩分享, 我们团队都一一聆听研读, 真的是受益匪浅! 各位老师的交易理念都有各自独到和出彩的地方, 而我们团队都是统计科学出身, 所以我们习惯从统计中寻找盈利规律, 并交给量化程序去操盘, 希望我们今晚的分享, 能给大家带来一些新思路。

我们将分为三部分来完成今晚的分享:

  1. 寻找Alpha 

  2. 趋势跟踪策略解读

  3. 量化交易框架

熟悉投资的朋友都知道, 找到Alpha因子是在市场中得到长期盈利的方法。我们见过许多人执着于寻找在市场中进行交易的”圣杯”, 寻找百发百中的行情预测因子, 而在我们的认知中, 没有人能对市场进行精准的预测, 任何尝试精准预测市场的行为都将被市场教育(除非你是盘感超人)。

交易员在进入市场进行交易之前, 都应该先搞清楚一个问题, 那就是你将以什么样的方式来获取长期的盈利?

我们不妨假设某次交易获胜的为事件T, 交易获胜的概率为P(T=1), 则交易失败的概率为P(T=0) = 1– P(T=1), 如果获胜的平均收益率为 Profit, 失败的平均收益率为Loss, 则交易的期望盈利率为 E(T) = P(T=1) * Profit + P(T=0) * Loss

如果胜率为60%, 平均每次交易获利3%, 亏损-2%, 则单次的获利期望为1%, 此时我们称交易系统是个正期望的交易系统。正期望, 是一个概率意义上的概念。

可能人会说, 我真实盘了, 还能有理论上的保证么?

这就要祭出数理统计中的大数定理了。

在概率论与统计学中, 大数定律又称大数法则、大数律, 是描述相当多次数重复实验的结果的定律。

根据这个定律知道, 样本数量越多, 则其算术平均值就有越高的概率接近期望值。

大数定律很重要, 因为它“说明”了一些随机事件的均值的长期稳定性。

在重复试验中, 随着试验次数的增加, 事件发生的频率趋于一个稳定值。

比如, 我们向上抛一枚硬币, 硬币落下后哪一面朝上是偶然的, 但当我们上抛硬币的次数足够多后, 达到上万次甚至几十万几百万次以后, 我们就会发现, 硬币每一面向上的次数约占总次数的二分之一, 亦即偶然之中包含着必然。

大数定理是沟通理论期望值与实际试验算数平均值之间的桥梁, 它是正期望系统在长期实践中获得收益的理论保证. 如果你有一个期望为正的交易系统, 在良好的仓位管理策略的辅助下, 必定能实现盈利。

有了数理统计学的理论保证, 我们想要寻找能长期盈利的系统, 无非是在干两件事情:

1. 在保持合理交易频率和胜率的前提下, 提高盈亏比

2. 在保持合理交易频率和盈亏比的前提下, 提高胜率

假设我们的胜率为33%, 盈亏比为2:1, 则每三单能赢一单, 每赢一单可以亏两单, 长期来看这个系统就可以处于一个保本的状态。 

如果我们能将胜率提升到40%, 盈亏比提升到3:1(例如止盈9%, 止损3%), 则系统的期望盈利率便为1.8%。

典型的低胜率、高盈亏比、中交易频率系统, 2~3天交易一单, 则年化盈利率可达100%+。这是提高盈亏比的思路。

假设我们的胜率为50%, 盈亏比为1:1, 长期来看这个系统就可以处于一个保本的状态。

如果我们能将胜率提升到60%, 盈亏比维持在1:1(例如止盈2%, 止损2%), 则系统的期望盈利率便为0.4%。

典型的高胜率、低盈亏比、中交易频率系统, 1~2天交易一单, 则年化盈利率可达100%+。这是提高胜率的思路。

当然, 这里所举的例子都比较粗糙, 但基于统计的交易系统大抵是这么建立起来的。

胜率、盈亏比、交易频率往往会互相牵制, 无法做法完全兼顾, 这个世界上不存在各项指标都完美的交易系统。

高盈亏比的系统适合趋势性较强的市场, 其追求捕捉大趋势的能力, 用少数大盈利的交易来覆盖多数小亏损的交易, 在趋势性强的市场, 往往能带来较高的利润率。

但其缺点也很明显, 由于胜率往往较低, 系统会频繁止损, 容易造成净值曲线的较大回撤, 对交易信心造成打击, 且因为追求单次的高盈利率, 往往持仓时间会较长, 对交易员的心理造成压力。

尤其在币市, 持仓过夜, 一觉醒来, 价格没变, 仓位却没了是经常发生的事情。

高胜率的系统则往往比较适合震荡性较强的市场, 其通常对止盈止损有严格的设定, 追求单次交易的赢面较大。

高胜率策略的净值曲线通常比较稳定, 因为高胜率且严格止损的存在, 出现大回撤的情况较少, 有利于提高交易员, 特别的初级交易员的交易信心。但其缺点也很明显, 由于市场的震荡性和止盈的设置, 往往由于过早止盈而放弃了较大盈利的获取。

一般新手会比较追求高胜率所带来的安全感。

那如果是一个趋势系统, 我们应该怎么通过数据, 来发现其中的盈利因子呢?

关于趋势的形成, 有许多的理论。

典型的基于市场非有效性的假设, 基本面信息的传导需要一定的时间和空间, 而资产价格不能立即反映基本面变化, 价格从非合理区间向合理价格转移的过程中形成了趋势, 而基于行为金融学中的前景理论, 投资者的价值函数是非线性: 

在损失时呈现凸性亏损越大风险偏好越大; 在盈利时呈现凹性, 盈利越大风险偏好越小; 因此在市场波动不强, 价格随机游走的过程中, 盈利者风险偏好降低, 倾向于平仓, 亏损者风险偏好升高, 倾向于扛单; 

而当价格出现大幅波动, 超出交易者的心理承受极限或者强制平仓后, 促成正反馈和踩踏事件, 强化时间序列的相关性, 形成趋势。

趋势跟踪策略尝试捕获, 简单来说, 是一种”追涨杀跌”策略。

当价格向上形成一定形态时买入做多, 在价格向下形成一定形态时卖出平多进行止盈或者止损。

根据我们前一章节的阐述, 趋势跟踪的盈利来源是较高的盈亏比。

截断亏损, 放大盈利, 让利润奔跑, 遇到亏损时及时止损。亏损是人为可控的, 但盈利理论上它能走到哪里是不知道的, 甚至可以定义为无限大(跟踪止盈)。

以有限的亏损换取理论上无限的盈利, 这就是趋势跟踪的重点和盈利的根本原因。

那究竟趋势跟踪策略是如何在趋势性见长的市场中提高盈亏比的呢?

首先, 我们不妨来看一个完全随机的交易策略在市场中是一个怎么样的表现。

我们使用这样一个随机策略: 第一天, 在市场的开盘价处做多, 并在当天的收盘价平多; 第二天, 在市场的开盘价处开空, 并在当天的收盘价平空; 第三天做多, 第四天做空, 如此反复循环。

我们使用BTC季度合约2019年的数据进行回测。

在不考虑手续费情况下, 这个随机策略的盈利率为-7.5%, 是一个接近于0的数据, 也就是说, 当我们进行长期随机交易时, 不赚不赔是一个最终的可预期结果(随着时间推移盈利率会更加接近0)。

胜率为53.7%, 非常接近50%, 而盈亏比为0.84, 接近于1, 这两个指标告诉我们, 随机交易时, 输赢次数大抵是相当的, 且最终总盈利与总亏损同样是大抵相当的。

当然, 交易本质上是个负和游戏, 因为有交易所手续费的存在, 所以这个随机交易策略实盘时长期必定是亏损的。

可以看到, 随机策略的收益分布图, 是一个非常典型Levy分布, 右侧为正收益的数量, 左侧为负收益的数量。

在没有其他干扰的前提下, 95%以上的交易收益率都分布在-2.5%~+2.5%, 收益与亏损是相对平衡的。

如果我们能将大的负收益砍掉, 保留大的正收益, 使得这种平衡得以打破, 就能得到一个高收益比的策略行为。

如何砍掉大的负收益? 答案便是: 止损、及时止损、无条件止损! 我们的目标就是将大的亏损挡在门外, 从而提高盈亏比。

我们尝试来改善这个策略. 我们使用一个非常简单的通道突破系统来进行趋势跟踪。

当价格向上突破近期阻力位时做多, 向下突破近期支撑位时做空, 反向与均线交叉时止盈, 最大止损为3%。在相同的2019年BTC季度合约数据上进行回测。

使用支撑位/阻力位突破, 并用均线止盈和3%最大止损的简单突破系统, 已经将大部分>3%的亏损挡在了门外, 只保留了右侧的正盈利率长尾。

这个简单的突破系统在19年获得了148%的盈利率, 虽然胜率只有34.9%, 但盈亏比达到了3.78。总交易次数为209次, 平均2天做一次交易。中间出现了12.8%的最大回撤, 对于趋势跟踪系统来说, 这算是一个比较小的回撤水平。

这是一个非常典型的低胜率、高盈亏比、中交易频率的趋势跟踪系统。

在下跌趋势中做空, 在上涨趋势中做多, 在横盘期间承受磨损导致趋势跟踪的收益率曲线是不连续的, 胜率低但拥有较高的盈亏比, 简单来说就是“亏小赚大, 在横盘期间过滤掉噪声和虚假信号维持低回撤, 在趋势中快速收益。

厌恶亏损, 保住利润, 买在最低, 卖在最高, 都是人类的本能使然。

当价格往仓位的反方向走, 抱着价格反弹的希望, 持续加仓, 不顾价格给出的止损信号, 往往让投资者损失惨重. 当止损信号出现, 说明市场并不处在我们需要的趋势之中, 果断止损交出亏损, 耐心等待下一个趋势信号的产生, 是一个趋势跟踪交易者的基本素质。

没人知道趋势的顶部和底部将出现在何处, 抱着保住利润的想法去止盈, 锱铢必较, 有可能让你损失更多利润。跟着市场给出的信号建仓止损, 仅仅是为了跟上市场的节奏, 而不是去预测甚至控制它。

有了趋势跟踪的策略, 剩下的就是尝试去使用他进行交易了。

人毕竟是感性动物, 趋势跟踪我们理解是有些反人性的, 连续的止损容易让人怀疑自己。不如交易计算机去做吧!

一个典型的自动化量化交易系统, 需要包含如下几个大的模块:

  1. 交易所信息订阅模块 

  2. 策略信号计算模块

  3. 策略下单模块

  4. 回测系统

交易所行情订阅模块是整个量化交易系统的第一步, 没有行情数据, 策略的运算和下单操作便无从谈起。

一般的量化交易系统都会涉及价格订阅、限价订阅、深度信息订阅等。

价格订阅是实时地接收交易所传输过来的tick级别价格信息, 主要内容是实时的OHLC价格数据和交易量数据等, 一般的实盘策略会根据多个周期的K线来进行交易信号的产生, 所以行情订阅也必须是多周期的;

限价订阅是指交易所的实时限价数据, 火币等交易所为了防止恶意的价格操作, 每一时刻都会对交易挂单的最高价和最低价进行限制, 量化程序在下单时需要参考这个限价信息才能确保挂单价格符合规定;

深度信息订阅择时为了获得交易所实时的深度信息, 包括挂单量、挂单价、挂单方等, 研究价格结构和做市商会尤其注重深度信息的数据质量

有了行情的信息, 就可以进行信号计算了。

常用的趋势跟踪技术指标如布林通道、MACD、双均线/三均线系统、箱体等, 在获得行情数据后都可以根据所需的时间周期参数来进行计算。技术指标的计算可以采用talib等Python库进行加速计算。

例如, 当我们使用简单的9小时均线与20小时均线交叉来判断趋势, 取得实时行情数据data, 在crossup(ma(data, 9), ma(data, 20))为真时平多开空, 在crossdown(ma(data, 9), ma(data, 20))为真时平空开多。

交易信号产生后, 需要使用订单模块进行下单。

订单模块是工程性比较强的模块。一般的趋势跟踪、震荡翻转系统会比较多地用到限价单、市价单、止盈止损单等, 其中开仓多为市价单、限价委托taker单(做市商为在盘口挂单多为maker单), 止损动作与平仓动作即可用限价委托单也可用止盈止损单。

对于每个报单, 系统需要监控其实时状态(包括未成交、部分成交、完全成交、撤销、部分成交撤销等), 对于挂单长时间未成交的订单需要撤销并根据系统状态进行重报。当仓位较大时, 需要对报单进行拆分, 防止大订单对市场的冲击造成滑点以增加交易的成本。

为了保证策略仓位与实际仓位的一致性, 一般的订单模块还需要一个矫正系统, 定时检查仓位状态, 对不一致的仓位进行矫正。

策略在进行实盘前, 要在历史数据进行回测研发, 所以需要回测系统。

回测模块一般是比较单独的系统。一个好的回测系统需要有以下的特征: 

1. 策略语言简单易上手。一般策略师都不是工程师出身, 所以一门简单易上手的策略编写语言是回测系统是否有使用人群的基础

2. 统计指标与图表。一般评价策略常用的指标, 如盈利率、胜率、盈亏比、最大回撤、夏普率等, 还有净值曲线、损益分布图等统计图表

3. 支持多周期K线回测. 一般的策略信号需要参考多个周期数据进行决策, 能方便能导入和处理不用周期数据是优秀回测系统的必备性质

4. 较高的回测精度。交易所每秒钟产生的交易数据是非常多, onTick级别的回测对时间和计算资源的消耗非常高. 一个好的回测系统, 应该在onBar与onTick之间取得一个平衡, 通过重采样等技术使回测速度和回测精度达到一个折中平衡

5. 交易现场的还原。图表总是比数字来的直观, 能复原出一笔交易在回测时如何产生也是一个回测系统应该有的品质, 它能辅助策略师快速定位问题, 改善策略

基本上, 走完上述的数据分析, 策略制定, 编码实盘, 就可以将"印钞机"开动起来了!

量化程序的每个部分都能细细展开来说, 由于时间关系, 无法特别细致的和大家每部分都进行分享。今天的分享内容暂时就告一段落了。

发布了215 篇原创文章 · 获赞 3 · 访问量 2670

猜你喜欢

转载自blog.csdn.net/bitquant/article/details/105735315