# 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')
前言:应广大朋友的需求,本期推出“数字货币通用策略系列---搬砖套利”。搬砖套利通俗的将就是不同市场的相同产品进行低买高卖,赚取差价。可以说是熊市中的利器,牛市中的锦上添花。
什么是搬砖套利?
当两个市场的资产价格价差较大时,可以在价格低的市场买入一定数量的资产,在价格高的市场抛售相同数量的资产,赚取差价,俗称“搬砖”。
数字货币的套利流程是什么?
由于数字货币市场发展不太完善,多个交易所之间相同货币的价格存在大小不同的价差,因此存在套利的机会。
流程如下:
这里面价差需要满足主要由几个方面的因素构成:买卖手续费、数字货币钱包转账的手续费等。
例如: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
一周热门 更多>