主页 > 2023年最新imtoken钱包下载安卓 > 比特币和莱特币在量化交易中的趋势数据分析

比特币和莱特币在量化交易中的趋势数据分析

本节主要示例使用阿布量化系统(abu_quant)来分析比特币和莱特币的趋势和回测。

阿布量化是一个免费开源的基于python的量化系统。 支持股票、期货、外汇、数字货币(BTC\ETH\LTC\ETC\BCC)等。

源地址是:

一、比特币、莱特币走势数据分析

在abupy内置的沙箱数据中:

很多人说做币市比较容易,因为整个市场只有比特币和莱特币两种币,但是真的是这样吗?

量化策略失败结果的人工分析是对策略结果影响较大的一个环节,但在失败结果分析之前,交易标的的历史数据

分析也是对策略结果影响很大的一个环节。 通过观察交易标的,分析价格走势、趋势的分布、策略的适应程度,从而为该环节涉及的交易标的生成定制化的具体策略。 因为这篇文章只是一个简单的使用文档,所以并没有涉及太多关于事务的知识。 本节仅说明一些简单的数据分析和可视化分析技术。

首先使用ABuSymbolPd.make_kl_df接口向对象btc和ltc请求btc和ltc沙箱中的数据:

备注:使用下面的btc.tail(7)可以看出交易日是连续的,因为比特币和莱特币一年365天都可以交易

# btc是比特币symbol代号btc = ABuSymbolPd.make_kl_df('btc', start='2013-09-01', end='2017-07-26')# ltc是莱特币symbol代号ltc = ABuSymbolPd.make_kl_df('ltc', start='2014-03-19', end='2017-07-26')btc.tail(7)

比特币量化策略_比特币量化交易策略_比特币手机量化软件

接下来,将 ABuMarketDrawing.plot_simple_two_stock 放大到一个水平进行趋势比较。 趋势基本相似,ltc的启动比btc慢:

ABuMarketDrawing.plot_simple_two_stock({'btc': btc, 'ltc': ltc})

比特币手机量化软件_比特币量化交易策略_比特币量化策略

由于去年的走势与前一年大不相同,我们分别切出btc365和ltc365:

btc365 = btc[-365:]ltc365 = ltc[-365:]

使用ABuKLUtil.date_week_wave统计交易日震荡区间可以发现:

ABuKLUtil.date_week_wave({'btc': btc, 'btc365':btc365, 'ltc':ltc, 'ltc365':ltc365})

比特币量化交易策略_比特币量化策略_比特币手机量化软件

以下统计周期的上升均值、下降均值、数量及比例:

使用 ABuKLUtil.p_change_stats 查找:

ABuKLUtil.p_change_stats({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

btc日涨幅平均值2.615, 共770个交易日上涨走势

如下图ABuKLUtil.wave_change_rate所示,比特币和莱特币的日振幅涨跌幅均在2.0以上,满足日内交易统计套利的条件:

备注:美股在1.8以上被认为具备统计套利条件。 此外,还有交易量等几个参数需要综合计算。 后面的章节会详细解释

ABuKLUtil.wave_change_rate({'btc': btc, 'ltc': ltc})

btc日振幅涨跌幅比:2.068436

使用ABuKLUtil.date_week_win查看每日涨跌概率:

ABuKLUtil.date_week_win({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

比特币手机量化软件_比特币量化策略_比特币量化交易策略

使用 ABuKLUtil.date_week_mean 查看具有正负变化的日均值:

ABuKLUtil.date_week_mean({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

比特币量化交易策略_比特币量化策略_比特币手机量化软件

下面使用 ABuKLUtil.p_change_bcut_vc 统计:

ABuKLUtil.bcut_change_vc({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

比特币量化交易策略_比特币量化策略_比特币手机量化软件

上面bcut_change_vc的使用无法知道(-inf, -10]和(10, inf)的正无穷大和无穷大的具体值,使用qcut_change_vc:

ABuKLUtil.qcut_change_vc({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

比特币量化交易策略_比特币量化策略_比特币手机量化软件

上面通过数据转换分析分析比特币和莱特币,下面通过可视化分析比特币和莱特币

2 比特币和莱特币走势可视化分析

下面在AbuTLine中封装了一个使用可视化界面分析数据的函数:

备注:AbuTLine具体实现及接口功能请阅读AbuTLine源码

def show_tl(tc='btc', show_cnt=365, offset=0, step_x=1.0):

比特币量化策略_比特币手机量化软件_比特币量化交易策略

比特币量化策略_比特币量化交易策略_比特币手机量化软件

比特币量化交易策略_比特币手机量化软件_比特币量化策略

metrics_func rolling_mean=2940.278963120883, metrics_func y_fit=1674.1519187819645

比特币手机量化软件_比特币量化策略_比特币量化交易策略

best poly = 3, zoom=False

上面的show_tl函数如果要切换观察周期,需要不停的改参数,太麻烦了。 下面使用ipywidgets的交互插件进行可视化控制:

from ipywidgets import interact

比特币量化策略_比特币量化交易策略_比特币手机量化软件

通过以上数据分析和可视化分析,对于比特币采用与以往策略相同的参数和策略组合及参数分配,其实是不合适的,因为币市的振幅太大,趋势分布混乱,停止profit 和 stop 的 loss 设置也不清楚。 其实最合适的量化策略就是做一些统计套利策略。 关于高频统计套利相关策略,后面章节会以比特币和莱特币为例。

下一节,不管回测结果如何,我们先进行一个与上一个相同策略下的回测示例。

3. 比特币回测,莱特币市场

与A股市场和港股类似,首先设置abupy量化环境为E_MARKET_TARGET_TC代表币市,代码如下:

# 设置市场类型为港股abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_TC#买入因子,卖出因子等依然使用相同的设置,如下所示:read_cash = 1000000# 买入因子依然延用向上突破因子buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},

继续使用 run_loop_back 进行回测。 前面的示例回测使用 n_folds 参数。 下面是另一种写法的例子,使用start和end作为参数:

choice_symbols=None 或者用 ['btc', 'ltc'] 都可以,如果用 None 就做全盘测试,但是因为币市只有 btc 和 ltc,所以这里传 ['btc', ' ltc'] 与传递 None 相同的结果。

通过以下:

abupy.beta.atr.g_atr_pos_base = 0.5

调整了默认持仓管理的控制参数。 仓位管理类默认使用AbuAtrPosition。 调整abupy.beta.atr.g_atr_pos_base=0.5的函数可以理解为将每笔交易的买入资金基数设置为初始资金的50%,g_atr_pos_base默认值为0.1,即资金金额的10%用作购买基础。

之所以需要调整资金管理的持仓基数,是因为回测的股票池只有btc和ltc两种。 为了提高资金利用率,需要调整g_atr_pos_base的值。

备注:其实不需要特别关注abupy.beta.atr.g_atr_pos_base的位置,根据回测结果中的策略资金利用率不断调整即可,策略资金利用率不是只与回测使用的股票池数量有关,还与回测使用的买入策略数量有关。 比如下面的回测比特币量化策略,虽然每次买入的仓位都调整到了高位,但之所以策略资金利用率依然不高,是因为使用了买入策略。 只有两种投资策略。 如果有多个策略且策略生效频率很高比特币量化策略,即使股票池中只有一只股票,策略资金的利用率也会很高。

更多仓位管理请阅读AbuPositionBase、AbuAtrPosition或《量化交易之路》相关内容

# 注意这里把atr资金管理的仓位基数设置为0.5,即50%abupy.beta.atr.g_atr_pos_base = 0.5abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,

买入后卖出的交易数量:43

比特币量化策略_比特币手机量化软件_比特币量化交易策略

从收益率曲线对比发现,已经完全输给了基准收益率。 虽然策略收益率也有:392%,既然是高风险产品,不高收益率是不对的。 不要认为它是贪婪的。 俗话说卖白菜就是这样,卖白菜挣钱。

备注:币市使用的基准市场为比特币

提高突破策略盈利能力的最简单方法是:

# 卖出因子只使用AbuFactorAtrNStop,且止盈止损参数都设置100sell_factors = [

买入后卖出的交易数量:0

比特币手机量化软件_比特币量化策略_比特币量化交易策略

哈,如上所示,其实这是在自欺欺人。 卖出因子只用AbuFactorAtrNStop,止盈止损参数全部设置为100,即买入后不卖出。 我相信大多数人都会赔钱。 不卖,坚持持有亏损的部分,自称是价值投资者和基本面分析师,认为应该长期持有,做长线投资,但如果有一点利润,你必须赶紧套现。 做了这么多,能支持一些,其实已经很了不起了。

交易中应该追求的是让利润尽可能多地奔跑,尽快止损。

接下来,使用严肃的方法来选择策略参数。 第一,买入因子继续沿用之前的60,突破42日是个大问题。 从以上数据分析来看,币市的趋势周期明显小于这两个值 。 那么到底选择什么样的值才是合适的呢? 这里可以使用abu量化文档《Section 7 Finding the Optimal Parameters and Scoring of the Strategy》来选择参数。 下面只介绍突破循环的另一种方法。

使用abupy中的ABuKLUtil.resample_close_mean函数,先对上一章回测的tsla的数据进行resample_close_mean

ABuKLUtil.resample_close_mean(ABuSymbolPd.make_kl_df('usTSLA'))

比特币量化交易策略_比特币量化策略_比特币手机量化软件

ABuKLUtil.resample_close_mean 的作用这里不再赘述。 如果你有兴趣自己阅读源码,这里你只需要知道一件事。 使用周期突破策略选择的周期应该是ABuKLUtil.resample_close_mean返回值在0.08左右时的重采样周期。

观察上面tsla数据resample_close_mean的结果,60D和42D都在0.08左右,所以之前用过的突破策略,60天突破和42天突破,都适合tsla作为策略。 (其实从上面可以看出,21d、42d、60d、90d、120d其实都可以适配tsla,基本适配大部分炒股品种)

以下对比特币和莱特币数据使用 resample_close_mean:

ABuKLUtil.resample_close_mean({'btc': btc, 'btc365': btc365, 'ltc': ltc, 'ltc365': ltc365})

比特币手机量化软件_比特币量化交易策略_比特币量化策略

从输出可以看出,10d以上不适合比特币和莱特币作为周期参数:

10D 0.0847 0.0760 0.0958 0.1147

下面回测使用10d和12d,止盈参数stop_win_n由3.0修改为7.0:

备注:止盈参数的设置要根据产品的风险来确定。 风险越大,止盈也必须加大。 不然其他策略再怎么优化,参数回报也不高,7.0就是我。 随机数,读者可以尝试用其他值进行测试

# xd: 10, xd: 12buy_factors = [{'xd': 10, 'class': AbuFactorBuyBreak},

abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,

买入后卖出的交易数量:229

比特币手机量化软件_比特币量化策略_比特币量化交易策略

上面的回测结果已经可以和benchmark的收益媲美了,读者可以发现这一个的收益要高于上面那个持有未卖出的收益:

'stop_loss_n': 100, 'stop_win_n': 100

收益好很多,更重要的是采用了多种避险策略,止损参数依然是1.0:

'stop_loss_n': 1.0, 'stop_win_n': 7.0,

依旧使用风控止损策略AbuFactorPreAtrNStop,参数依旧为1.5

{'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5}

依旧使用风控止损策略AbuFactorPreAtrNStop,参数依旧为1.5

仍然使用利润保护止盈策略AbuFactorCloseAtrNStop,参数仍然使用1.5

{'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}

还有一点关于比特币,莱特币市场也比较特殊,购买数量不是整数,精确到小数点后三位,最低交易数量为0.01个币,交易单的buy_cnt如下所示:

abu_result_tuple.orders_pd.buy_cnt

2013-09-29 968.117

以下章节将以比特币和莱特币定制买卖策略为例进行讲解,敬请关注。