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