“该策略涉及在不同交易所交易比特币-美元对,利用价格溢价和折价。它在折扣较低的市场买入比特币,并在Bitfinex卖出,每日重新平衡,投资组合等权重。”

I. 策略概要

投资范围包括在不同交易所交易的比特币-美元对,每个交易对都被视为一个独立的资产。为了计算每个市场的折价,将每个交易所的比特币美元价格(P(m,1))与Bitfinex的价格(P(1,1))进行比较,折价D(m,j)计算为(P(m,1)/P(1,1)) – 1。资产根据折价水平从低到高排序,形成五个基于折价水平的投资组合。该策略涉及在折价最低(溢价最高)的市场买入比特币,并在Bitfinex(市场1)卖出比特币。投资组合采用等权重,每日重新平衡,并涉及使用无风险利率和比特币期货,投资者偿还借入的美元加上任何应计利息。

II. 策略合理性

比特币在不同交易所的价格往往存在显著差异,这与一价定律相悖,原因在于折价或溢价。尽管套利策略可以利用这些差异,但交易费用、提现成本和执行延迟使过程复杂化。尽管存在这些限制,论文表明,即使在考虑了交易成本之后,基于利用这些价格差异的策略仍然有利可图且具有经济意义。这表明,虽然纯粹的套利可能很困难,但所提出的策略仍然可以实际应用并产生可观的回报。投资者可以从交易所之间这些持续且巨大的价格差异中受益,利用市场中的低效率。

III. 来源论文

Cryptomarket Discounts [点击查看论文]

<摘要>

本论文通过考察比特币价格随时间以及跨交易所-货币对的分布来研究加密货币市场的效率。我们记录了比特币相对价格(或折价)的持续差异,半衰期为1天,分布呈尖峰厚尾状,右偏,标准差为3.9%。由于市场分割和与特定地点挖矿活动及投资者关注相关的本地供需冲击的综合影响,资本管制更严格的国家折价变异性更大。

IV. 回测表现

年化回报17.82%
波动率3.28%
β值-0.005
夏普比率4.21
索提诺比率N/A
最大回撤N/A
胜率62%

V. 完整的 Python 代码

from AlgorithmImports import *
import data_tools
# endregion
class CryptomarketDiscounts(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2015, 1, 1)
        self.SetCash(100000)
        # exchanges
        tickers:list[str] = [
            'ABUCOINS_BTCUSD', 'BITBAY_BTCUSD', 'BITSTAMP_BTCUSD', 'BITTREX_BTCUSD',
            'CEX_BTCUSD', 'COINBASE_BTCUSD', 'EXMO_BTCUSD', 'GEMINI_BTCUSD',
            'HITBTC_BTCUSD', 'ITBIT_BTCUSD', 'KRAKEN_BTCUSD', 'OKCOIN_BTCUSD', 
            'YOBIT_BTCUSD'
        ]
        bitfinex_btc_ticker:str = 'BITFINEX_BTCUSD'
        self.quantile:int = 5
        self.portfolio_percentage:float = .1
        self.exchange_btc_symbols:list[Symbol] = []
        # subscribe symbols
        for ticker in tickers + [bitfinex_btc_ticker]:
            security:Security = self.AddData(data_tools.QuantpediaBTCExchanges, ticker, Resolution.Daily)
            security.SetFeeModel(data_tools.CustomFeeModel())
            security.SetLeverage(5)
            if ticker == bitfinex_btc_ticker:
                self.bitfinex_btc_symbol:Symbol = security.Symbol
            else:
                self.exchange_btc_symbols.append(security.Symbol)
    def OnData(self, data: Slice):
        premium_by_symbol:dict[Symbol, float] = {}
        # calculate discount (premium)
        if data.ContainsKey(self.bitfinex_btc_symbol):
            bitfinex_btc_price:float = data[self.bitfinex_btc_symbol].Value
            for exch_symbol in self.exchange_btc_symbols:
                if data.ContainsKey(exch_symbol):
                    exch_price:float = data[exch_symbol].Value
                    
                    premium:float = exch_price / bitfinex_btc_price - 1
                    premium_by_symbol[exch_symbol] = premium
        
        if len(premium_by_symbol) < self.quantile:
            self.Liquidate()
            return
        quantile:int = int(len(premium_by_symbol) / self.quantile)
        sorted_by_discount:list[Symbol] = [x[0] for x in sorted(premium_by_symbol.items(), key=lambda item: item[1])]
        # investing in the markets with the highest discounts
        long_leg:list[Symbol] = sorted_by_discount[:quantile]
        long_length = len(long_leg)
        # liquidate
        invested = [x.Key for x in self.Portfolio if x.Value.Invested]
        for exch_symbol in invested:
            if exch_symbol not in long_leg and exch_symbol != self.bitfinex_btc_symbol:
                self.Liquidate(exch_symbol)
        # trade arbitrage
        for exch_symbol in long_leg:
            self.SetHoldings(exch_symbol, (1 / long_length) * self.portfolio_percentage)
        self.SetHoldings(self.bitfinex_btc_symbol, -1 * self.portfolio_percentage)

发表评论

了解 Quant Buffet 的更多信息

立即订阅以继续阅读并访问完整档案。

继续阅读