pams.agents.market_share_fcn_agent のソースコード

from typing import List
from typing import Union

from pams.agents.fcn_agent import FCNAgent
from pams.market import Market
from pams.order import Cancel
from pams.order import Order


[ドキュメント]class MarketShareFCNAgent(FCNAgent): """Market Share FCN Agent class This agent submits orders based on market shares. This class inherits from the :class:`pams.agents.FCNAgent` class. """
[ドキュメント] def submit_orders(self, markets: List[Market]) -> List[Union[Order, Cancel]]: """submit orders based on FCN-based calculation and market shares. .. seealso:: - :func:`pams.agents.FCNAgent.submit_orders` """ filter_markets: List[Market] = [ market for market in markets if self.is_market_accessible(market_id=market.market_id) ] if len(filter_markets) == 0: raise AssertionError("filter_markets in MarketShareFCNAgent is empty.") weights: List[float] = [] for market in filter_markets: weights.append(float(self.get_sum_trade_volume(market=market)) + 1e-10) return super().submit_orders_by_market( market=self.get_prng().choices(filter_markets, weights=weights)[0] )
[ドキュメント] def get_sum_trade_volume(self, market: Market) -> int: """get sum of trade volume. Args: market (:class:`pams.Market`): trading market. Returns: int: total trade volume. """ t: int = market.get_time() t_start: int = max(0, t - self.time_window_size) volume: int = sum(market.get_executed_volumes(range(t_start, t + 1))) return volume