主页 > imtoken钱包代币 > 数字货币自动投资升值

数字货币自动投资升值

imtoken钱包代币 2023-01-18 14:19:38

九、ATChain产品设计投资运营设计

1.开通币安账户后设置API:

1

2.ATChain 设置相应的API:

1

3.选择量化策略(目前推荐DEMA,)

1

策略回测结果:

1

量化策略开发流程

一、考虑交易成本的策略调整

我们以第一种策略(正循环套利_赚人民币策略为例)。

1

图:正周期套利(赚取人民币)策略示意图

我们设计的套利策略是被动套利策略。具体来说,我们在LTC/BTC、LTC/CNY和BTC/CNY三个市场中作为吃单。

在 LTC/BTC 市场下买单,必须以市场的卖价(ltc_btc_sell1_price)加上一定的滑点(ltc_btc_slippage,以百分比表示)作为买单价格,即:

P3 = ltc_btc_sell1_price*(1+ltc_btc_slippage)

同样,在 BTC/CNY 市场下买单,必须以市场的卖一价(btc_cny_sell1_price)加上一定的滑点(btc_cny_slippage,以百分比表示)作为买单价格,即:

P1= btc_cny_sell1_price*(1+btc_cny_slippage)

同样,LTC/CNY 市场的卖单价格可以推导出如下:

P2 = ltc_cny_buy1_price*(1-ltc_cny_slippage)

假设每个市场的费率如下(以百分比表示):

LTC/BTC: ltc_btc_fee
BTC/CNY: btc_cny_fee
LTC/CNY: ltc_cny_fee

在 LTC/BTC 市场净买入 1 LTC 实际上需要买入 1/(1-ltc_btc_fee) LTC,其中 ltc_btc_fee 的比例为交易平台收取的手续费。购买 1/(1-ltc_btc_fee) LTC 所需的 BTC 数量为:

ltc_btc_sell_1_price*(1+ltc_btc_slippage)/(1-ltc_btc_fee)

在 LTC/CNY 市场,卖出 1 LTC 获得 CNY:

ltc_cny_buy_1_price*(1-ltc_cny_slippage)*(1-ltc_cny_fee)

BTC/CNY市场,净买入

ltc_btc_sell_1_price*(1+ltc_btc_slippage)/(1-ltc_btc_fee)

BTC,实际需要购买

ltc_btc_sell_1_price*(1+ltc_btc_slippage)/[(1-ltc_btc_fee)*(1-btc_cny_fee)]

BTC,其中btc_cny_fee的比例为平台收取的手续费,对应的要花费的CNY为:

btc_cny_sell_1_price*(1+btc_cny_slippage)*ltc_btc_sell_1_price*(1+ltc_btc_slippage)/[(1-ltc_btc_fee)*(1-btc_cny_fee)]

套利的前提是:获得的人民币>花费的人民币,即:

ltc_cny_buy_1_price*(1-ltc_cny_slippage)*(1-ltc_cny_fee)
>
 btc_cny_sell_1_price*(1+btc_cny_slippage)*ltc_btc_sell_1_price*(1+ltc_btc_slippage)/[(1-ltc_btc_fee)*(1-btc_cny_fee)]

调整后对应的套利条件为:

ltc_cny_buy_1_price
>
btc_cny_sell_1_price*ltc_btc_sell_1_price*(1+btc_cny_slippage)*(1+ltc_btc_slippage) /[(1-btc_cny_fee)*(1-ltc_btc_fee)*(1-ltc_cny_fee)*(1-ltc_cny_slippage)]

考虑到市场利率都在千分之几的水平,不等式可以进一步简化为:

(ltc_cny_buy_1_price/btc_cny_sell_1_price-ltc_btc_sell_1_price)/ltc_btc_sell_1_price
>
btc_cny_slippage+ltc_btc_slippage+ltc_cny_slippage+btc_cny_fee+ltc_cny_fee+ltc_btc_fee

基本含义是:三角套利只有在公允价格与市场价格之间的点差比率大于所有市场价格之和加上滑点之和时才有利可图。

如果点差满足条件,则交易数量的计算规则如下:

首先计算以下值:

LTC/BTC卖单数量:ltc_btc_sell1_quantity*order_ratio_ltc_btc,其中ltc_btc_sell1_quantity表示LTC/BTC卖出一层的数量,order_ratio_ltc_btc表示该策略在LTC/BTC交易中的吃单比例;LTC/CNY买单取量:ltc_cny_buy1_quantity*order_ratio_ltc_cny,其中order_ratio_ltc_cny表示该策略在LTC/CNY市场的取单比例;LTC/BTC账户中可用于购买LTC的BTC数量和可替换的LTC数量:btc_available - btc_reserve,可替换为(btc_available - btc_reserve)/ltc_btc_sell1_price LTC。其中,btc_available表示账户中可用的BTC数量数字货币下单冻结,btc_reserve表示账户中BTC的最低预留数量(此值由用户根据自己的风险偏好设置,值越高,用户的风险偏好越低)。BTC/CNY账户中可用于购买BTC的CNY数量,可兑换的BTC数量及对应的LTC数量:cny_available - cny_reserve,可更换为(cny_availablecny_reserve)/btc_cny_sell1_price BTC,即相当于 (cny_available-cny_reserve)/btc_cny_sell1_price/ltc_btc_sell1_price LTC。其中:cny_available表示账户中可用的人民币数量,cny_reserve表示账户中预留的最低人民币数量(此值由用户根据自己的风险偏好设置,值越高,用户的风险越低)风险偏好)。LTC/CNY账户中可用于出售的LTC数量:ltc_available – ltc_reserve 其中,

得到上述5个值后,取其中的最小值,得到LTC的数量,作为LTC/BTC市场的订单数量。然后根据LTC/BTC交易的数量,得到需要对冲的LTC和BTC数量,分别在LTC/CNY和BTC/CNY市场下单。完全对冲。

最小交易单元的处理规则如下:

如果要放置的LTC数量小于最小LTC交易单位的一定倍数(如2倍)(取LTC/BTC和LTC/CNY两个市场的最小LTC交易量的最大值) ,这种套利将被放弃;

如果待放置LTC数量对应的BTC数量(LTC数量乘以系数ltc_btc_sell1_price)小于最小BTC交易单位的一定倍数(取LTC/BTC中最小BTC交易数量的最大值, BTC/CNY 市场)(如 2 次),则放弃此套利。

二、三角套利策略流程

初始化:

将以下资产放入 BTC/CNY 市场: BTC:1 BTC,至少预留 20%(btc_reserve = 20%) CNY:20,000 元,在 LTC/CNY 市场预留至少 20%(cny_reserve = 20%) 进入以下资产: LTC:100 LTC,至少预留 20%(ltc_reserve = 20%) CNY:20,000 元,至少预留 20%(cny_reserve = 20%) 将以下资产放入 LTC/BTC 市场: LTC:100 LTC,至少 20% 预留 (btc_reserve = 20%) BTC:1 BTC,至少 20% 预留 (ltc_reserve = 20%)

套利条件:

1.如果

(ltc_cny_buy_1_price/btc_cny_sell_1_price-ltc_btc_sell_1_price)/ltc_btc_sell_1_price
>
btc_cny_slippage+ltc_btc_slippage+ltc_cny_slippage+btc_cny_fee+ltc_cny_fee+ltc_btc_fee

然后进行正循环套利:

1

正周期套利的顺序如下:

先去LTC/BTC接单买入LTC,卖出BTC,然后根据LTC/BTC的交易量使用多线程同时在LTC/CNY和BTC/CNY市场进行对冲。LTC/CNY 市场接单卖出 LTC,BTC/CNY 市场接单买入 BTC。

2.如果

(ltc_btc_buy_1_price-ltc_cny_sell_1_price/btc_cny_buy_1_price)/ltc_btc_buy_1_price
>
 btc_cny_slippage+ ltc_btc_slippage+ ltc_cny_slippage+btc_cny_fee+ltc_cny_fee+ltc_btc_fee

然后进行逆周期套利:

1

逆周期套利顺序如下:

先去LTC/BTC接单卖出LTC,买入BTC,然后根据LTC/BTC的交易量使用多线程同时在LTC/CNY和BTC/CNY市场进行对冲。LTC/CNY 市场接单买入 LTC,BTC/CNY 市场接单卖出 BTC。

如果以上两个条件都不满足,继续等待套利机会。

账户内转账条件:

BTC/CNY、LTC/CNY、LTC/BTC 各市场计价货币和基础货币的存量跌至最低预留比例(如20%)或以下,触发账户内转账。转账流程如下:

取消LTC/BTC市场的未成交订单 取消BTC/CNY市场的未成交订单,订单未成交部分的市价补单平行于2),LTC未成交订单/CNY 市场取消。未成交部分委托进行账户内转账补市盘,转账结果如下:

BTC/CNY市场中的BTC = LTC/BTC市场中的BTC

LTC/CNY 市场 LTC = LTC/BTC 市场 LTC

BTC/CNY市场的CNY = LTC/CNY市场的CNY(目前已经合并,暂时没有问题,如果是ETH,需要保证ETH账户的CNY = BTC账户的CNY)

三、策略监控和异常处理

我们首先定义一个异常处理方法,称为操作1,如下:

操作名称:操作 1

操作介绍:停止LTC/BTC订单,完成LTC/CNY和BTC/CNY对冲,发出警报,停止程序。

运营流程:

第一步:停止在LTC/BTC市场下单,取消市场上未完成的订单;第二步:对于LTC/CNY和BTC/CNY市场的未完成订单,进行轮询等待,超时后取消未成交部分,使用市价单补单,确保对冲完整;第三步:发送相应的报警邮件停止策略

定义另一个异常处理方法,称为操作 2,如下:

行动名称:行动2

操作介绍:停止LTC/BTC下单,完成LTC/CNY和BTC/CNY对冲,并发出警报。

运营流程:

第一步:停止在LTC/BTC市场下单数字货币下单冻结,取消市场上未完成的订单;第二步:对于LTC/CNY和BTC/CNY市场的未完成订单,进行轮询等待,超时后取消未成交部分,使用市价单补单,确保对冲完整;第三步:发送相应的报警邮件

再定义几个参数如下:(注:以下所有资产总量包括可用部分和冻结部分,包括LTC/BTC市场、LTC/CNY市场、BTC/CNY市场)

人民币净头寸 = 当前人民币总额 - 初始人民币总额

BTC 净持仓 = 当前 BTC 总量 - 初始 BTC 总量

LTC 净头寸 = 当前 LTC 金额 – 初始 LTC 金额

策略盈亏计算公式=(当前CNY总额-初始CNY总额)+(当前BTC总额-初始BTC总额)*当前BTC/CNY价格+(当前LTC总额-初始LTC总额)*当前LTC/人民币价格

CNY头寸偏度=ABS(BTC/CNY市场CNY-LTC/CNY市场CNY)/(BTC/CNY市场CNY+LTC/CNY市场CNY),由于LTC和BTC市场共用一个CNY,所以这个策略暂不存在人民币头寸偏度的问题。

BTC头寸偏度=ABS(BTC/CNY市场BTC-LTC/BTC市场BTC)/(BTC/CNY市场BTC+LTC/BTC市场BTC)

LTC头寸偏度= ABS(LTC/CNY市场LTC-LTC/BTC市场LTC)/(LTC/CNY市场LTC+LTC/BTC市场LTC)

需要监控的指标及对应的流程如下:

当前盈亏监控:如果策略的亏损超过一定数量,执行“操作一”,然后排查亏损原因,清除后手动重启策略。净仓监控 CNY净仓监控:如果CNY净仓的绝对值超过一定数量,执行“操作1”,然后排查净仓原因,澄清后手动重启策略。BTC净持仓:若BTC净持仓的绝对值超过一定数量,则执行“操作1”,然后排查净持仓原因,待澄清后再手动重启策略。LTC净持仓:如果LTC净持仓的绝对值超过一定数量,执行“操作1”,再排查净头寸原因,澄清后再手动重启策略。头寸偏度监测 CNY头寸偏度监测:由于LTC和BTC市场共用一个统一的CNY,所以这种策略不存在这个问题。BTC持仓偏度监测:如果BTC持仓偏度超过一定范围,则执行“操作1”,然后手动调整持仓使持仓偏度为0,然后手动重启策略LTC持仓偏度监测:如果LTC持仓偏度如果超过一定范围,则执行“操作1”,然后进行手动调仓,使持仓偏度为0,然后手动重启策略,监控未成交的对冲订单数量:

四、需要注意的问题

LTC/BTC 市场的订单是整个套利周期的起点。LTC/BTC 市场的订单必须同时在 LTC/CNY 和 BTC/CNY 市场进行对冲。对于 LTC/CNY 和 BTC/CNY 市场的对冲订单,请先尝试下限价单。如果交易没有完成,逐步修改价格到可以执行的价格。多次尝试(超时)后,如果仍有未执行的部分,市场价单补货保证完全套期保值。在整个套利过程中,为了简化价格转换计算,不考虑BTC/CNY市场的市场深度。因此,在估算BTC/CNY(btc_cny_slippage)的套期保值成本时,需要结合近期BTC/CNY行情的深度进行调整。如果 BTC/CNY 市场太清淡,建议设置一个比较大的套期保值成本(btc_cny_slippage)。本文中所有的买一卖一价格均指行情深度盘整后的价格。深度市场合并规则为:LTC/BTC市场,按照0001价格合并(即1个价格缺口对应0.0001比特币,约2元)。买单向下合并,卖单向上合并。数据表示如下:

合并前的深度:

(asks)
0.010413            12
0.010412            20
0.010312            33
0.010112            13
(bids)
0.010109            45
0.009812            22
0.009812            10
0.009712            2
0.009612            30

组合深度:

(asks)
0.0105        32
0.0104        33
0.0102        13
(bids)
0.0101        45
0.0098        32
0.0097        2
0.0096        30

因此,该策略中买一卖一的价格和数量已经包含了合并前几档的深度。此类合并规则确保我们在计算套利机会时保持保守。如果你想做ETH/BTC交易,把文中的LTC换成ETH就行了~

开源工具

PyAlgoTrade:Python 算法交易库

PyAlgoTrade 是一个 Python 算法交易库,专注于回测和支持纸质交易和实时交易。假设您有一个交易策略的想法,并且您想使用历史数据对其进行评估并查看它的行为方式。PyAlgoTrade 允许您以最小的努力做到这一点。

Backtrader:用于回测和交易的功能丰富的 Python 框架

backtrader 让您可以专注于编写可重复使用的交易策略、指标和分析器,而不必花时间构建基础设施。

Zipline 是一个 Pythonic 算法交易库

Zipline 是一个 Pythonic 算法交易库。它是一个用于回测的事件驱动系统。Zipline 目前在生产中用作回测和实时交易引擎,为 Quantopian 提供动力——一个免费的、以社区为中心的托管平台,用于构建和执行交易策略。