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()
|
market2_start = market2.get_start_time()
|
||||||
start_time = min(market_1_start, market2_start)
|
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
|
self._total_profit = 0.0
|
||||||
|
|
||||||
def update(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
|
def update(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
|
||||||
|
self.market_decision(increment, previous_state, market_data_increment)
|
||||||
pass
|
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"):
|
def handle_charge_or_discharge(self, increment: datetime.timedelta, previous_state: "BatteryModel"):
|
||||||
if self._battery_state != BatteryState.CHARGING:
|
if self._battery_state != BatteryState.CHARGING:
|
||||||
total_charge_this_increment = self._current_charge_rate * (increment.total_seconds()/60.0)
|
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]]):
|
def __init__(self, timestamp: datetime.datetime, markets: List[Tuple[datetime.datetime, float]]):
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
self.markets = markets
|
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