介绍
我一直觉得程序员都应该试试量化投资,因为在投资里最忌讳的就是情绪波动,而程序员们都相对理性一些,更加愿意相信规则与数据,而同时程序员们又有能力去实现自动交易,所以我这篇文章主要的目标是面向程序员,给大家介绍一些投资、交易里面比较初级的东西以及背后的原理,关于代码部分会少一些特别细节的说明。所以这篇文章需要的大概背景是会 Python 就行。
网格交易是一个很好的入门的策略。在交易里,我们会有像哲学三大问题一样的疑问:
- 买什么
- 什么时候买,什么时候卖
- 买多少,卖多少
而网格交易主要针对的就是后两个问题的,尝试性地给出一种答案
遇到的问题
废话不多说,先上一个例子。
这张图是黄金在 19年10月10日 到 23日左右1小时的一个走势图。之前是更高的位置,然后经历一次 0.9% 的下跌到了A的位置,然后又在B的位置跌了一个 0.77%,已知在这段时间里黄金都是一个振荡的趋势。这时候我们经常就会听见一些分析师大概会分享这么个说法(或者类似的说法):
-
在振荡盘中,A处是上方跌下来的,并且保持了一段时间,所以这个是一个阻力位,而B这个位置是一个支撑位,所以我们在这个振荡区间里,就可以做高抛低吸。
-
简单来说就是如果我们还有持仓,那我们在 C 这个位置就应该抛掉,如果我们错过了C,这个市场还给了我们 D,E两次机会,如果都没抛掉,那在F的时候就跌下来了。
-
而如果我们这时到了 F 这个位置后呢,因为有 B 这个支撑点,所以可以开始买入。
-
然后一直到 H 处,又来到了上方阻力位,然后我们就可以卖出
-
…
这个说法好像听起来不错,理论都是好的,但是实际情况是什么样的呢?假设对于处于振荡区间这点是确定的条件了,我们实际上会遇到的情况将会是这样的:[图2]
哪条才是阻力线? 又或者: [图3]
哪条才是支撑线?
如果图2里我们说用之前跌的最低点作为阻力的话,那在图2里最后一根大涨起来之前的一个绿十字星要卖么?还是冒险等一等真的上穿阻力了才卖?
同理如果图3里我们也用之前收盘最低点作为支撑线的话,那最后一根大跌的红线结束后我们要卖么?这时候可是还没跌破支撑哦。
所以这其实就是我们遇到的实际情况,看上去好像我们有一个很详细的操作策略,但到了实盘的时候,我们其实并没有很明确的标准,而最初第一张图里分析师的那些说法虽然没错,但却犯了一个很经典的量化里面的错误就是 “未来函数”,简单的说就是在画线的时候,我是根据未来一段时间的情况画的线,然后再来指导我们当下每个时间点的分析,相当于预知未来了。(这让我想起了小时候老师讲卷子,拿着答案给我们讲过程,讲的头头是道最后发现拿错了一份答案)
网格交易给出的答案
而网格交易的方案是这样的(先看个大概,再下一节有针对每一步的例子):
-
第一步,先估计出未来看盘时间的震荡范围,高值和低值都不用特别找某个特殊值,确定一个就可以。这个高值意味着如果价格超过这点时,我们仓位就会是空仓,而低值意味着如果价格掉到这个值以下,我们就是满仓。到现在为止和刚才的支撑止损线都还是一致的。
-
第二步,选定网格数量,这里我们为了方便计算,就选定为10条线分为11个格子,这样就可以每10%一档从空仓0% 到满仓 100% 全都覆盖了。然后我们为了避免在一条线附近快速震荡,我们在最下一条线之下再画一条线(本质上来说相当于11条线分为12个格子,但这里这么说主要为了更方便解释和操作)
-
第三步,确定初始仓位,我们就可以直接按照第一条 K 线的收盘价落在哪个区间来确定仓位
前面的准备工作做好之后,之后的调仓逻辑如下:
-
记穿越的是第n条线,线从上往下数字增大
-
如果价格上穿第 n-1 条线,卖 10%
-
如果价格下穿第 n+1 条线,买 10%
-
回到调仓逻辑第一步
它和我们普通的交易区别在于什么呢,表面上来看,它把原来的一次交易分成了很多次,实质里有如下一些好处:
-
越密的网格,交易机会越多(但要注意交易手续费),在前面对比的策略中,不到预计的点不交易,如果振荡幅度不够,就会错过很多次交易机会,而在网格交易里,只要振荡到了一个小的格子,就有一次的交易机会。
-
每一个格子其实就相当于交易的 “信心度”,价格涨跌信心不足的时候轻仓做,价格涨跌到信心很足的时候重仓做。在交易里,所谓的信心度也就是经常提到的“概率”:数学期望(预期收益)和方差(风险)之间有一个好的比率的时候,就要重仓,如果没有好的比率的时候,就要轻仓甚至空仓
手动操作网格交易
在这里我们把上面的流程举例说一下:
预备阶段
- 第一步,建立振荡范围,我们计划做黄金19年10月份的交易,下图是黄金19年9月份的走势,可以看出是一个振荡市场,最高在1535左右,最低在1460左右,我们可以随意一些,把高值定为1540,把低值定为 1450:
- 第二步,分为11个格子,以 10%间隔,分别覆盖从 0% 到 100%。下面多画一条绿色的辅助线,
- 第三步,我们来到10月份的图形,黑圈是10月份最初的价格,我们可以看到它是落在70%仓位区间,也就是第8条线之上,所以我们要建立 70% 的仓位(多头,这例子不涉及到做空,下同):
交易阶段
-
我们刚建仓,所以在这里 n = 8
-
第 n-1 条线也就是第7条线,如果收盘价到了这里,我们就以收盘价卖 10%
-
第 n+1 条线也就是第9条线,如果收盘价到了这里,里我们以收盘价买 10%
-
接下来的一个事件是一条长绿阳线上穿第7条线,所以我们卖10%(仓位:60%)此时 n = 7,重新计算买卖的价格线:第6