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

1# environment/price_reward_validator.py 

2 

3# global imports 

4 

5# local imports 

6from source.environment import Order, RewardValidatorBase 

7 

8class PriceRewardValidator(RewardValidatorBase): 

9 """ 

10 Awards reward for successful or failure order basing on gained or lost value. 

11 """ 

12 

13 def __init__(self, coefficient: float = 1.0, normalizable: bool = False) -> None: 

14 """ 

15 Class constructor. 

16 

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 """ 

24 

25 self.__coefficient: float = coefficient 

26 self.__normalizable: bool = normalizable 

27 

28 def validate_orders(self, orders: list[Order]) -> float: 

29 """ 

30 Calculates number of points to be rewarded for list of closed trades. 

31 

32 Parameters: 

33 orders (list[Order]): Orders to be validated. 

34 

35 Returns: 

36 (float): Calcualted reward. 

37 """ 

38 

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