数字货币量化通用策略研究系列---搬砖套利--熊市利器

2023-02-23 09:52发布

前言:应广大朋友的需求,本期推出“数字货币通用策略系列---搬砖套利”。搬砖套利通俗的将就是不同市场的相同产品进行低买高卖,赚取差价。可以说是熊市中的利器,牛市
1条回答
1楼 · 2023-02-23 10:06.采纳回答

前言:应广大朋友的需求,本期推出“数字货币通用策略系列---搬砖套利”。搬砖套利通俗的将就是不同市场的相同产品进行低买高卖,赚取差价。可以说是熊市中的利器,牛市中的锦上添花。

什么是搬砖套利?

当两个市场的资产价格价差较大时,可以在价格低的市场买入一定数量的资产,在价格高的市场抛售相同数量的资产,赚取差价,俗称“搬砖”。

数字货币的套利流程是什么?

由于数字货币市场发展不太完善,多个交易所之间相同货币的价格存在大小不同的价差,因此存在套利的机会。

流程如下:

这里面价差需要满足主要由几个方面的因素构成:买卖手续费、数字货币钱包转账的手续费等。

例如:OKEX交易所BTC/USDT价格7000,HUOBI交易所BTC/USDT价格7080,交易手续费分别为0.2%,0.2%。

手续费=7000\times0.002+7080\times0.002=28.16USDT

如果我们在HUOBI卖出1个BTC可以获得7080USDT的收入;在OKEX买入1个BTC需要花费7000USDT,那么

最终收益=差价-手续费=7080-7000-28.16=51.84USDT

最终账户的BTC总数量没有发生变化,但是USDT挣了51.84。

策略回测

回测仍然在币宽(www.nextfintech.io)上进行。当交易所之间的价差大于手续费时,进行搬砖套利,为了模拟钱包之间的转账,这里采用搬砖套利后之间反向交易,致使每轮套利后账户中的BTC数量不发生变化。

策略相关说明:

1、回测时间:2018-08-01至2018-09-01

2、K线频率:tick

3、交易手续费率:0.2%

4、每次套利的BTC数量:0.1个

5、回测交易所和币对:HUOBI的BTC/USDT和OKEX的BTC/USDT

策略代码如下:

# coding=utf-8 ''' //////////////////////////////////////////////////////////////////////// //免责声明:本策略仅供学习使用,请勿直接进行实盘交易,本策略不承诺任何收益。// /////////////////////////////////////////////////////////////////////// 策略名称:搬砖套利 策略说明: 1、两个交易所相同的交易标的(此处使用OKEX.btc_usdt和HUOBI.btcusdt)价差大于双边手续费时,存在套利机会。 2、买入价格低的交易所品种,同时卖出相同数量价格高的交易所品种。 3、回测初始参数:分别添加OKEX交易所的BTC、USDT和HUOBI交易所BTC、USDT的初始持仓。 ''' from __future__ import print_function, absolute_import from nf.api import * import pandas as pd import numpy as np def init(): global exchange #交易所 global front #币对前项 global base #币对后项 global symbol #交易币对 global freq #数据频率 global okex_bid global okex_ask global huobi_bid global huobi_ask global okex_price global huobi_price global okex_fee global huobi_fee exchange=['OKEX','HUOBI'] front='btc' base='usdt' freq='tick' symbol=[0,0] symbol[0]=get_symbol(exchange[0],front,base) symbol[1]=get_symbol(exchange[1],front,base) okex_bid=0.0 okex_ask=0.0 huobi_bid=0.0 huobi_ask=0.0 okex_price=0.0 huobi_price=0.0 okex_fee=0.0015 huobi_fee=0.0015 print('init') subscribe(symbol,freq,count=1) def on_tick(tick): global exchange #交易所 global front #币对前项 global base #币对后项 global symbol #交易币对 global freq #数据频率 global okex_bid global okex_ask global huobi_bid global huobi_ask global okex_price global huobi_price global okex_fee global huobi_fee vol=0.1 ''' 由于行业发展不太完善,因此很难保证数据100%的完整性,需要判断获取数据的数量量是否 满足要求,您可以根据实际需要在策略逻辑中进行相应处理。 ''' if tick['symbol']==symbol[0]: okex_price=tick['price'] if tick['symbol']==symbol[1]: huobi_price=tick['price'] if okex_price!=0.0 and huobi_price!=0.0: if okex_price-huobi_price > okex_fee*okex_price + huobi_fee*huobi_price : print(tick['created_at'].strftime('%Y-%m-%d %H:%M:%S'),'存在套利空间,买入huobi卖出okex--->') #判目前账户是否满足套利 if get_positions(exchange[1],base)[0]['available'] > vol*huobi_price and get_positions(exchange[0],front)[0]['available'] > vol : order_buy={'symbol': symbol[1], 'volume': vol, 'side':1, 'order_type': 1,'price':huobi_price} order_sell={'symbol': symbol[0], 'volume': vol, 'side':2, 'order_type': 1,'price':okex_price} order_batch([order_buy,order_sell],combine=True) print('下单成功,HUOBI买入的BTC转入OKEX,OKEX的USDT转入HUOBI') #调整HUOBI的BTC至 order_volume(symbol[1],get_positions(exchange[1],front)[0]['available']-5,side=2,order_type=1,price=okex_price) #调整OKEX的BTC至 order_volume(symbol[0],5-get_positions(exchange[0],front)[0]['available'],side=1,order_type=1,price=huobi_price) else: print('余额不足') if huobi_price-okex_price > okex_fee*okex_price + huobi_fee*huobi_price : print(tick['created_at'].strftime('%Y-%m-%d %H:%M:%S'),'存在套利空间,买入okex卖出huobi--->') #判目前账户是否满足套利,不满足则调整持仓 if get_positions(exchange[0],base)[0]['available'] > vol*okex_price and get_positions(exchange[1],front)[0]['available'] > vol : order_buy={'symbol': symbol[0], 'volume': vol, 'side':1, 'order_type': 1,'price':okex_price} order_sell={'symbol': symbol[1], 'volume': vol, 'side':2, 'order_type': 1,'price':huobi_price} order_batch([order_buy,order_sell],combine=True) print('下单成功,OKEX买入的BTC转入HUOBI,HUOBI的USDT转入OKEX') #卖OKEX的BTC order_volume(symbol[0],get_positions(exchange[0],front)[0]['available']-5,side=2,order_type=1,price=huobi_price) #买HUOBI的BTC order_volume(symbol[1],5-get_positions(exchange[1],front)[0]['available'],side=1,order_type=1,price=okex_price) else: print(' 余额不足') def on_execution_report(execrpt): print('交易回执:',execrpt,'\n\n\n') def on_error(code,info): print('错误代码:',code,'错误代码说明:',info) def on_backtest_finished(indicator): print('绩效对象打印:',indicator) if __name__ == '__main__': run(strategy_id='86eaae00-b33a-11e8-a9e3-00ffa9185dbb', filename='main.py', mode=MODE_LIVE, token='6778ebc60a3b004bcc7286a5566a28df')

策略回测结果如下:

回测结果如下(所有结果按每日公允汇率币/USD结算):

累计收益率:22.89%

年化收益率:1260.70%

基准收益率:-8.36%

最大回撤:7.42%

Alpha:12.90

Beta:0.49

从回测结果中可以看出搬砖套利实现了稳定的套利交易,且回撤小,特别是对目前数字货币处于熊市中来说,简单的持币不会增值。相比基准可以实现较好的超额收益。接下来我们用分钟级别行情回测搬砖套利,看看是不是有同样好的效果。

策略回测结果如下:

回测结果如下(所有结果按每日公允汇率币/USD结算):

累计收益率:11.46%

年化收益率:269.43%

基准收益率:-8.36%

最大回撤:15.92%

Alpha:3.05

Beta:0.60

从回测效果中看,分钟级别的绝对收益和相对收益明显不如tick级别的好,主要是由于tick级别产生的套利机会会被市场不断的修正,因此分钟级别的套利机会明显减少。

小结:数字货币市场的搬砖套利可谓是熊市中的利器,牛市中的锦上添花。可以实现稳定的收益。但是搬砖也有其弊端:资金容量小,因此大规模的资金会增加策略的冲击成本;滑点和市场延迟也是需要的考虑的因素,特别是市场剧烈波动的时候,市价单往往会造成失败的套利。

声明:本文主要用于共同探讨和学习,请勿直接用于实盘交易。

后续将推出更多系列的量化策略,欢迎大家关注,共同交流。

未经本人同意,严禁转载。

往期文章:

1、数字货币量化通用策略研究系列---均线结合量能突破策略

2、数字货币-BOLL策略

3、量化课堂-技术指标之双均线

4、量化课堂-技术指标之KDJ