Implement market decision logic for battery discharge based on market rates
This commit is contained in:
@@ -23,4 +23,10 @@ def main():
|
||||
market2_start = market2.get_start_time()
|
||||
start_time = min(market_1_start, market2_start)
|
||||
|
||||
for item in market_1_start:
|
||||
print(item)
|
||||
battery.update(increment, None, market1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -33,8 +33,20 @@ class BatteryModel:
|
||||
self._total_profit = 0.0
|
||||
|
||||
def update(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
|
||||
self.market_decision(increment, previous_state, market_data_increment)
|
||||
pass
|
||||
|
||||
def market_decision(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
|
||||
if self._battery_state == BatteryState.IDLE and self._current_charge > 0:
|
||||
# Sell, I guess, to whoever offers more
|
||||
for market_data_increment in market_data_increment.markets:
|
||||
self._battery_state = BatteryState.DISCHARGING
|
||||
self._current_charge_rate = self._max_discharge_rate
|
||||
self._current_market_rate = market_data_increment.get_max_market_rate()
|
||||
self._current_charge_value = self._current_charge_rate * self._current_charge
|
||||
return
|
||||
|
||||
|
||||
def handle_charge_or_discharge(self, increment: datetime.timedelta, previous_state: "BatteryModel"):
|
||||
if self._battery_state != BatteryState.CHARGING:
|
||||
total_charge_this_increment = self._current_charge_rate * (increment.total_seconds()/60.0)
|
||||
|
||||
@@ -38,3 +38,12 @@ class MarketDataIncrement:
|
||||
def __init__(self, timestamp: datetime.datetime, markets: List[Tuple[datetime.datetime, float]]):
|
||||
self.timestamp = timestamp
|
||||
self.markets = markets
|
||||
|
||||
def get_max_market_rate(self):
|
||||
rate = 0
|
||||
highest = ()
|
||||
for i in self.markets:
|
||||
if i[1] > rate:
|
||||
rate = i[1]
|
||||
highest = i
|
||||
return highest
|
||||
Reference in New Issue
Block a user