邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助。
最近比特币行情很好,突破前期2万美金历史高点后,短短22天又再次突破4万大关。
连央视都在半个月内连发7篇涉及比特币行情的微博,实属罕见。
在此期间,也有很多同学在微信上问我行情:
我的回答都是:不知道。
这不是敷衍,是真的不知道。
首先想要预测行情,特别是短期行情,很难的。
其次我们做量化的也不用去预测行情,按照既定的策略跑就行。
但有的同学手里没币,又担心错过,内心很是煎熬。对此我的建议是:如果非要操作的话,那就定投吧。
所谓的定投就是不看行情定期、定量买入,比如下面这个例子:
每周四,不管涨跌都买1000美金
当然你也可以根据实际条件选择定投周期和金额,比如每天买一次,每次100美金。
看到这有的同学可能会问,在当前4万的价格开始定投合适吗,万一这就是本轮行情最高点呢?
其实哪怕是最高点,也不怕。
历史高点开始定投
比特币在2017年12月末涨到了上一轮高点2万美金。之后开始下跌,最低跌到3200,等到19年5月回升到8000,价格从高点腰斩一半以上。
假设有个“运气很差的人”就从2万的顶点开始定投比特币,到19年5月比特币8000时,他的收益如何?
上部分:BTC行情 下部分:定投曲线
我之前用Python和数据进行了详细的分析,这位运气很差但又执着的人从2万定投到8千时,就已经赚钱了。
更别说现在价格是4万左右,早就赚得盆满钵满了。
具体分析过程可以看我之前的文章《在两万美金顶点买入比特币的他,现在怎么样了?》
我举这个案例就是想说,从高点2万美金开始定投,没多久就能赚钱。那现在4万美金开始定投,你觉得会亏钱吗?
所以放心的开始吧。这也是我推荐新手进入币圈最保险的方法。从定投开始慢慢熟悉市场,之后再进行其他操作。
当然定投的前提是长期看好,不看好的话就没必要定投了。
2020年7月我在论坛发的贴
2.定投的问题
不少朋友看了我之前的文章后有在实践定投,但在过程中也遇到了问题:
1. 定投实在是太机械了,不操作我手痒,能花式定投来提高收益率吗?
2. 定投什么时候卖出呢?有些同学并不希望一直投下去,希望在高点卖出获利。
这个两个问题确实困扰了很多定投人,本文就针对这两个问题,给出一种更为实用的定投策略。
先看看怎么提高定投收益率。
上图是比特币某段时间的日K线图,蓝线是250日的均线。
所谓均线就是每天计算之前250天收盘价的均值,再把这些值连起来的线。
从图中可以看出,比特币的价格波动虽然大,但它始终围绕均线上下波动。
价格高于均线过多会回落,低于均线过多会反弹。这种现象,在金融学中被称为均值回归。
1.策略概述
根据均值回归,我们构建了一个均线定投策略:价格高时少买,价格低时多买。
具体操作看下面的例子。
上图是比特币的K线图,其中A、B、C是三个定投点,蓝线为均线。
A点价格高于均线29%,正常定投在A点买入1000元,而我们认为价格高于均线,处于高位,应当少投一点,比如只投700元。
价格进一步上涨到B点,比均线高43%,普通定投还是买入1000元,但我们认为价格进一步被高估,需要再次减少投入,所以只投500。
C点的价格比均线高51%,越偏越多,均线定投的金额也进一步减小到400。
再来看看价格低于均线的情况:
价格越低,均线定投金额越多
D、E、F也是三个定投点,它们的价格都低于均线,并且一个比一个低,按照低位多买的逻辑,价格越低于均线,均线定投的金额越多。
所以原本都是投1000,但我们可以拍脑袋的决定在D点投1200、在C点投1300,在E点投1400。
不过量化投资需要精确,不能用拍脑袋大法,我们需要构建模型确定每次到底投多少。
2.均线定投策略
先人为设置好基础定投金额(假设为1000)。
每到定投日就套用:
基础定投金额 X 定投率 = 实际定投金额
计算当期的实际定投额。定投率由价格偏离均线的程度决定,详见下表:
比如价格偏离均线8%,对应的定投率为0.9,用基础金额1000乘以0.9就能得到实际投入为900。
有了这张表就能将均线定投策略规范化:
只要查表就能计算定投金额
很多人介绍一种投资方法时可能到此就结束了。但这个方法真的有效吗?
均线定投策略这么复杂,真的会比普通定投更赚钱吗?
很多骚操作都是如此
我们量化投资的好处就是可以用程序对历史数据进行测试,检验投资方法,避免用真金白银试错。
3.策略收益
测试的Python代码和数据如下:
可以加我微信xbx3642获取代码和数据
为了对比均线定投和普通定投的表现,我们设置如下规则:
定投从17年末2万高点开始,至21年1月初。每周定投1次。
普通定投每次投入1000美金,均线定投的基准金额也为1000美金。
回测结果如下,我们先看普通定投:
蓝线:累计投入资金 橙线:持币市值
从17年末2万点开始定投至今,普通定投总投入15.8万美金,买入的比特币目前市值57.45万,3年翻了3.64倍。
这个表现已经非常不错了,均线定投表现能更好吗?
上图是均线定投的表现,累计投入14.65万,比普通定投少一些,但最终的持币市值高达59.99万,资产翻了4.09倍。
投入了更少的钱,还获得了更多的比特币,数据说明均线定投策略确实能够提高收益率。
并且还没结束,到目前为止我们用的都是默认参数,如果适当修改参数,策略的表现可能会更好。
4.参数
之前的定投策略用的是250日均线。其实可以把均线天数看作一个参数。
我们可以尝试不同的均线,比如100天、300天或500天。
此外,原来的定投率是价格每偏离10%,定投率改变0.1,其实这里的10%和0.1也可以看作参数:
把原来每偏离10%,定投率改变0.1,改为每偏离x%,定投率改变y。其中x被称为单位范围,y被称为单位定投率。
这样我们就从原始策略中提取出了三个参数:均线天数D、单位范围x、单位定投率y。
在代码中想要修改这些参数也非常简单:
对13-15行代码做相应修改即可
我们尝试把参数改为:均线天数D=600,单位范围x=3%,单位定投率y=0.45。
修改后的策略表现如下:
蓝线:累计投入资金 橙线:持币市值
蓝线很长一段时间是一条水平线,这是因为价格高于均线太多,定投率小于0,此时停止定投。
修改后的策略累计投入11.39万,最终持币的总市值高达70.2万,相较于原始策略(投入14万,市值59万),总投入进一步减少,持币市值进一步增大。
均线定投这三个参数理论上可以取任意值,这意味着还有其它更好的可能。
我强烈建议你运行下代码看看其它参数的结果,自己动手实操下会有更深的感悟。可以加我微信xbx3642获取代码、数据。
除了提高定投收益外还有一个问题,定投该如何卖出呢?
很多同学并不会卖。可能辛苦定投了好久,结果在2万就全卖了,错失之后大涨的机会。
要在定投策略中加入卖出机制其实也很简单。
还是均线定投策略。当价格往上偏离均线过多时,均线定投的定投率1-ny可能会小于0,例如当n=6,y=0.2时,1-6y=-0.2,小于0。
此时为了避免定投率小于0的情况,我们规定当定投率小于0,会被强制设置成0。
那只要取消不小于0的限制,不就是可以卖出了吗?
定投率小于0就按照负的定投率卖出,例如基础金额为1000,当定投率为-0.2时,就卖出200。
这样的规则看着也更自然,在代码中想要实现卖出也非常简单:
第12行的can_sell参数从False改为True
加入卖出机制后,策略的表现会更好吗?
我们依旧使用之前的参数:D=600,x=3%,y=0.45进行定投测试,得到如下结果:
上图中代表累计投入的蓝线,在19年5月左右开始逐渐下跌,说明策略已经在卖出了。
最终的总投入为-550,也就是说不仅没投钱,还赚了550美金。因为策略是可以卖出的,卖出金额大于投入金额,总投入就是负数。
与此同时,还赚了价值40.42万美金的比特币。
不仅没投钱还白赚了40万的比特币,妥妥的白嫖啊。
本文我们主要介绍了几种不同的定投策略,并且比较了它们的表现。
在这些策略中,我比较推荐允许卖出的策略。有买有卖,更贴近实际。
有的小伙伴可能觉得允许卖出的策略只赚了40万,不够多。
其实最终的总市值是和基础定投额成正比的,在执行可卖定投策略时,可以适当的提高基础定投额。
关于本文如果还有其它不明白的地方,可以加我微信xbx3642沟通。