from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ExtraModel ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'stocktest' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): highest_bidder = models.IntegerField() highest_bid = models.CurrencyField(initial=0) # lowest_ask = models.CurrencyField(initial=0) # lowest_askker = models.IntegerField() class Player(BasePlayer): def live_auction(self, data): # bids = dict() # asks = dict() t = data['type'] if t== 'bid': bid = data['value'] group = self.group my_id = self.id_in_group if bid > group.highest_bid: group.highest_bid = bid group.highest_bidder = my_id response = dict(type='bid', id_in_group=my_id, bid=bid) # bids.update(response) return {0: response} if t== 'ask': ask = data['value'] group = self.group my_id = self.id_in_group if ask < group.lowest_ask: group.lowest_ask = ask group.lowest_askker = my_id response = dict(type='ask', id_in_group=my_id, ask=ask) return {0: response} if t == 'cancel': my_id = self.id_in_group print('cancel') response = dict(type='cancel', id_in_group=my_id) return {0: response} class Bid(ExtraModel): player = models.Link(Player) group = models.Link(Group)