From 5000920995b78d8034f3548c3dab334a1c1f798b Mon Sep 17 00:00:00 2001 From: Eli Pandolfo Date: Thu, 11 Jun 2020 17:55:50 -0700 Subject: [PATCH] speed delay configurable --- custom_otree_config.py | 2 ++ hft/market_environments.py | 8 ++++++-- hft/trader.py | 11 +++++------ hft/trader_state.py | 11 +++++------ hft/utility.py | 2 +- .../session_configs/CDA_1groups_3players_150_sec.yaml | 2 ++ .../session_configs/CDA_1groups_3players_151_sec.yaml | 2 ++ .../session_configs/CDA_1groups_6players_150_sec.yaml | 2 ++ .../session_configs/CDA_1groups_6players_180_sec.yaml | 2 ++ .../session_configs/CDA_1groups_8players_150sec.yaml | 2 ++ .../session_configs/FBA_1groups_3players_150_sec.yaml | 2 ++ .../session_configs/FBA_1groups_6players_180_sec.yaml | 2 ++ .../session_configs/IEX_1groups_3players_150_sec.yaml | 2 ++ .../session_configs/IEX_1groups_6players_180_sec.yaml | 3 ++- 14 files changed, 37 insertions(+), 16 deletions(-) diff --git a/custom_otree_config.py b/custom_otree_config.py index d48cdc8c..11ee39aa 100644 --- a/custom_otree_config.py +++ b/custom_otree_config.py @@ -107,6 +107,8 @@ def initialize_many_from_folder(cls, directory): 'test_input_file': ('tests', 'test_input_file'), 'peg_proportion': ('parameters', 'peg-proportion'), 'post_session_delay': ('session', 'post-session-delay'), + 'short_delay': ('parameters', 'short-delay'), + 'long_delay': ('parameters', 'long-delay') } } diff --git a/hft/market_environments.py b/hft/market_environments.py index 0301276e..aae5af55 100644 --- a/hft/market_environments.py +++ b/hft/market_environments.py @@ -12,7 +12,9 @@ config_field_type={ 'initial_endowment': int, 'speed_cost': float, - 'technology_unit_cost': float + 'technology_unit_cost': float, + 'short_delay': float, + 'long_delay': float, }, fields_to_scale={ 'initial_endowment': 10000, @@ -27,7 +29,9 @@ 'player': { 'initial_endowment': 'cash', 'speed_unit_cost': 'speed_unit_cost', - 'default_role': 'default_role' + 'default_role': 'default_role', + 'short_delay': 'short_delay', + 'long_delay': 'long_delay', } }, checkpoint={ diff --git a/hft/trader.py b/hft/trader.py index f4c22e98..480edf85 100644 --- a/hft/trader.py +++ b/hft/trader.py @@ -138,9 +138,6 @@ def delay(self, order_delay_time): class ELOTrader(BaseTrader): - default_delay = 0.5 - short_delay = 0.1 - long_delay = 0.5 tracked_market_facts = ('best_bid', 'volume_at_best_bid', 'next_bid', 'best_offer', 'volume_at_best_offer', 'next_offer', 'signed_volume', 'e_best_bid', 'e_best_offer', 'e_signed_volume', 'tax_rate', 'reference_price') @@ -159,6 +156,8 @@ class ELOTrader(BaseTrader): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.short_delay = kwargs.get('short_delay', self.default_delay) + self.long_delay = kwargs.get('long_delay', self.default_delay) self.technology_subscription = Subscription( 'speed_tech', self.player_id, kwargs.get('speed_unit_cost', 0)) self.sliders = {'slider_a_x': 0, 'slider_a_y': 0, 'slider_a_z': 0} @@ -176,10 +175,10 @@ def set_initial_strategy(self, slider_a_x, slider_a_y, slider_a_z, role, speed_o self.trader_role = self.trader_state_factory.get_trader_state(role) self.delayed = speed_on if speed_on: - self.delay = self.trader_role.short_delay + self.delay = self.short_delay self.technology_subscription.activate() else: - self.delay = self.trader_role.long_delay + self.delay = self.long_delay self.technology_subscription.deactivate() speed_cost = self.technology_subscription.invoice() self.speed_cost += speed_cost @@ -337,4 +336,4 @@ def order_canceled(self, event): def order_executed(self, event): super().order_executed(event) self.midpoint_peg = event.message.midpoint_peg - \ No newline at end of file + diff --git a/hft/trader_state.py b/hft/trader_state.py index c224a0e6..b6962fa0 100644 --- a/hft/trader_state.py +++ b/hft/trader_state.py @@ -55,8 +55,7 @@ def cancel_all_orders(self, trader, event): class ELOTraderState(TraderState): - short_delay = 0.1 - long_delay = 0.5 + default_delay = 0.5 event_dispatch = { 'speed_change': 'speed_technology_change', 'role_change': 'state_change', @@ -76,19 +75,19 @@ def state_change(self, trader, event): trader.disable_offer = False log.debug('trader %s: offers enabled.' % trader.tag) - def speed_technology_change(self, trader, event, short_delay=short_delay, - long_delay=long_delay, **kwargs): + def speed_technology_change(self, trader, event, short_delay=default_delay, + long_delay=default_delay, **kwargs): try: new_state = event.message.value except AttributeError: new_state = kwargs['value'] trader.delayed = new_state if new_state is True: - trader.delay = short_delay + trader.delay = trader.short_delay trader.technology_subscription.activate() log.debug('player %s subscribes to technology.' % trader.player_id) else: - trader.delay = long_delay + trader.delay = trader.long_delay trader.technology_subscription.deactivate() speed_cost = trader.technology_subscription.invoice() trader.speed_cost += speed_cost diff --git a/hft/utility.py b/hft/utility.py index 20eed245..77e53c15 100644 --- a/hft/utility.py +++ b/hft/utility.py @@ -151,7 +151,7 @@ def ensure_results_ready(subsession_id, market_id, record_cls, num_players, elo_args_fields = ( 'subsession_id', 'market_id', 'id', 'id_in_group', 'default_role', 'exchange_host', 'exchange_port') -elo_kwargs_fields = ('cash', 'speed_unit_cost') +elo_kwargs_fields = ('cash', 'speed_unit_cost', 'short_delay', 'long_delay') def elo_otree_player_converter(otree_player): args = [getattr(otree_player, field) for field in elo_args_fields] kwargs = {field: getattr(otree_player, field) for field in elo_kwargs_fields} diff --git a/session_config/session_configs/CDA_1groups_3players_150_sec.yaml b/session_config/session_configs/CDA_1groups_3players_150_sec.yaml index 4535413a..04ac1455 100644 --- a/session_config/session_configs/CDA_1groups_3players_150_sec.yaml +++ b/session_config/session_configs/CDA_1groups_3players_150_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.7 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_3_150_sec_sv_on diff --git a/session_config/session_configs/CDA_1groups_3players_151_sec.yaml b/session_config/session_configs/CDA_1groups_3players_151_sec.yaml index 512f5547..a370c646 100644 --- a/session_config/session_configs/CDA_1groups_3players_151_sec.yaml +++ b/session_config/session_configs/CDA_1groups_3players_151_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.7 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_3_150_sec_sv_off diff --git a/session_config/session_configs/CDA_1groups_6players_150_sec.yaml b/session_config/session_configs/CDA_1groups_6players_150_sec.yaml index 620e5123..367d03a9 100644 --- a/session_config/session_configs/CDA_1groups_6players_150_sec.yaml +++ b/session_config/session_configs/CDA_1groups_6players_150_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.7 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_1_150_sec diff --git a/session_config/session_configs/CDA_1groups_6players_180_sec.yaml b/session_config/session_configs/CDA_1groups_6players_180_sec.yaml index 940a658d..7c93dc82 100644 --- a/session_config/session_configs/CDA_1groups_6players_180_sec.yaml +++ b/session_config/session_configs/CDA_1groups_6players_180_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.2 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Session_3_rounds_1_180_sec diff --git a/session_config/session_configs/CDA_1groups_8players_150sec.yaml b/session_config/session_configs/CDA_1groups_8players_150sec.yaml index 6c01e29d..a2f727e5 100644 --- a/session_config/session_configs/CDA_1groups_8players_150sec.yaml +++ b/session_config/session_configs/CDA_1groups_8players_150sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.7 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_1_150_sec_8_traders diff --git a/session_config/session_configs/FBA_1groups_3players_150_sec.yaml b/session_config/session_configs/FBA_1groups_3players_150_sec.yaml index 5b7d0f24..dc508a0c 100644 --- a/session_config/session_configs/FBA_1groups_3players_150_sec.yaml +++ b/session_config/session_configs/FBA_1groups_3players_150_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.7 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_3_150_sec_sv_on_FBA diff --git a/session_config/session_configs/FBA_1groups_6players_180_sec.yaml b/session_config/session_configs/FBA_1groups_6players_180_sec.yaml index f26b33c3..e984489c 100644 --- a/session_config/session_configs/FBA_1groups_6players_180_sec.yaml +++ b/session_config/session_configs/FBA_1groups_6players_180_sec.yaml @@ -29,6 +29,8 @@ parameters: k-reference-price: 0.2 k-signed-volume: 0.5 tax-rate: 0.1 + short-delay: 0.05 + long-delay: 0.25 session: session-name: FBA_ELO_Session_3_rounds_1_180_sec diff --git a/session_config/session_configs/IEX_1groups_3players_150_sec.yaml b/session_config/session_configs/IEX_1groups_3players_150_sec.yaml index 56d0c16e..adac1aa2 100644 --- a/session_config/session_configs/IEX_1groups_3players_150_sec.yaml +++ b/session_config/session_configs/IEX_1groups_3players_150_sec.yaml @@ -30,6 +30,8 @@ parameters: k-signed-volume: 0.5 tax-rate: 0.1 peg-proportion: 0.5 + short-delay: 0.05 + long-delay: 0.25 session: session-name: ELO_Development_Session_3_rounds_3_150_sec_sv_off_iex diff --git a/session_config/session_configs/IEX_1groups_6players_180_sec.yaml b/session_config/session_configs/IEX_1groups_6players_180_sec.yaml index 0bce821d..86157708 100644 --- a/session_config/session_configs/IEX_1groups_6players_180_sec.yaml +++ b/session_config/session_configs/IEX_1groups_6players_180_sec.yaml @@ -30,7 +30,8 @@ parameters: k-signed-volume: 0.5 tax-rate: 0.1 peg-proportion: 0.5 - + short-delay: 0.05 + long-delay: 0.25 session: session-name: IEX_ELO_Session_3_rounds_1_180_sec