-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtools.py
More file actions
153 lines (137 loc) · 4.72 KB
/
tools.py
File metadata and controls
153 lines (137 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import sys, os, asyncio, time, ast, json, boto3
from botocore.exceptions import ClientError
import price_feeds, contracts
from dotenv import dotenv_values
import urllib.request
from urllib.request import Request, urlopen
from multiprocessing import Process
def getSymbolFromName(market,position):
return market.split('_')[position]
def getKey(d,v):
for key,item in d.items():
if item == v:
return key
async def callback(response):
# print(f"Received response: {response}")
return response
async def placeOrdersCallback(response):
print(f"Received response: {response}")
return response
async def getPairObj(pair, apiUrl):
pairs = json.loads(urlopen(apiUrl + "pairs").read())
for item in pairs:
if item["pair"] == pair:
return item
def getIncrement(quoteDisplayDecimals):
return float(1 * pow(10,-1 * quoteDisplayDecimals));
def getMyOrdersSorted():
bids = []
asks = []
for order in contracts.activeOrders:
if order['side'] == 0:
bids.append(order)
elif order['side'] == 1:
asks.append(order)
sortedBids = sorted(bids, key = lambda d: d['price'], reverse = True)
sortedAsks = sorted(asks, key = lambda d: d['price'])
return sortedBids, sortedAsks
# if len(sortedBids) > 0:
# myBestBid = sortedBids[0]['price']
# else:
# myBestBid = 0
# if len(sortedAsks) > 0:
# myBestAsk = sortedAsks[0]['price']
# else:
# myBestAsk = marketPrice*2
def getSpread(marketPrice,settings,funds,totalFunds,level,side):
defensiveSkew = 0
offensiveSkew = 0
levelSpread = 0
volSpread = price_feeds.volSpread
if side == 1:
funds = funds * marketPrice
if (funds < totalFunds/2):
multiple = ((funds/totalFunds) - .5) * 20 * -1
defensiveSkew = multiple * settings["defensiveSkew"];
if 'offensiveSkew' in settings and (funds > totalFunds/2):
multiple = ((funds/totalFunds) - .5) * 20 * -1
offensiveSkew = multiple * settings["offensiveSkew"];
if level["level"] > 0:
levelSpread = level["spread"]/100
spread = defensiveSkew/100 + offensiveSkew/100 + levelSpread + volSpread/2
return spread
def getQty(price, side, level, availableFunds,pairObj):
if side == 0:
# print("AVAILABLE FUNDS IN QUOTE BID: ",availableFunds, "AMOUNT: ",level["qty"])
if level["qty"] < availableFunds/price:
return level["qty"]
elif availableFunds > float(pairObj["mintrade_amnt"]):
return availableFunds/price - pow(10,-1 *pairObj["basedisplaydecimals"])
else:
return 0
elif side == 1:
# print("AVAILABLE FUNDS ASK: ",availableFunds, "AMOUNT: ",level["qty"])
if level["qty"] < availableFunds:
return level["qty"]
elif availableFunds * price > float(pairObj["mintrade_amnt"]):
return availableFunds - pow(10,-1 *pairObj["basedisplaydecimals"])
else:
return 0
else:
return 0
def getPrivateKey(market,settings):
secret_name = settings['secret_name']
region_name = settings['secret_location']
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
# For a list of exceptions thrown, see
# https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
raise e
secret = ast.literal_eval(get_secret_value_response['SecretString'])
pk = secret[secret_name]
if pk[:2] != '0x':
pk = '0x' + pk
return pk
def getTakerFill(settings,marketPrice,executePrice,book,bybitBook,side,myBestOrder):
qtyFilled = 0
qtyAvailable = 0
try:
# print('try getTakerFill')
if side == 0:
for order in book:
if order[0] < executePrice and order[0] < myBestOrder:
qtyFilled = qtyFilled + order[1]
else:
break
# for order in bybitBook:
# if order[0] > marketPrice * (1 - settings['maxSlippage']):
# qtyAvailable = qtyAvailable + order[1]
# else:
# break
if side == 1:
for order in book:
if order[0] > executePrice and order[0] > myBestOrder:
qtyFilled = qtyFilled + order[1]
else:
break
# for order in bybitBook:
# if order[0] < marketPrice * (1 + settings['maxSlippage']):
# qtyAvailable = qtyAvailable + order[1]
# else:
# break
# if qtyFilled > qtyAvailable:
# qtyFilled = qtyAvailable
# print('qtyFilled',qtyFilled)
return qtyFilled
except Exception as error:
print('failed getTakerFill:', error)
return 0