a lot of fixes

This commit is contained in:
2023-06-26 11:31:47 +02:00
parent 966db6e5ad
commit f60dca6367
23 changed files with 338 additions and 45 deletions

View File

@@ -1,5 +1,13 @@
_bal="balance"
from lightmatchingengine.lightmatchingengine import LightMatchingEngine,Side,Trade,Order,OrderBook
import log
from influxdb_client.client.write_api import SYNCHRONOUS
from influxdb_client import InfluxDBClient, Point
import time
import pandas as pd
import uuid
software_start=int(time.time())
class Exchange():
"""
Basic Commodity exchange.
@@ -110,6 +118,7 @@ class Exchange():
Returns an order if the order is active. Returns None if submit has failed.
"""
# calculate price for complete order fullfilment
amount=int(amount)
full_price=price*amount
@@ -219,15 +228,15 @@ class Exchange():
for k,v in order_book.bids.items():
self.demand[resource][k]=0
for o in v:
self.demand[resource][k]+=o.qty
self.total_demand[resource]+=o.qty
self.demand[resource][k]+=o.leaves_qty
self.total_demand[resource]+=o.leaves_qty
self.supply[resource]={}
self.total_supply[resource]=0
for k,v in order_book.asks.items():
self.supply[resource][k]=0
for o in v:
self.supply[resource][k]+=o.qty
self.total_supply[resource]+=o.qty
self.supply[resource][k]+=o.leaves_qty
self.total_supply[resource]+=o.leaves_qty
self.best_ask[resource]=best_ask
@@ -249,4 +258,61 @@ class Exchange():
def get_total_supply(self,resource):
if resource in self.total_supply:
return self.total_supply[resource]
return 0
return 0
def log_step(self,name,episode,episode_length,step):
timepoint=episode*episode_length+step
localStepDB={}
data={}
data["cxid"]=name
data["episode"]=episode
data["step"]=step
data["tstep"]=timepoint
data["instrm"]="None"
data["best_ask"]=-1
data["best_bid"]=-1
data["total_demand"]=-1
data["total_supply"]=-1
data["market_rate"]=-1
for id,order in self.orders.items():
t=data.copy()
t["instrm"]=order.instmt
localStepDB[order.instmt]=t
## add best ask/best bid
for item , value in self.best_ask.items():
if value!=None:
localStepDB[item]["best_ask"]=value
for item , value in self.best_bid.items():
if value!=None:
localStepDB[item]["best_bid"]=value
#demand supply
for item , value in self.total_demand.items():
if value!=None:
localStepDB[item]["total_demand"]=value
for item , value in self.total_supply.items():
if value!=None:
localStepDB[item]["total_supply"]=value
#last market rate
for item , value in self.market_rate.items():
if value!=None:
localStepDB[item]["market_rate"]=value
for id,item in localStepDB.items():
log.EXBooksData.append(item)
return data
def log_episode(self,name,episode):
for t in self.executed_trades:
data={}
data["id"]=uuid.uuid4()
data["cxid"]=name
data["episode"]=episode
data["order_id"]=t.order_id
data["instmt"]=t.instmt
data["price"]=t.trade_price
data["qty"]=t.trade_qty
data["side"]=t.trade_side
log.EXTradeData.append(data)