首页 > 技术 > 区块链量化投资系列课程(4) - 动态平衡策略
艾莉丝  

区块链量化投资系列课程(4) - 动态平衡策略

摘要:NO.1沃伦?·?巴菲特的导师本杰明?·?格雷厄姆曾经在《聪明的投资者》一书中,曾经提到过一种股票债券动态平衡的交易模式。??这种交易模式非常简单:把手中 50
NO.1

沃伦?·?巴菲特的导师本杰明?·?格雷厄姆曾经在《聪明的投资者》一书中,曾经提到过一种股票债券动态平衡的交易模式。

?

区块链量化投资系列课程(4) - 动态平衡策略

?

这种交易模式非常简单:

  • 把手中 50% 的资金投资于股票基金,剩下 50% 投资于债券基金。即股票和债券两者各占一半。

  • 根据固定间隔时间或市场变化进行一次资产再平衡,使股票资产和债券资产的比例恢复到初始的 1:1。

这就是整个策略的全部逻辑,包含了什么时候买卖,以及买卖多少。够简单吧!

?

NO.2

在这个方法中,债券基金的波动率其实很小,远远低于股票波动率,所以债券在这里被当做『?参照锚?』,也就是说,用债券来衡量股票究竟是涨得太多了,还是涨得太少了。

?

  • 如果,股票价格上涨,会使得股票的市值大于债券的市值,当两者市值比率超过设定的阈值时,则对总仓位进行重新调整,卖出股票,并且买入债券,使股债市值比例恢复至初始的 1:1。

  • 反之,股票价格下跌,会使得股票的市值小于债券的市值,当两者市值比率超过设定的阈值时,则对总仓位进行重新调整,买入股票,并且卖出债券,使股债市值比例恢复至初始的 1:1。

?

区块链量化投资系列课程(4) - 动态平衡策略

?

就这样,在动态平衡股票和债券之间的比例,就够享受到股票成长的果实,并且减少了资产波动率。作为价值投资的先驱,格雷厄姆为我们提供了一个很好的思路。既然这是一个完整的策略,为何我们不把它用在数字货币上呢?

?

NO.3

策略逻辑

  • 按照当前的 BTC 的价值,账户余额保留¥5000 现金和 0.1个 BTC,即现金和BTC?市值的初始比例是 1:1。

  • 如果 BTC 的价格上涨至¥6000,即 BTC 市值大于账户余额,并且其之间的差超过设定的阈值,就卖掉(6000-5000)/6000/2个币。说明 BTC 升值了,把钱兑换回来。

  • 如果 BTC 的价格下跌至¥4000,即 BTC市值小于账户余额,并且其之间的差超过设定的阈值,就买入(5000-4000)/4000/2个币。说明 BTC 贬值了,把 BTC 买回来。

?

就这样,不管 BTC 是升值还是贬值,始终动态保持账户余额和 BTC 的市值相等。如果 BTC 贬值了就买一些,等再涨回来,就再卖一些,就好像天平一样。

?

NO.4

那么,如何用代码去实现呢?

我们以发明者量化交易平台为例,首先让我们看一下策略框架:

//?策略参数var?threshold?=?0.05;?//?阈值var?LoopInterval?=?60;?//?轮询间隔(秒)var?MinStock?=?0.001;?//?最小交易量var?XPrecision?=?4;?//?量精度var?ZPrecision?=?8;?//?价格精度//?撤单函数function?CancelPendingOrders()?{

}//?下单函数function?onTick()?{

}//?主函数function?main()?{????//?过滤非重要信息 ????SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");????while?(true)?{?//?轮询模式 ????????if?(onTick())?{?//?执行?onTick?函数 ????????????CancelPendingOrders();?//?取消未成交的挂单 ????????} ????????Sleep(LoopInterval?*?1000);?//?休眠 ????} }

整个策略框架其实很简单,一个?main?主函数、一个?onTick?下单函数、一个?CancelPendingOrders?函数、以及必要参数。

?

NO.5

下单模块

//?下单函数function?onTick()?{????var?acc?=?_C(exchange.GetAccount);?//?获取账户信息 ????var?ticker?=?_C(exchange.GetTicker);?//?获取?Tick?数据 ????var?spread?=?ticker.Sell?-?ticker.Buy;?//?获取?Tick?数据的买卖价差 ????//?账户余额与当前持仓价值的差值的?0.5倍 ????var?diffAsset?=?(acc.Balance?-?(acc.Stocks?*?ticker.Sell))?/?2;????var?ratio?=?diffAsset?/?acc.Balance;?//?diffAsset?/?账户余额 ????LogStatus('ratio:',?ratio,?_D());?//?打印?ratio和当前时间 ????if?(Math.abs(ratio)??0)?{?//?如果?ratio大于?0 ????????var?buyPrice?=?_N(ticker.Sell?+?spread,?ZPrecision);?//?计算下单价格 ????????var?buyAmount?=?_N(diffAsset?/?buyPrice,?XPrecision);?//?计算下单量 ????????if?(buyAmount?

下单交易逻辑条理清晰,所有的注释都已经写到代码里面了,可以点击图片放大查看。

?

主要流程如下:

  • 获取账户信息。

  • 获取 Tick 数据。

  • 计算 Tick 数据买卖价差。

  • 计算账户余额和 BTC 市值价差。

  • 计算买卖条件、下单价格、下单量。

  • 下单,并返回 true。

?

NO.6

撤单模块

//?撤单函数function?CancelPendingOrders()?{ ????Sleep(1000);?//?休眠?1秒 ????var?ret?=?false;????while?(true)?{????????var?orders?=?null;????????//?持续获取未成交订单数组,如果返回异常,则继续获取 ????????while?(!(orders?=?exchange.GetOrders()))?{ ????????????Sleep(1000);?//?休眠?1秒 ????????}????????if?(orders.length?==?0)?{?//?如果订单数组为空 ????????????return?ret;?//?返回撤单状态 ????????}????????for?(var?j?=?0;?j?

撤单模块就更简单了,步骤如下:

  • 撤单前先等待 1 秒,个别交易所,你懂的。

  • 持续获取未成交订单数组,如果返回异常,则继续获取。

  • 如果未成交订单数组为空,即时返回撤单状态。

  • 如果有未成交的订单,则遍历整个数组,并依次根据订单号撤单。

?

NO.7

策略全部源码

//?回测环境/*backtest start:?2018-01-01?00:00:00 end:?2018-08-01?11:00:00 period:?1m exchanges:?[{"eid":"OKCoin_EN","currency":"BTC"}] *///?撤单函数function?CancelPendingOrders()?{ ????Sleep(1000);?//?休眠?1秒 ????var?ret?=?false;????while?(true)?{????????var?orders?=?null;????????//?持续获取未成交订单数组,如果返回异常,则继续获取 ????????while?(!(orders?=?exchange.GetOrders()))?{ ????????????Sleep(1000);?//?休眠?1秒 ????????}????????if?(orders.length?==?0)?{?//?如果订单数组为空 ????????????return?ret;?//?返回撤单状态 ????????}????????for?(var?j?=?0;?j??0)?{?//?如果?ratio大于?0 ????????var?buyPrice?=?_N(ticker.Sell?+?spread,?ZPrecision);?//?计算下单价格 ????????var?buyAmount?=?_N(diffAsset?/?buyPrice,?XPrecision);?//?计算下单量 ????????if?(buyAmount?

借助发明者量化交易平台,短短 80 行代码,一个完整的区块链?BTC 动态平衡策略应运而生。但这么简单的策略,究竟有没有价值呢?往下看~

?

NO.8

接下来,让我们测试一下这个简单的动态平衡策略,看看到底有没有效果。以下是在 BTC 的历史数据上的回测,仅供大家参考。

?

策略参数

区块链量化投资系列课程(4) - 动态平衡策略

?

回测环境

区块链量化投资系列课程(4) - 动态平衡策略

?

回测绩效

区块链量化投资系列课程(4) - 动态平衡策略

?

回测曲线

区块链量化投资系列课程(4) - 动态平衡策略

?

再来一张,同时期 BTC 价格走势图

区块链量化投资系列课程(4) - 动态平衡策略

有没有震精到你。

?

BTC?已经持续了长达 8 个月下跌,甚至最大跌幅超过70%,这造成很多投资者对区块链资产失去信心。本篇策略累计收益高达 160%,年化收益风险比超过 5。对于一个这么简单的投资策略,这个投资回报率已经超过绝大多数梭哈的群众了。

?

NO.9

本篇动态平衡策略,只有一个核心参数(threshold 阈值),是一个很简单的投资方法,追求的不是超额的收益,而是稳健的收益。与趋势策略相反,动态平衡策略却是逆势而动。在市场热的时候减仓降温,市场冷清的时候加仓蛰伏,有点类似宏观经济调控。

其实,动态平衡策略正是秉承了价格不可预测的观念,同时又捕捉价格波动的一门手艺。动态平衡策略的关键核心在设定和调整资产配置比例,还有触发阈值。鉴于篇幅原因,一篇文章没办法做到面面俱到,要知道文字之外,存乎一心。动态平衡策略最重要的是投资思想,你甚至可以把本篇中的单个 BTC 资产换成一篮子区块链资产组合。

区块链量化投资系列课程(4) - 动态平衡策略

?

最后,让我们以本杰明?·?格雷厄姆在《聪明的投资者》一书中的名言来结束本篇:

股票市场并非一个能精确衡量价值的『?称重计?』,相反它是一个『?投票机 』,不计其数的人所做出的决定是一种理性和感性的掺杂物,有很多时候这些抉择和理性的价值评判相去甚远。投资的秘诀就是在价格远远低于内在价值时投资,并且相信市场趋势会回升。

——本杰明?·?格雷厄姆《聪明的投资者》

?

相关阅读:区块链量化投资系列课程(1) - 简介

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:msy2134。