BTC涨这么多,还能买吗?要卖吗?| 量化定投策略告诉你答案【附代码】

引言:      

 邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助。          

 

 

 

最近比特币行情很好,突破前期2万美金历史高点后,短短22天又再次突破4万大关。

 

连央视都在半个月内连发7篇涉及比特币行情的微博,实属罕见

 

在此期间,也有很多同学在微信上问我行情:

 

我的回答都是:不知道。

 

这不是敷衍,是真的不知道。

 

首先想要预测行情,特别是短期行情,很难的。

 

其次我们做量化的也不用去预测行情,按照既定的策略跑就行。

 

但有的同学手里没币,又担心错过,内心很是煎熬。对此我的建议是:如果非要操作的话,那就定投吧。

 

01

什么是定投

 

所谓的定投就是不看行情定期、定量买入,比如下面这个例子:

每周四,不管涨跌都买1000美金

当然你也可以根据实际条件选择定投周期和金额,比如每天买一次,每次100美金。

 

看到这有的同学可能会问,在当前4万的价格开始定投合适吗,万一这就是本轮行情最高点呢?

 

其实哪怕是最高点,也不怕。

 

02

在最高点开始定投

 

  1. 历史高点开始定投

 

比特币在2017年12月末涨到了上一轮高点2万美金。之后开始下跌,最低跌到3200,等到19年5月回升到8000价格从高点腰斩一半以上

 

假设有个“运气很差的人”就从2万的顶点开始定投比特币,到19年5月比特币8000时,他的收益如何?

上部分:BTC行情   下部分:定投曲线

我之前用Python和数据进行了详细的分析,这位运气很差但又执着的人从2万定投到8千时,就已经赚钱了。

 

更别说现在价格是4万左右,早就赚得盆满钵满了。

 

具体分析过程可以看我之前的文章《在两万美金顶点买入比特币的他,现在怎么样了?

 

我举这个案例就是想说,从高点2万美金开始定投,没多久就能赚钱。那现在4万美金开始定投,你觉得会亏钱吗?

 

所以放心的开始吧。这也是我推荐新手进入币圈最保险的方法。从定投开始慢慢熟悉市场,之后再进行其他操作。

 

当然定投的前提是长期看好,不看好的话就没必要定投了。

2020年7月我在论坛发的贴

 

2.定投的问题

 

不少朋友看了我之前的文章后有在实践定投,但在过程中也遇到了问题:

 

1. 定投实在是太机械了,不操作我手痒,能花式定投来提高收益率吗?

 

2. 定投什么时候卖出呢?有些同学并不希望一直投下去,希望在高点卖出获利。

 

这个两个问题确实困扰了很多定投人,本文就针对这两个问题,给出一种更为实用的定投策略。

 

03

如何提高定投收益率?

 

先看看怎么提高定投收益率。

 

上图是比特币某段时间的日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获取代码、数据。

 

 

04

定投如何卖出?

 

除了提高定投收益外还有一个问题,定投该如何卖出呢?

 

很多同学并不会卖。可能辛苦定投了好久,结果在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万的比特币,妥妥的白嫖啊。

图片

 

 

 

05

总结

 

本文我们主要介绍了几种不同的定投策略,并且比较了它们的表现。

 

在这些策略中,我比较推荐允许卖出的策略。有买有卖,更贴近实际。

 

有的小伙伴可能觉得允许卖出的策略只赚了40万,不够多。

 

其实最终的总市值和基础定投额成正比的,在执行可卖定投策略时,可以适当的提高基础定投额。

 

关于本文如果还有其它不明白的地方,可以加我微信xbx3642沟通。

 

 

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个简单的Python代码实现网格交易策略: ```python import ccxt import time # 初始化交易所API exchange = ccxt.binance({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_SECRET_KEY', }) # 设置交易对 symbol = 'BTC/USDT' # 设置网格参数 grid_size = 10 # 网格大小为10 USDT grid_num = 10 # 网格数量为10个 buy_price = 0 # 初始化入价格为0 USDT sell_price = 0 # 初始化出价格为0 USDT # 获取当前市场价格 def get_price(): ticker = exchange.fetch_ticker(symbol) return ticker['last'] # 等待1秒,避免频繁请求API time.sleep(1) # 获取当前市场价格 current_price = get_price() # 计算网格价格 for i in range(grid_num): buy_price = current_price - (grid_size * (i + 1)) sell_price = current_price + (grid_size * (i + 1)) print("Buy Price:", buy_price, "Sell Price:", sell_price) # 等待1秒,避免频繁请求API time.sleep(1) # 下单入网格 for i in range(grid_num): order = exchange.create_order(symbol, 'limit', 'buy', 0.001, buy_price) print("Buy Order:", order) # 等待1秒,避免频繁请求API time.sleep(1) # 下单出网格 for i in range(grid_num): order = exchange.create_order(symbol, 'limit', 'sell', 0.001, sell_price) print("Sell Order:", order) ``` 以上代码实现了一个简单的网格交易策略,具体操作如下: 1. 初始化交易所API,并设置交易对为BTC/USDT。 2. 设置网格参数,包括网格大小和网格数量。 3. 获取当前市场价格,计算出网格价格。 4. 下单入网格。 5. 下单出网格。 需要注意的是,以上代码仅供参考,实际使用时需要根据自己的需求进行修改和优化。同时,量化交易涉及到风险管理等问题,请务必谨慎操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值