def prepare(self): t = self m = t.master a = t.assets = m.assets t.perf = m.perf t.alerts = [] t.fills = {} t.watch = [] t.meta = {} t.fines = u.update({}, m.fines) t.prep = {"trades": []} t.pos = u.update({}, m.pos_model) t.pos_updated = m.pos_updated t.save_pu = u.update({}, t.pos_updated) # to calculate fines later for k, v in a.items(): t.fills[k] = {"bids": [], "asks": []} # prepare the fills dict t.fills_to_clean = [] t.trades_to_execute = []
def show(self, h={}): # just print for logs if not self.oklog: return "nothing" # we don't want to spend cpu time on json.dumps for nothing s = u.update( { "p": self.h["price"], "q": self.h["quantity"], "r": self.h["qleft"] }, h) return f'{self.all.name}: {json.dumps(s)}'
def __init__(self, name, master, o={}, opt={}): if not o.get("flag", 0) in ["c", "p"]: raise NotImplementedError("no valid flag set") if not o.get("K", 0): raise NotImplementedError("no valid strike set") self.opt = u.update(o, {"r": 0, "t": 1 / 6}) x = opt.get("spread", 0) self.spread = x if x else 0.6 x = opt.get("rounding", 0) self.rounding = x if x else 2 Instrument.__init__(self, name, master, o) self.histo = False
def __init__(self, file): SendExchangeGrpcClient.__init__(self, file) self.perf = u.Perf(0, self.logger) s=self.p["strategies"]; self.sp = u.update({}, s["random"], s.get(self.p.get("strategy"))) self.pos_updated = Instrument.status0.copy() self.pos_model = self.pos_updated.copy() self.trades = 0; self.volume = 0 self.mult = lambda s, p: {"pnl":1, "price":1, "pos":1}.get(p, s["pos"]) self.fines_detail = {"max":0, "seconds":0, "val":0}
async def real_modify_order(self, h): if self.all.sens * h["quantity"] <= 0: return None # quantity and sens must be the same temp = u.update({}, self.h, {"modified": self.all.master.num}, h) o = self.make_order(temp) resp = await self.all.master.modify_order(self.oid, o) if type(resp) != ModifyOrderResponse: return self.error( "Could NOT modify_order", self.sid, f'(created:{self.created}, last modif:{self.modified})', temp, resp) self.h = temp self.modified = self.h["modified"] self.debug(f"modified-{self.sid}", self.show()) return self
def all_set(self, h): errs = [] b = u.update({ "F": 0, "sigma": 0, "price": 0 }, h, self.opt) for k in ["F"]: errs.append(f'missing {k}') if b[k] == 0 else 0 e = 'need either sigma or price, both are missing' errs.append( e) if not b.get("sigma", 0) and not b.get("price", 0) else 0 if b.get("sigma", 0) and b.get("price", 0): b["sigma"] = 0 # price superseeds sigma if both present if not len(errs): return b for e in errs: print(f'err: {e}') return 0
def __init__(self, name, master, opt={}): self.logname = f"{name}" self.logger = master.logger.thisClassLogger(self) x = opt.get("spread", 0) self.spread = x if x else 0.6 self.name = name self.master = master self.infos = opt self.orders = {} self.wo = {} self.obids = Orders(1, name, self) self.oasks = Orders(-1, name, self) self.mbids = Markets(1, name, self.obids) self.masks = Markets(-1, name, self.oasks) self.to_clean = [] self.mid = {"num": 0, "price": 0} self.histo = [] self.status = u.update({"name": name}, self.status0) self.greeks = ["price", "delta", "gamma", "vega", "sigma"]