Coverage for source/environment/price_reward_validator.py: 100%
13 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-07-30 20:59 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-07-30 20:59 +0000
1# environment/price_reward_validator.py
3# global imports
5# local imports
6from source.environment import Order, RewardValidatorBase
8class PriceRewardValidator(RewardValidatorBase):
9 """
10 Awards reward for successful or failure order basing on gained or lost value.
11 """
13 def __init__(self, coefficient: float = 1.0, normalizable: bool = False) -> None:
14 """
15 Class constructor.
17 Parameters:
18 coefficient (float): Coefficient to be multiplied with gained or lost
19 order value.
20 normalizable (bool): Indicates if calculated reward should be divided
21 by initial order value. Normalizable approach ensures that bigger orders
22 contribute the same way to the reward as smaller orders.
23 """
25 self.__coefficient: float = coefficient
26 self.__normalizable: bool = normalizable
28 def validate_orders(self, orders: list[Order]) -> float:
29 """
30 Calculates number of points to be rewarded for list of closed trades.
32 Parameters:
33 orders (list[Order]): Orders to be validated.
35 Returns:
36 (float): Calcualted reward.
37 """
39 reward = 0
40 for order in orders:
41 summand = (order.current_value - order.initial_value) * self.__coefficient
42 if (self.__normalizable):
43 summand = summand / order.initial_value * 100
44 reward = reward + summand
45 return reward