from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class ReadOnly_sell(Page): # 表单 form_model = 'player' form_fields = ['stock_1_sell_amount', 'stock_2_sell_amount', 'stock_3_sell_amount', 'stock_4_sell_amount', 'stock_5_sell_amount', 'stock_6_sell_amount'] # %% 动态验证出售 def error_message(self, value): if value['stock_1_sell_amount'] > self.player.stock_1_amount: return '你没有那么多资产可以卖' elif value['stock_2_sell_amount'] > self.player.stock_2_amount: return '你没有那么多资产可以卖' elif value['stock_3_sell_amount'] > self.player.stock_3_amount: return '你没有那么多资产可以卖' elif value['stock_4_sell_amount'] > self.player.stock_4_amount: return '你没有那么多资产可以卖' elif value['stock_5_sell_amount'] > self.player.stock_5_amount: return '你没有那么多资产可以卖' elif value['stock_6_sell_amount'] > self.player.stock_6_amount: return '你没有那么多资产可以卖' # def stock_1_sell_amount_error_message(self, value): # print('value is', value) # print('stock_1_amount', self.player.stock_1_amount) # if value > self.player.stock_1_amount: # return 'Sell is over ownd.' # # def stock_2_sell_amount_error_message(self, value): # print(value) # if value > self.player.stock_2_amount: # return 'Sell is over ownd.' # # def stock_3_sell_amount_error_message(self, value): # print(value) # if value > self.player.stock_3_amount: # return 'Sell is over ownd.' # # def stock_4_sell_amount_error_message(self, value): # print(value) # if value > self.player.stock_4_amount: # return 'Sell is over ownd.' # # def stock_5_sell_amount_error_message(self, value): # print(value) # if value > self.player.stock_5_amount: # return 'Sell is over ownd.' # # def stock_6_sell_amount_error_message(self, value): # print(value) # if value > self.player.stock_6_amount: # return 'Sell is over ownd.' ### 动态验证出售END # 页面到4轮后展示 def is_displayed(player): return player.round_number in [1, 2, 3, 4] def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() # self.player.update_stock_n_profit(1, 'before') # self.player.update_stock_n_profit(2, 'before') # self.player.update_stock_n_profit(3, 'before') # self.player.update_stock_n_profit(4, 'before') # self.player.update_stock_n_profit(5, 'before') # self.player.update_stock_n_profit(6, 'before') # self.player.unreal_profit_sell() # self.player.real_profit_sell() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'num_rounds': [i + 1 for i in range(Constants.num_rounds)], ## [1,2,3,4,....,num_rounds] 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_sell_amount': self.player.stock_1_sell_amount, 'stock_2_sell_amount': self.player.stock_2_sell_amount, 'stock_3_sell_amount': self.player.stock_3_sell_amount, 'stock_4_sell_amount': self.player.stock_4_sell_amount, 'stock_5_sell_amount': self.player.stock_5_sell_amount, 'stock_6_sell_amount': self.player.stock_6_sell_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), 'stock_1_unreal_profit': self.player.stock_1_unreal_profit, 'stock_2_unreal_profit': self.player.stock_2_unreal_profit, 'stock_3_unreal_profit': self.player.stock_3_unreal_profit, 'stock_4_unreal_profit': self.player.stock_4_unreal_profit, 'stock_5_unreal_profit': self.player.stock_5_unreal_profit, 'stock_6_unreal_profit': self.player.stock_6_unreal_profit, 'stock_1_real_profit': self.player.stock_1_real_profit, 'stock_2_real_profit': self.player.stock_2_real_profit, 'stock_3_real_profit': self.player.stock_3_real_profit, 'stock_4_real_profit': self.player.stock_4_real_profit, 'stock_5_real_profit': self.player.stock_5_real_profit, 'stock_6_real_profit': self.player.stock_6_real_profit, # 'stock_1_unreal_profit': round(self.player.stock_1_unreal_profit,2), # 'stock_2_unreal_profit': round(self.player.stock_2_unreal_profit,2), # 'stock_3_unreal_profit': round(self.player.stock_3_unreal_profit,2), # 'stock_4_unreal_profit': round(self.player.stock_4_unreal_profit,2), # 'stock_5_unreal_profit': round(self.player.stock_5_unreal_profit,2), # 'stock_6_unreal_profit': round(self.player.stock_6_unreal_profit,2), # 'stock_1_real_profit': round(self.player.stock_1_real_profit,2), # 'stock_2_real_profit': round(self.player.stock_2_real_profit,2), # 'stock_3_real_profit': round(self.player.stock_3_real_profit,2), # 'stock_4_real_profit': round(self.player.stock_4_real_profit,2), # 'stock_5_real_profit': round(self.player.stock_5_real_profit,2), # 'stock_6_real_profit': round(self.player.stock_6_real_profit,2), # 'stock_1_profit' : round(self.player.stock_1_profit), # 'stock_2_profit' : round(self.player.stock_2_profit), # 'stock_3_profit' : round(self.player.stock_3_profit), # 'stock_4_profit' : round(self.player.stock_4_profit), # 'stock_5_profit' : round(self.player.stock_5_profit), # 'stock_6_profit' : round(self.player.stock_6_profit) } # 传递股价表格 def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): # if self.player.round_number <= 4: # self.player.stock_1_real_profit = 0 # else: # self.player.stock_1_real_profit = (self.group.stock_1_price - self.player.stock_1_ave_cost_price) * self.player.stock_1_sell_amount + self.player.in_round(self.round_number - 1).stock_1_real_profit # # 计算平均成本 # if self.player.stock_1_amount == 0: # self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price # else: # self.player.stock_1_ave_cost_price = self.player.in_round(self.round_number - 1).stock_1_ave_cost_price # # if self.player.stock_2_amount == 0: # self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price # else: # self.player.stock_2_ave_cost_price = self.player.in_round(self.round_number - 1).stock_2_ave_cost_price # # if self.player.stock_3_amount == 0: # self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price # else: # self.player.stock_3_ave_cost_price = self.player.in_round(self.round_number - 1).stock_3_ave_cost_price # # if self.player.stock_4_amount == 0: # self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price # else: # self.player.stock_4_ave_cost_price = self.player.in_round(self.round_number - 1).stock_4_ave_cost_price # # if self.player.stock_5_amount == 0: # self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price # else: # self.player.stock_5_ave_cost_price = self.player.in_round(self.round_number - 1).stock_5_ave_cost_price # # if self.player.stock_6_amount == 0: # self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price # else: # self.player.stock_6_ave_cost_price = self.player.in_round(self.round_number - 1).stock_6_ave_cost_price self.player.stock_1_amount = self.player.stock_1_amount - self.player.stock_1_sell_amount self.player.stock_2_amount = self.player.stock_2_amount - self.player.stock_2_sell_amount self.player.stock_3_amount = self.player.stock_3_amount - self.player.stock_3_sell_amount self.player.stock_4_amount = self.player.stock_4_amount - self.player.stock_4_sell_amount self.player.stock_5_amount = self.player.stock_5_amount - self.player.stock_5_sell_amount self.player.stock_6_amount = self.player.stock_6_amount - self.player.stock_6_sell_amount self.player.money = self.player.money + \ self.player.stock_1_sell_amount * self.group.stock_1_price + \ self.player.stock_2_sell_amount * self.group.stock_2_price + \ self.player.stock_3_sell_amount * self.group.stock_3_price + \ self.player.stock_4_sell_amount * self.group.stock_4_price + \ self.player.stock_5_sell_amount * self.group.stock_5_price + \ self.player.stock_6_sell_amount * self.group.stock_6_price self.player.stock_1_net_amount = self.player.stock_1_bid_amount - self.player.stock_1_sell_amount if self.player.stock_1_net_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_net_amount) + ' (' + str(self.group.stock_1_price) + ')' self.player.stock_2_net_amount = self.player.stock_2_bid_amount - self.player.stock_2_sell_amount if self.player.stock_2_net_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_net_amount) + ' (' + str(self.group.stock_2_price) + ')' self.player.stock_3_net_amount = self.player.stock_3_bid_amount - self.player.stock_3_sell_amount if self.player.stock_3_net_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_net_amount) + ' (' + str(self.group.stock_3_price) + ')' self.player.stock_4_net_amount = self.player.stock_4_bid_amount - self.player.stock_4_sell_amount if self.player.stock_4_net_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_net_amount) + ' (' + str(self.group.stock_4_price) + ')' self.player.stock_5_net_amount = self.player.stock_5_bid_amount - self.player.stock_5_sell_amount if self.player.stock_5_net_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_net_amount) + ' (' + str(self.group.stock_5_price) + ')' self.player.stock_6_net_amount = self.player.stock_6_bid_amount - self.player.stock_6_sell_amount if self.player.stock_6_net_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_net_amount) + ' (' + str(self.group.stock_6_price) + ')' # self.player.update_stock_n_profit(1, 'after') # self.player.update_stock_n_profit(2, 'after') # self.player.update_stock_n_profit(3, 'after') # self.player.update_stock_n_profit(4, 'after') # self.player.update_stock_n_profit(5, 'after') # self.player.update_stock_n_profit(6, 'after') # # 原开始 # form_model = 'player' # # # def get_timeout_seconds(self): # # if self.player.round_number < 4: # # return self.player.my_page_timeout_seconds # # else: # # return self.player.my_page_timeout_seconds2 # # timeout_seconds = 0.01 # # def is_displayed(player): # return player.round_number in [1, 2, 3, 4] # # def vars_for_template(self): # self.player.update_money() # self.player.round_number_4() # self.group.update_stock_price() # self.player.update_stock_1_amount() # self.player.update_stock_2_amount() # self.player.update_stock_3_amount() # self.player.update_stock_4_amount() # self.player.update_stock_5_amount() # self.player.update_stock_6_amount() # return { # 'round_number': self.round_number, # 'round_number_4': self.player.round_number_4, # 'money': format(round(self.player.money, 2), ','), # 'stock_1_price': round(self.group.stock_1_price, 2), # 'stock_2_price': round(self.group.stock_2_price, 2), # 'stock_3_price': round(self.group.stock_3_price, 2), # 'stock_4_price': round(self.group.stock_4_price, 2), # 'stock_5_price': round(self.group.stock_5_price, 2), # 'stock_6_price': round(self.group.stock_6_price, 2), # # 'stock_1_amount': self.player.stock_1_amount, # 'stock_2_amount': self.player.stock_2_amount, # 'stock_3_amount': self.player.stock_3_amount, # 'stock_4_amount': self.player.stock_4_amount, # 'stock_5_amount': self.player.stock_5_amount, # 'stock_6_amount': self.player.stock_6_amount, # } # # def js_vars(self): # return dict( # highcharts_series=[ # { # 'name': 'Asset_A_price', # 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_B_price', # 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_C_price', # 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_D_price', # 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_E_price', # 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_F_price', # 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] # } # ] # ) # # def before_next_page(self): # if self.round_number == 1: # self.player.stock_1_ave_cost_price = 0 # else: # self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price # # print('只读页面平均成本价格是:', self.player.stock_1_ave_cost_price) # # if self.round_number == 1: # self.player.stock_2_ave_cost_price = 0 # else: # self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price # # if self.round_number == 1: # self.player.stock_3_ave_cost_price = 0 # else: # self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price # # if self.round_number == 1: # self.player.stock_4_ave_cost_price = 0 # else: # self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price # # if self.round_number == 1: # self.player.stock_5_ave_cost_price = 0 # else: # self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price # # if self.round_number == 1: # self.player.stock_6_ave_cost_price = 0 # else: # self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price # # 原结尾 class ReadOnly_buy(Page): form_model = 'player' form_fields = ['stock_1_bid_amount', 'stock_2_bid_amount', 'stock_3_bid_amount', 'stock_4_bid_amount', 'stock_5_bid_amount', 'stock_6_bid_amount'] # %% 动态验证 def error_message(self, values): if values['stock_1_bid_amount'] * self.group.stock_1_price + \ values['stock_2_bid_amount'] * self.group.stock_2_price + \ values['stock_3_bid_amount'] * self.group.stock_3_price + \ values['stock_4_bid_amount'] * self.group.stock_4_price + \ values['stock_5_bid_amount'] * self.group.stock_5_price + \ values['stock_6_bid_amount'] * self.group.stock_6_price \ > self.player.money: return 'Your Money is not enough' ### 动态验证END def is_displayed(player): return player.round_number in [1, 2, 3, 4] def vars_for_template(self): self.player.round_number_4() # self.player.unreal_profit_bid() # self.player.real_profit_bid() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), 'stock_1_unreal_profit': self.player.stock_1_unreal_profit, 'stock_2_unreal_profit': self.player.stock_2_unreal_profit, 'stock_3_unreal_profit': self.player.stock_3_unreal_profit, 'stock_4_unreal_profit': self.player.stock_4_unreal_profit, 'stock_5_unreal_profit': self.player.stock_5_unreal_profit, 'stock_6_unreal_profit': self.player.stock_6_unreal_profit, 'stock_1_real_profit': self.player.stock_1_real_profit, 'stock_2_real_profit': self.player.stock_2_real_profit, 'stock_3_real_profit': self.player.stock_3_real_profit, 'stock_4_real_profit': self.player.stock_4_real_profit, 'stock_5_real_profit': self.player.stock_5_real_profit, 'stock_6_real_profit': self.player.stock_6_real_profit, # 'stock_1_profit': round(self.player.stock_1_profit), # 'stock_2_profit': round(self.player.stock_2_profit), # 'stock_3_profit': round(self.player.stock_3_profit), # 'stock_4_profit': round(self.player.stock_4_profit), # 'stock_5_profit': round(self.player.stock_5_profit), # 'stock_6_profit': round(self.player.stock_6_profit) } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): # if self.player.stock_1_amount + self.player.stock_1_bid_amount == 0: # self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price # else: # self.player.stock_1_ave_cost_price = (self.player.stock_1_amount * self.player.stock_1_ave_cost_price + self.group.stock_1_price * self.player.stock_1_bid_amount)/(self.player.stock_1_amount + self.player.stock_1_bid_amount) # # print('购买阶段平均成本价格是:', self.player.stock_1_ave_cost_price) # # if self.player.stock_2_amount + self.player.stock_2_bid_amount == 0: # self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price # else: # self.player.stock_2_ave_cost_price = (self.player.stock_2_amount * self.player.stock_2_ave_cost_price + self.group.stock_2_price * self.player.stock_2_bid_amount)/(self.player.stock_2_amount + self.player.stock_2_bid_amount) # # if self.player.stock_3_amount + self.player.stock_3_bid_amount == 0: # self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price # else: # self.player.stock_3_ave_cost_price = (self.player.stock_3_amount * self.player.stock_3_ave_cost_price + self.group.stock_3_price * self.player.stock_3_bid_amount)/(self.player.stock_3_amount + self.player.stock_3_bid_amount) # # if self.player.stock_4_amount + self.player.stock_4_bid_amount == 0: # self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price # else: # self.player.stock_4_ave_cost_price = (self.player.stock_4_amount * self.player.stock_4_ave_cost_price + self.group.stock_4_price * self.player.stock_4_bid_amount)/(self.player.stock_4_amount + self.player.stock_4_bid_amount) # # if self.player.stock_5_amount + self.player.stock_5_bid_amount == 0: # self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price # else: # self.player.stock_5_ave_cost_price = (self.player.stock_5_amount * self.player.stock_5_ave_cost_price + self.group.stock_5_price * self.player.stock_5_bid_amount)/(self.player.stock_5_amount + self.player.stock_5_bid_amount) # # if self.player.stock_6_amount + self.player.stock_6_bid_amount == 0: # self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price # else: # self.player.stock_6_ave_cost_price = (self.player.stock_6_amount * self.player.stock_6_ave_cost_price + self.group.stock_6_price * self.player.stock_6_bid_amount)/(self.player.stock_6_amount + self.player.stock_6_bid_amount) self.player.stock_1_amount = self.player.stock_1_amount + self.player.stock_1_bid_amount self.player.stock_2_amount = self.player.stock_2_amount + self.player.stock_2_bid_amount self.player.stock_3_amount = self.player.stock_3_amount + self.player.stock_3_bid_amount self.player.stock_4_amount = self.player.stock_4_amount + self.player.stock_4_bid_amount self.player.stock_5_amount = self.player.stock_5_amount + self.player.stock_5_bid_amount self.player.stock_6_amount = self.player.stock_6_amount + self.player.stock_6_bid_amount self.player.money = self.player.money - \ self.player.stock_1_bid_amount * self.group.stock_1_price - \ self.player.stock_2_bid_amount * self.group.stock_2_price - \ self.player.stock_3_bid_amount * self.group.stock_3_price - \ self.player.stock_4_bid_amount * self.group.stock_4_price - \ self.player.stock_5_bid_amount * self.group.stock_5_price - \ self.player.stock_6_bid_amount * self.group.stock_6_price self.player.stock_1_net_amount = self.player.stock_1_bid_amount - self.player.stock_1_sell_amount if self.player.stock_1_net_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_net_amount) + ' (' + str(self.group.stock_1_price) + ')' self.player.stock_2_net_amount = self.player.stock_2_bid_amount - self.player.stock_2_sell_amount if self.player.stock_2_net_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_net_amount) + ' (' + str(self.group.stock_2_price) + ')' self.player.stock_3_net_amount = self.player.stock_3_bid_amount - self.player.stock_3_sell_amount if self.player.stock_3_net_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_net_amount) + ' (' + str(self.group.stock_3_price) + ')' self.player.stock_4_net_amount = self.player.stock_4_bid_amount - self.player.stock_4_sell_amount if self.player.stock_4_net_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_net_amount) + ' (' + str(self.group.stock_4_price) + ')' self.player.stock_5_net_amount = self.player.stock_5_bid_amount - self.player.stock_5_sell_amount if self.player.stock_5_net_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_net_amount) + ' (' + str(self.group.stock_5_price) + ')' self.player.stock_6_net_amount = self.player.stock_6_bid_amount - self.player.stock_6_sell_amount if self.player.stock_6_net_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_net_amount) + ' (' + str(self.group.stock_6_price) + ')' class ReadOnly_4(Page): form_model = 'player' def is_displayed(player): return player.round_number == 4 def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): if self.round_number == 1: self.player.stock_1_ave_cost_price = 0 else: self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price # print('只读页面平均成本价格是:', self.player.stock_1_ave_cost_price) if self.round_number == 1: self.player.stock_2_ave_cost_price = 0 else: self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price if self.round_number == 1: self.player.stock_3_ave_cost_price = 0 else: self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price if self.round_number == 1: self.player.stock_4_ave_cost_price = 0 else: self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price if self.round_number == 1: self.player.stock_5_ave_cost_price = 0 else: self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price if self.round_number == 1: self.player.stock_6_ave_cost_price = 0 else: self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price class SellPage_sellable(Page): # 表单 form_model = 'player' form_fields = ['stock_1_sell_amount', 'stock_2_sell_amount', 'stock_3_sell_amount', 'stock_4_sell_amount', 'stock_5_sell_amount', 'stock_6_sell_amount'] # %% 动态验证出售 def error_message(self, value): if value['stock_1_sell_amount'] > self.player.stock_1_amount: return '你没有那么多资产可以卖' elif value['stock_2_sell_amount'] > self.player.stock_2_amount: return '你没有那么多资产可以卖' elif value['stock_3_sell_amount'] > self.player.stock_3_amount: return '你没有那么多资产可以卖' elif value['stock_4_sell_amount'] > self.player.stock_4_amount: return '你没有那么多资产可以卖' elif value['stock_5_sell_amount'] > self.player.stock_5_amount: return '你没有那么多资产可以卖' elif value['stock_6_sell_amount'] > self.player.stock_6_amount: return '你没有那么多资产可以卖' # def stock_1_sell_amount_error_message(self, value): # if value > self.player.stock_1_amount: # return 'Sell is over ownd.' # # def stock_2_sell_amount_error_message(self, value): # if value > self.player.stock_2_amount: # return 'Sell is over ownd.' # # def stock_3_sell_amount_error_message(self, value): # if value > self.player.stock_3_amount: # return 'Sell is over ownd.' # # def stock_4_sell_amount_error_message(self, value): # if value > self.player.stock_4_amount: # return 'Sell is over ownd.' # # def stock_5_sell_amount_error_message(self, value): # if value > self.player.stock_5_amount: # return 'Sell is over ownd.' # # def stock_6_sell_amount_error_message(self, value): # if value > self.player.stock_6_amount: # return 'Sell is over ownd.' ### 动态验证出售END # 页面到4轮后展示 def is_displayed(player): return player.round_number > 4 def vars_for_template(self): self.player.update_money() self.player.round_number_4() self.group.update_stock_price() self.player.update_stock_1_amount() self.player.update_stock_2_amount() self.player.update_stock_3_amount() self.player.update_stock_4_amount() self.player.update_stock_5_amount() self.player.update_stock_6_amount() # self.player.update_stock_n_profit(1, 'before') # self.player.update_stock_n_profit(2, 'before') # self.player.update_stock_n_profit(3, 'before') # self.player.update_stock_n_profit(4, 'before') # self.player.update_stock_n_profit(5, 'before') # self.player.update_stock_n_profit(6, 'before') # self.player.unreal_profit_sell() # self.player.real_profit_sell() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'num_rounds': [i + 1 for i in range(Constants.num_rounds)], ## [1,2,3,4,....,num_rounds] 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_sell_amount': self.player.stock_1_sell_amount, 'stock_2_sell_amount': self.player.stock_2_sell_amount, 'stock_3_sell_amount': self.player.stock_3_sell_amount, 'stock_4_sell_amount': self.player.stock_4_sell_amount, 'stock_5_sell_amount': self.player.stock_5_sell_amount, 'stock_6_sell_amount': self.player.stock_6_sell_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), 'stock_1_unreal_profit': self.player.stock_1_unreal_profit, 'stock_2_unreal_profit': self.player.stock_2_unreal_profit, 'stock_3_unreal_profit': self.player.stock_3_unreal_profit, 'stock_4_unreal_profit': self.player.stock_4_unreal_profit, 'stock_5_unreal_profit': self.player.stock_5_unreal_profit, 'stock_6_unreal_profit': self.player.stock_6_unreal_profit, 'stock_1_real_profit': self.player.stock_1_real_profit, 'stock_2_real_profit': self.player.stock_2_real_profit, 'stock_3_real_profit': self.player.stock_3_real_profit, 'stock_4_real_profit': self.player.stock_4_real_profit, 'stock_5_real_profit': self.player.stock_5_real_profit, 'stock_6_real_profit': self.player.stock_6_real_profit, # 'stock_1_unreal_profit': round(self.player.stock_1_unreal_profit,2), # 'stock_2_unreal_profit': round(self.player.stock_2_unreal_profit,2), # 'stock_3_unreal_profit': round(self.player.stock_3_unreal_profit,2), # 'stock_4_unreal_profit': round(self.player.stock_4_unreal_profit,2), # 'stock_5_unreal_profit': round(self.player.stock_5_unreal_profit,2), # 'stock_6_unreal_profit': round(self.player.stock_6_unreal_profit,2), # 'stock_1_real_profit': round(self.player.stock_1_real_profit,2), # 'stock_2_real_profit': round(self.player.stock_2_real_profit,2), # 'stock_3_real_profit': round(self.player.stock_3_real_profit,2), # 'stock_4_real_profit': round(self.player.stock_4_real_profit,2), # 'stock_5_real_profit': round(self.player.stock_5_real_profit,2), # 'stock_6_real_profit': round(self.player.stock_6_real_profit,2), # 'stock_1_profit' : round(self.player.stock_1_profit), # 'stock_2_profit' : round(self.player.stock_2_profit), # 'stock_3_profit' : round(self.player.stock_3_profit), # 'stock_4_profit' : round(self.player.stock_4_profit), # 'stock_5_profit' : round(self.player.stock_5_profit), # 'stock_6_profit' : round(self.player.stock_6_profit) } # 传递股价表格 def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): # if self.player.round_number <= 4: # self.player.stock_1_real_profit = 0 # else: # self.player.stock_1_real_profit = (self.group.stock_1_price - self.player.stock_1_ave_cost_price) * self.player.stock_1_sell_amount + self.player.in_round(self.round_number - 1).stock_1_real_profit # 计算平均成本 if self.player.stock_1_amount == 0: self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price else: self.player.stock_1_ave_cost_price = self.player.in_round(self.round_number - 1).stock_1_ave_cost_price if self.player.stock_2_amount == 0: self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price else: self.player.stock_2_ave_cost_price = self.player.in_round(self.round_number - 1).stock_2_ave_cost_price if self.player.stock_3_amount == 0: self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price else: self.player.stock_3_ave_cost_price = self.player.in_round(self.round_number - 1).stock_3_ave_cost_price if self.player.stock_4_amount == 0: self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price else: self.player.stock_4_ave_cost_price = self.player.in_round(self.round_number - 1).stock_4_ave_cost_price if self.player.stock_5_amount == 0: self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price else: self.player.stock_5_ave_cost_price = self.player.in_round(self.round_number - 1).stock_5_ave_cost_price if self.player.stock_6_amount == 0: self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price else: self.player.stock_6_ave_cost_price = self.player.in_round(self.round_number - 1).stock_6_ave_cost_price self.player.stock_1_amount = self.player.stock_1_amount - self.player.stock_1_sell_amount self.player.stock_2_amount = self.player.stock_2_amount - self.player.stock_2_sell_amount self.player.stock_3_amount = self.player.stock_3_amount - self.player.stock_3_sell_amount self.player.stock_4_amount = self.player.stock_4_amount - self.player.stock_4_sell_amount self.player.stock_5_amount = self.player.stock_5_amount - self.player.stock_5_sell_amount self.player.stock_6_amount = self.player.stock_6_amount - self.player.stock_6_sell_amount self.player.money = self.player.money + \ self.player.stock_1_sell_amount * self.group.stock_1_price + \ self.player.stock_2_sell_amount * self.group.stock_2_price + \ self.player.stock_3_sell_amount * self.group.stock_3_price + \ self.player.stock_4_sell_amount * self.group.stock_4_price + \ self.player.stock_5_sell_amount * self.group.stock_5_price + \ self.player.stock_6_sell_amount * self.group.stock_6_price self.player.stock_1_net_amount = self.player.stock_1_bid_amount - self.player.stock_1_sell_amount if self.player.stock_1_net_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_net_amount) + ' (' + str(self.group.stock_1_price) + ')' self.player.stock_2_net_amount = self.player.stock_2_bid_amount - self.player.stock_2_sell_amount if self.player.stock_2_net_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_net_amount) + ' (' + str(self.group.stock_2_price) + ')' self.player.stock_3_net_amount = self.player.stock_3_bid_amount - self.player.stock_3_sell_amount if self.player.stock_3_net_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_net_amount) + ' (' + str(self.group.stock_3_price) + ')' self.player.stock_4_net_amount = self.player.stock_4_bid_amount - self.player.stock_4_sell_amount if self.player.stock_4_net_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_net_amount) + ' (' + str(self.group.stock_4_price) + ')' self.player.stock_5_net_amount = self.player.stock_5_bid_amount - self.player.stock_5_sell_amount if self.player.stock_5_net_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_net_amount) + ' (' + str(self.group.stock_5_price) + ')' self.player.stock_6_net_amount = self.player.stock_6_bid_amount - self.player.stock_6_sell_amount if self.player.stock_6_net_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_net_amount) + ' (' + str(self.group.stock_6_price) + ')' # self.player.update_stock_n_profit(1, 'after') # self.player.update_stock_n_profit(2, 'after') # self.player.update_stock_n_profit(3, 'after') # self.player.update_stock_n_profit(4, 'after') # self.player.update_stock_n_profit(5, 'after') # self.player.update_stock_n_profit(6, 'after') class BuyPage_buyable(Page): form_model = 'player' form_fields = ['stock_1_bid_amount', 'stock_2_bid_amount', 'stock_3_bid_amount', 'stock_4_bid_amount', 'stock_5_bid_amount', 'stock_6_bid_amount'] # %% 动态验证 def error_message(self, values): if values['stock_1_bid_amount'] * self.group.stock_1_price + \ values['stock_2_bid_amount'] * self.group.stock_2_price + \ values['stock_3_bid_amount'] * self.group.stock_3_price + \ values['stock_4_bid_amount'] * self.group.stock_4_price + \ values['stock_5_bid_amount'] * self.group.stock_5_price + \ values['stock_6_bid_amount'] * self.group.stock_6_price \ > self.player.money: return 'Your Money is not enough' ### 动态验证END def is_displayed(player): return player.round_number > 4 def vars_for_template(self): self.player.round_number_4() # self.player.unreal_profit_bid() # self.player.real_profit_bid() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.money, 2), ','), 'stock_1_price': round(self.group.stock_1_price, 2), 'stock_2_price': round(self.group.stock_2_price, 2), 'stock_3_price': round(self.group.stock_3_price, 2), 'stock_4_price': round(self.group.stock_4_price, 2), 'stock_5_price': round(self.group.stock_5_price, 2), 'stock_6_price': round(self.group.stock_6_price, 2), 'stock_1_amount': self.player.stock_1_amount, 'stock_2_amount': self.player.stock_2_amount, 'stock_3_amount': self.player.stock_3_amount, 'stock_4_amount': self.player.stock_4_amount, 'stock_5_amount': self.player.stock_5_amount, 'stock_6_amount': self.player.stock_6_amount, 'stock_1_net_amount_history': self.player.stock_1_net_amount_history(), 'stock_2_net_amount_history': self.player.stock_2_net_amount_history(), 'stock_3_net_amount_history': self.player.stock_3_net_amount_history(), 'stock_4_net_amount_history': self.player.stock_4_net_amount_history(), 'stock_5_net_amount_history': self.player.stock_5_net_amount_history(), 'stock_6_net_amount_history': self.player.stock_6_net_amount_history(), 'stock_1_unreal_profit': self.player.stock_1_unreal_profit, 'stock_2_unreal_profit': self.player.stock_2_unreal_profit, 'stock_3_unreal_profit': self.player.stock_3_unreal_profit, 'stock_4_unreal_profit': self.player.stock_4_unreal_profit, 'stock_5_unreal_profit': self.player.stock_5_unreal_profit, 'stock_6_unreal_profit': self.player.stock_6_unreal_profit, 'stock_1_real_profit': self.player.stock_1_real_profit, 'stock_2_real_profit': self.player.stock_2_real_profit, 'stock_3_real_profit': self.player.stock_3_real_profit, 'stock_4_real_profit': self.player.stock_4_real_profit, 'stock_5_real_profit': self.player.stock_5_real_profit, 'stock_6_real_profit': self.player.stock_6_real_profit, # 'stock_1_profit': round(self.player.stock_1_profit), # 'stock_2_profit': round(self.player.stock_2_profit), # 'stock_3_profit': round(self.player.stock_3_profit), # 'stock_4_profit': round(self.player.stock_4_profit), # 'stock_5_profit': round(self.player.stock_5_profit), # 'stock_6_profit': round(self.player.stock_6_profit) } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) def before_next_page(self): if self.player.stock_1_amount + self.player.stock_1_bid_amount == 0: self.player.stock_1_ave_cost_price = self.group.in_round(self.round_number - 1).stock_1_price else: self.player.stock_1_ave_cost_price = (self.player.stock_1_amount * self.player.stock_1_ave_cost_price + self.group.stock_1_price * self.player.stock_1_bid_amount)/(self.player.stock_1_amount + self.player.stock_1_bid_amount) # print('购买阶段平均成本价格是:', self.player.stock_1_ave_cost_price) if self.player.stock_2_amount + self.player.stock_2_bid_amount == 0: self.player.stock_2_ave_cost_price = self.group.in_round(self.round_number - 1).stock_2_price else: self.player.stock_2_ave_cost_price = (self.player.stock_2_amount * self.player.stock_2_ave_cost_price + self.group.stock_2_price * self.player.stock_2_bid_amount)/(self.player.stock_2_amount + self.player.stock_2_bid_amount) if self.player.stock_3_amount + self.player.stock_3_bid_amount == 0: self.player.stock_3_ave_cost_price = self.group.in_round(self.round_number - 1).stock_3_price else: self.player.stock_3_ave_cost_price = (self.player.stock_3_amount * self.player.stock_3_ave_cost_price + self.group.stock_3_price * self.player.stock_3_bid_amount)/(self.player.stock_3_amount + self.player.stock_3_bid_amount) if self.player.stock_4_amount + self.player.stock_4_bid_amount == 0: self.player.stock_4_ave_cost_price = self.group.in_round(self.round_number - 1).stock_4_price else: self.player.stock_4_ave_cost_price = (self.player.stock_4_amount * self.player.stock_4_ave_cost_price + self.group.stock_4_price * self.player.stock_4_bid_amount)/(self.player.stock_4_amount + self.player.stock_4_bid_amount) if self.player.stock_5_amount + self.player.stock_5_bid_amount == 0: self.player.stock_5_ave_cost_price = self.group.in_round(self.round_number - 1).stock_5_price else: self.player.stock_5_ave_cost_price = (self.player.stock_5_amount * self.player.stock_5_ave_cost_price + self.group.stock_5_price * self.player.stock_5_bid_amount)/(self.player.stock_5_amount + self.player.stock_5_bid_amount) if self.player.stock_6_amount + self.player.stock_6_bid_amount == 0: self.player.stock_6_ave_cost_price = self.group.in_round(self.round_number - 1).stock_6_price else: self.player.stock_6_ave_cost_price = (self.player.stock_6_amount * self.player.stock_6_ave_cost_price + self.group.stock_6_price * self.player.stock_6_bid_amount)/(self.player.stock_6_amount + self.player.stock_6_bid_amount) self.player.stock_1_amount = self.player.stock_1_amount + self.player.stock_1_bid_amount self.player.stock_2_amount = self.player.stock_2_amount + self.player.stock_2_bid_amount self.player.stock_3_amount = self.player.stock_3_amount + self.player.stock_3_bid_amount self.player.stock_4_amount = self.player.stock_4_amount + self.player.stock_4_bid_amount self.player.stock_5_amount = self.player.stock_5_amount + self.player.stock_5_bid_amount self.player.stock_6_amount = self.player.stock_6_amount + self.player.stock_6_bid_amount self.player.money = self.player.money - \ self.player.stock_1_bid_amount * self.group.stock_1_price - \ self.player.stock_2_bid_amount * self.group.stock_2_price - \ self.player.stock_3_bid_amount * self.group.stock_3_price - \ self.player.stock_4_bid_amount * self.group.stock_4_price - \ self.player.stock_5_bid_amount * self.group.stock_5_price - \ self.player.stock_6_bid_amount * self.group.stock_6_price self.player.stock_1_net_amount = self.player.stock_1_bid_amount - self.player.stock_1_sell_amount if self.player.stock_1_net_amount == 0: self.player.stock_1_net_amount_str = '-' else: self.player.stock_1_net_amount_str = str(self.player.stock_1_net_amount) + ' (' + str(self.group.stock_1_price) + ')' self.player.stock_2_net_amount = self.player.stock_2_bid_amount - self.player.stock_2_sell_amount if self.player.stock_2_net_amount == 0: self.player.stock_2_net_amount_str = '-' else: self.player.stock_2_net_amount_str = str(self.player.stock_2_net_amount) + ' (' + str(self.group.stock_2_price) + ')' self.player.stock_3_net_amount = self.player.stock_3_bid_amount - self.player.stock_3_sell_amount if self.player.stock_3_net_amount == 0: self.player.stock_3_net_amount_str = '-' else: self.player.stock_3_net_amount_str = str(self.player.stock_3_net_amount) + ' (' + str(self.group.stock_3_price) + ')' self.player.stock_4_net_amount = self.player.stock_4_bid_amount - self.player.stock_4_sell_amount if self.player.stock_4_net_amount == 0: self.player.stock_4_net_amount_str = '-' else: self.player.stock_4_net_amount_str = str(self.player.stock_4_net_amount) + ' (' + str(self.group.stock_4_price) + ')' self.player.stock_5_net_amount = self.player.stock_5_bid_amount - self.player.stock_5_sell_amount if self.player.stock_5_net_amount == 0: self.player.stock_5_net_amount_str = '-' else: self.player.stock_5_net_amount_str = str(self.player.stock_5_net_amount) + ' (' + str(self.group.stock_5_price) + ')' self.player.stock_6_net_amount = self.player.stock_6_bid_amount - self.player.stock_6_sell_amount if self.player.stock_6_net_amount == 0: self.player.stock_6_net_amount_str = '-' else: self.player.stock_6_net_amount_str = str(self.player.stock_6_net_amount) + ' (' + str(self.group.stock_6_price) + ')' class Forecast(Page): form_model = 'player' form_fields = ['Asset_A_forecast', 'Asset_B_forecast', 'Asset_C_forecast', 'Asset_D_forecast', 'Asset_E_forecast', 'Asset_F_forecast'] def is_displayed(player): return player.round_number in [11, 18] # def error_message(player, values): # if values['Asset_A_forecast'] == values['Asset_B_forecast']: # return 'Sell is over ownd.' def vars_for_template(self): self.player.round_number_4() return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) # class Forecast2(Page): # form_model = 'player' # form_fields = ['stock_A_forecast', 'stock_B_forecast', 'stock_C_forecast', 'stock_D_forecast', # 'stock_E_forecast', 'stock_F_forecast'] # # def is_displayed(player): # return player.round_number == 18 # # def vars_for_template(self): # self.player.round_number_4() # return { # 'round_number': self.round_number, # 'round_number_4': self.player.round_number_4, # } # # def js_vars(self): # return dict( # highcharts_series=[ # { # 'name': 'Asset_A_price', # 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_B_price', # 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_C_price', # 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_D_price', # 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_E_price', # 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] # }, { # 'name': 'Asset_F_price', # 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] # } # ] # ) class Clear(Page): timeout_seconds = 10 form_model = 'player' def is_displayed(player): return player.round_number == Constants.num_rounds def vars_for_template(self): self.player.round_number_4() self.player.final_money = self.player.money + \ self.player.stock_1_amount * self.group.stock_1_price + \ self.player.stock_2_amount * self.group.stock_2_price + \ self.player.stock_3_amount * self.group.stock_3_price + \ self.player.stock_4_amount * self.group.stock_4_price + \ self.player.stock_5_amount * self.group.stock_5_price + \ self.player.stock_6_amount * self.group.stock_6_price return { 'round_number': self.round_number, 'round_number_4': self.player.round_number_4, 'money': format(round(self.player.final_money, 2), ',') } def js_vars(self): return dict( highcharts_series=[ { 'name': 'Asset_A_price', 'data': [round(g.stock_1_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_B_price', 'data': [round(g.stock_2_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_C_price', 'data': [round(g.stock_3_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_D_price', 'data': [round(g.stock_4_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_E_price', 'data': [round(g.stock_5_price, 2) for g in self.group.in_all_rounds()] }, { 'name': 'Asset_F_price', 'data': [round(g.stock_6_price, 2) for g in self.group.in_all_rounds()] } ] ) page_sequence = [ReadOnly_sell, ReadOnly_buy, ReadOnly_4, SellPage_sellable, BuyPage_buyable, Forecast, Clear]