数字货币做市技术——随机价格

关键词:数字货币 交易所 做市 价格 对冲 空间

作者:比特量化

一、取随机数

ticker如下

{'bid': 0.0131, 'ask': 0.0139, 'last': 0.0134}

使用Python3自带的随机数,

random.uniform(x, y) 方法将随机生成一个实数,它在 [x,y] 范围内。
price_quant = round(random.uniform(ticker['bid'], ticker['ask']))

取值如下

0.013129986458554987
0.013560374857658363
0.01369777925459942
0.013783165049587678
0.013895282774288966
0.013270566637852447
0.01349905426904132
0.013599971576874823
0.013235747582137573
0.013416767768451226

再加个精度设置

price_quant = round(random.uniform(ticker['bid'], ticker['ask']), precision[symbol]["price"])

返回如下

0.0139
0.0131
0.0139
0.0136
0.0139
0.0135
0.0136
0.0138
0.0138
0.0134
0.0137
0.0136
0.0137
0.0132
0.0136
0.0132
0.0139
0.0136
0.0132
0.0138

二、四舍五入的问题

由于四舍五入的问题,会有部分数字撞到盘口值上,这时需要再进一步偏移

price_quant = round(random.uniform(ticker['bid'] + pow(10, -1*precision[symbol]["price"]), ticker['ask'] - pow(10, -1*precision[symbol]["price"])), precision[symbol]["price"]) # 比特量化

返回如下

0.0136
0.0133
0.0138
0.0135
0.0133
0.0133
0.0133
0.0134
0.0137
0.0136
0.0133
0.0135
0.0133
0.0134
0.0134
0.0134
0.0134
0.0137
0.0133
0.0132

得到所要的数据了。

三、问题来了

如果x小于y一个点位,即x<y,这个时候再进行一次偏移,那么x>y,

而在python的定义中,

返回浮点数 N,取值范围为如果 x<y 则 x <= N <= y,如果 y<x 则y <= N <= x。

所以x和y在偏移之前,需要先手工判断点位距离多少。如果已经小于等于1,那么其实就已经没有空间来生成随机价格了,这个时候要么吃买单,要么吃卖单。可能导致亏损。

这个时间要先进行一次交易空间判断

if ((ticker['ask'] - ticker['bid']) / precision[symbol]["price"] <= 1):
    print("<1")
    SPACE = False
else:
    print(">1")
    SPACE = True

如果SPACE为False,那么可以暂停交易,或者以很少的交易量来进行交易,或者以低频率来进行交易。

原文地址:https://www.cnblogs.com/bitquant/p/random-price.html