fuck man major readjustment but it is running again...
This commit is contained in:
@@ -2,6 +2,7 @@ from .base_agent import BaseAgent
|
||||
from ..exchange import Exchange
|
||||
from lightmatchingengine.lightmatchingengine import Order,Side
|
||||
from abc import ABC
|
||||
from decimal import *
|
||||
class Base_Distribution_Agent(BaseAgent,ABC):
|
||||
|
||||
def __init__(self,simulation,business,resource,exchanges: list) -> None:
|
||||
@@ -18,6 +19,10 @@ class Base_Distribution_Agent(BaseAgent,ABC):
|
||||
self.target=0
|
||||
self.min_price=-1
|
||||
self.max_batch_qty=10
|
||||
self.tincome=0
|
||||
self.tqty=0
|
||||
self.income_offset=0
|
||||
self.qty_offset=0
|
||||
super().__init__(simulation)
|
||||
|
||||
def set_target(self,target: int):
|
||||
@@ -57,6 +62,7 @@ class Base_Distribution_Agent(BaseAgent,ABC):
|
||||
return False # we dont have enough balance
|
||||
|
||||
self.business.inventory[self.resource]-=amount
|
||||
|
||||
cx.add_to_account(self.id,self.resource,amount) # prepaid charge account for cx
|
||||
order=cx.submit_order(self.id,self.resource,amount,price_per,Side.SELL)
|
||||
if order==None: # Order failed
|
||||
@@ -72,6 +78,7 @@ class Base_Distribution_Agent(BaseAgent,ABC):
|
||||
amount=cx.get_account_resource_amount(self.id,"balance")
|
||||
cx.remove_from_account(self.id,"balance",amount)
|
||||
self.business.balance+=amount
|
||||
|
||||
|
||||
def collect_resource_from_cxs(self,resource):
|
||||
"""
|
||||
@@ -87,16 +94,37 @@ class Base_Distribution_Agent(BaseAgent,ABC):
|
||||
Returns a list of all trades performed by this agent
|
||||
"""
|
||||
trades=[]
|
||||
self.tqty=0
|
||||
self.tincome=0
|
||||
for cx_id in range(len(self.exchanges)):
|
||||
cx=self.exchanges[cx_id]
|
||||
orders=self.orders[cx_id]
|
||||
if len(orders)>0:
|
||||
for k,o in orders.items():
|
||||
if k in cx.order_trades_map:
|
||||
trades.append(cx.order_trades_map[k])
|
||||
trades.extend(cx.order_trades_map[k])
|
||||
self.trades=trades
|
||||
|
||||
for t in trades:
|
||||
self.tqty+=t.trade_qty
|
||||
self.tincome+=t.trade_qty*t.trade_price
|
||||
self.tincome=round(self.tincome,2)
|
||||
return trades
|
||||
|
||||
|
||||
|
||||
@property
|
||||
def qty(self):
|
||||
return self.tqty+self.qty_offset
|
||||
@property
|
||||
def income(self):
|
||||
return self.tincome+self.income_offset
|
||||
|
||||
def confirm_distribution(self,dis_qty,step):
|
||||
income_per=self.income/self.qty
|
||||
income_to_confirm=income_per*dis_qty
|
||||
self.income_offset-=income_to_confirm
|
||||
self.qty_offset-=dis_qty
|
||||
self.income_offset=round(self.income_offset,2)
|
||||
|
||||
def reset(self, episode):
|
||||
self.qty_offset=0
|
||||
self.income_offset=0
|
||||
self.trades=[]
|
||||
return super().reset(episode)
|
||||
Reference in New Issue
Block a user