数字货币的趋势跟踪策略

趋势跟踪策略是过去20年金融市场中最成功的策略之一。因其易操作,风险可控,收益高获得了许多基金经理和个人投资者的青睐。一般来说,流动性稍差,真实价值发现难度高,波动性高的金融标的都容易在趋势交易中获胜。

那么,在币圈中,日间的趋势交易是否有效呢?我们设计了一套规则,可以通过长期的关注来验证币圈投资是否具有趋势性。

该策略所取数据均来自MATRIX DATA,一家提供加密货币各大交易所深度行情数据的服务商。 现在注册还有机会成为种子用户,永久免费调用数据。(数量有限)

数据种类:实时行情数据(盘口、逐笔、报价、K线); 历史行情数据(盘口、逐笔、K线); 加密货币指数(BB Index); 公有链数据;加密货币基本信息。

数据输出方式:API接口;CSV格式下载

官网网址:https://matrixdata.io

接下来讲一下如何写数字货币的趋势跟踪策略:


  1. 选择PK标的

既然是趋势跟踪策略,就需要有一个能代表大盘走势的指数做为对标。曾经,在数字货币市场上,人们习惯将BTC当做市场风向标,但是随着BTC市值占比的逐年下降,如今占比已不足55%。我们需要一个更加精准,可以涵盖加密货币市场大部分市值并且稳定的指数,我们在这里选取的,就是一支优秀的大盘指数——BBIndex 系列中的B20指数。

BBIndex是由华尔街资深资管专家,顶级商学院多伦多大学金融系教授和Matrix ONE技术团队联合研究开发的数字资产指数。目前由26个指数组成,每3分钟更新一次,以美元和比特币双计价;每个指数是基于其构成的加密货币组合和单个加密货币的市值去指数化处理后加权计算,并使用数学方式平滑此指数的增长曲线。

我们选取的是B20,B20 (BlockChain Top 20 Index) 是根据数字资产30日平均市值进行排序,选择前20名的数字资产纳入成分计算得出的指数,相当于数字市场里的大市值投资。 B20中的数字资产都经历较长的开发周期,在各主流交易所都能够交易,其组成币种的市值总计占整个加密货币市场总值的90%以上。官网:https://www.coinbbindex.com


2. 计算过程

我们选取了BBIndex指数中B20的20个成分币作为数据基础,通过MATRIX DATA的接口获取相关数据,计算出一个趋势指标WT 。然后根据趋势指标产生信号,计算投资权重Wx 。最后,将这个投资权重与B20做比较,验证这个投资权重Wx是否能打败B20。

具体实现过程如下:

(1)获取B20当前成分币和权重

首先,由于B20的成分币是会根据市场情况变化的,所以我们要通过MATRIX DATA 中 bbindex指数成分数据接口获取B20前成分币和权重。平台也支持BBIndex 指数成分数据的CSV下载。

示例代码:

token = 'your token'

headers = {"Authorization": token, "Content-type": "application/json"}

def get_bbindex(name = 'B20'):

request ={'end_time':'2218-10-01',

'begin_time':'2018-01-01',

'index_name':name}

url = "https://api.matrixdata.io/bbindex/api/v2/IndexComposition/"

response = requests.post(url=url, data=json.dumps(request), headers=headers)

result = response.json()

return pd.DataFrame.from_records(result['Result'][-1]['compositions'])

网站提供了四种语言的demo,可以复制粘贴,将其中的参数替换一下就可以直接使用。

(2)获取B20成分币的Bar

以当前时间,通过 K线数据 接口获取B20成分币过去25个频率为1H 的高开低收价,单位为BTC。

示例代码:

token = 'your token'

headers = {"Authorization": token, "Content-type": "application/json"}



def get_bars_data(symbol = 'ETH/BTC.BN',nums = '25',type = '1h'):

url = 'https://api.matrixdata.io/matrixdata/api/v1/barchart?symbol=%(symbol)s&interval=%(type)s&limit=%(nums)s' %{'symbol':symbol,'type':type,'nums':nums}

response=requests.get(url, headers=headers)

data = response.json()

if data['Head']['Code'] == '200':

df = pd.DataFrame.from_records(data['Result'])

return df

else:

print ('get_bars_data',data['Head']['Code'],response)

同样,可以直接复制demo进行修改使用。

(3)计算B20成分币的收益和日内波动率

我们用收盘价计算每个成分币的收益(每日)和日内波动率。

计算公式:

计所有bar的收盘价为 Close,前收盘价为 preClose。

(4)计算成分币的趋势指标WT(Trend)

计算每个成分币趋势指标(我们称为WT),BTC记为0。

计算公式:

(5)根据趋势指标重新分配权重

根据趋势指标WT的排名,前6名平均分配0.5的权重,前7-12名平均分配0.3权重,后8名平均分配0.2的权重。以此得到根据趋势指标排序的权重,记为趋势权重WT。

(这个权重是小编自己设置的,小伙伴们如果有更好的提议可以与我们讨论。)

(6)计算最终趋势权重

最后,用B20权重*0.9 + 趋势权重*0.1得到根据我们的趋势信号计算的投资权重Wx。


3. 数据展示

根据这个计算公式,我们会每天都更新一次数据,并根据数据描绘模拟净值曲线,来展示趋势策略的表现。在推出趋势策略的这段日子里,我们收到了一些热心读者的反馈。有小伙伴认为用过去一天的观察期来判断趋势,过于武断,不能过滤掉短期的波动以及某些庄家短线的恶意拉盘。基于此建议,我们考虑将过去1天的趋势观察期升到5天,这样该指标能提供更为稳健趋势信号,更大程度地过滤掉数字货币短线的随机波动。

接下来让我们看看2018年10月8日的数据

Wx上期收益:0.95%

B20上期收益:0.30%

观察日期:2018.10.09

                                                                          △2018-10-09 15:00 趋势权重WT

                                                                               △2018-10-09 15:00 投资权重Wx

通过过去一段时间的观察,我们将所得到的数据制作出模拟净值曲线图,展现了我们趋势跟踪策略的表现:

                                                                    △2018-10-09 B20 及 投资权重Wx 曲线

根据这个曲线,我们可以看出,Wx的走向紧贴B20,由于截止目前观察期为一个月,其优越性还不明显,需要长期的关注。若小伙伴们有兴趣跟我们一起观察此策略的长期表现,可以关注我们的公众号,我们会定期发布策略表现。

有兴趣交流加密货币量化投资的小伙伴可以留言给我们,我们可以将你拉入群交流。

风险提示:趋势跟踪策略基于历史数据,在市场环境转变时模型存在失效的风险。本文为技术交流,不作为投资信号使用。

猜你喜欢

转载自blog.csdn.net/matrixlolita/article/details/82983305