关键词:数字货币 交易所 做市 价格 对冲 空间
作者:比特量化
一、取随机数
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,那么可以暂停交易,或者以很少的交易量来进行交易,或者以低频率来进行交易。