コード例 #1
0
 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 = []
コード例 #2
0
ファイル: Orders.py プロジェクト: PMenes/Chicago-Trading-Comp
 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)}'
コード例 #3
0
ファイル: Option.py プロジェクト: PMenes/Chicago-Trading-Comp
    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
コード例 #4
0
ファイル: Trader.py プロジェクト: PMenes/Chicago-Trading-Comp
    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}
コード例 #5
0
ファイル: Orders.py プロジェクト: PMenes/Chicago-Trading-Comp
 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
コード例 #6
0
ファイル: Option.py プロジェクト: PMenes/Chicago-Trading-Comp
 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
コード例 #7
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"]