from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from statistics import mean class Demographic(Page): form_model = 'player' form_fields = ['gender', 'age', 'edu', 'job', 'exp', 'ethnic'] class after_Demographic(Page): form_model = 'player' form_fields = ['ad1', 'ad2', 'ad3'] def error_message(self, values): if values['ad2'] == 'Yes' and values['ad3'] == '': return 'Please answer for question 3.' class Results(Page): def vars_for_template(self): if self.participant.vars['chosen_app'] < 4: y5 = self.participant.vars['abs_forecast_1_error'] y6 = self.participant.vars['abs_forecast_2_error'] y7 = self.participant.vars['abs_forecast_3_error'] long=0 abs_forecast_1_error = y5 abs_forecast_2_error = y6 abs_forecast_3_error = y7 mfe_pre = (y5 + y6 + y7) / 3 mfe = round(mfe_pre, 2) bonus = round(0.5 - 0.002 * mfe, 2) if bonus > 0: self.participant.payoff = c(bonus) else: self.participant.payoff = c(0) final_payoff = self.participant.payoff_plus_participation_fee() forecast_1 = self.participant.vars['forecast_1'] forecast_2 = self.participant.vars['forecast_2'] forecast_3 = self.participant.vars['forecast_3'] actual_1 = self.participant.vars['actual_1'] actual_2 = self.participant.vars['actual_2'] actual_3 = self.participant.vars['actual_3'] return { 'abs_forecast_1_error': abs_forecast_1_error, 'abs_forecast_2_error': abs_forecast_2_error, 'abs_forecast_3_error': abs_forecast_3_error, 'long': long, 'mfe': mfe, 'bonus': bonus, 'final_payoff': final_payoff, 'forecast_1': forecast_1, 'forecast_2': forecast_2, 'forecast_3': forecast_3, 'actual_1': actual_1, 'actual_2': actual_2, 'actual_3': actual_3, } elif self.participant.vars['chosen_app'] >= 4: y5 = self.participant.vars['abs_forecast_t_error'] long=1 abs_forecast_t_error = y5 mfe_pre = y5 mfe = round(mfe_pre, 2) bonus = round(0.5 - 0.002 * mfe, 2) if bonus > 0: self.participant.payoff = c(bonus) else: self.participant.payoff = c(0) final_payoff = self.participant.payoff_plus_participation_fee() forecast_t = self.participant.vars['forecast_t'] actual_t = self.participant.vars['actual_t'] return { 'abs_forecast_t_error': abs_forecast_t_error, 'mfe': mfe, 'bonus': bonus, 'final_payoff': final_payoff, 'long': long, 'forecast_t': forecast_t, 'actual_t': actual_t, } class Final(Page): pass page_sequence = [ Demographic, after_Demographic, Results, Final ]