示例#1
0
 def save(self,
          force_insert=False,
          force_update=False,
          using=None,
          update_fields=None):
     self.sim_round = current_sim_day(self.simulation_id)['sim_round']
     self.sim_day = current_sim_day(self.simulation_id)['sim_day']
     models.Model.save(self, force_insert, force_update, using,
                       update_fields)
示例#2
0
文件: models.py 项目: HEG-Arc/marmix
 def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
     self.sim_round = current_sim_day(self.stock.simulation_id)['sim_round']
     self.sim_day = current_sim_day(self.stock.simulation_id)['sim_day']
     if self.pk is None:
         self.state = self.SUBMITTED
     if self.state == self.SUBMITTED:
         models.Model.save(self, force_insert, force_update, using, update_fields)
         check_matching_orders.apply_async([self.id])
     else:
         models.Model.save(self, force_insert, force_update, using, update_fields)
示例#3
0
 def save(self,
          force_insert=False,
          force_update=False,
          using=None,
          update_fields=None):
     self.sim_round = current_sim_day(self.stock.simulation_id)['sim_round']
     self.sim_day = current_sim_day(self.stock.simulation_id)['sim_day']
     if self.pk is None:
         self.state = self.SUBMITTED
     if self.state == self.SUBMITTED:
         models.Model.save(self, force_insert, force_update, using,
                           update_fields)
         check_matching_orders.apply_async([self.id])
     else:
         models.Model.save(self, force_insert, force_update, using,
                           update_fields)
示例#4
0
def update_mssql_time(simulation_id):
    current = current_sim_day(simulation_id)
    conn = pymssql.connect(settings.MSSQL_HOST, settings.MSSQL_USER, settings.MSSQL_PASSWORD, settings.MSSQL_DATABASE)
    cursor = conn.cursor()
    cursor.execute("UPDATE MARMIX_SIMULATION SET CURRENT_DAY=%d, CURRENT_ROUND=%d WHERE SIMULATIONID=%d",
                   (current['sim_day'], current['sim_round'], simulation_id))
    conn.commit()
    conn.close()
示例#5
0
 def get_financials(self, obj):
     clock = current_sim_day(obj.ticker.simulation_id)
     current_financials = CompanyFinancial.objects.filter(
         company=obj).filter(sim_date__lte=clock['sim_round'] * 100 +
                             clock['sim_day']).filter(
                                 sim_round__gt=0).filter(sim_day__gt=0)
     serializer = NestedFinancialsSerializer(current_financials, many=True)
     return serializer.data
示例#6
0
def next_tick(simulation_id):
    simulation = Simulation.objects.select_related('ticker').get(pk=simulation_id)
    last_clock = current_sim_day(simulation_id)
    clock = True
    # We have two sorts of clocks: internal or external
    if simulation.simulation_type == Simulation.LIVE:
        # The clock is external
        current_round, current_day = clock_erpsim(simulation_id)
        if not current_round or not current_day:
            clock = False
    else:
        # The clock is internal
        if last_clock['timestamp'] < timezone.now()-datetime.timedelta(seconds=simulation.ticker.day_duration):
            current_round = last_clock['sim_round']
            current_day = last_clock['sim_day']+1
        else:
            current_round = last_clock['sim_round']
            current_day = last_clock['sim_day']
    if clock:
        if last_clock['sim_round'] != 0:
            # We push the clock
            if last_clock['sim_day'] != current_day:
                cleanup_open_orders.apply_async(args=[simulation_id, last_clock['sim_round'], last_clock['sim_day']])
                if last_clock['sim_day'] == simulation.ticker.nb_days:
                    if last_clock['sim_round'] == simulation.ticker.nb_rounds:
                        simulation.state = Simulation.FINISHED
                        if simulation.simulation_type == Simulation.INTRO or simulation.simulation_type == Simulation.ADVANCED:
                            prepare_dividends_payments.apply_async([simulation.id, current_round])
                        sim_day = SimDay(simulation=simulation, sim_round=last_clock['sim_round'], sim_day=last_clock['sim_day'], state=Simulation.FINISHED)
                        sim_day.save()
                    else:
                        simulation.state = Simulation.PAUSED
                        if simulation.simulation_type == Simulation.INTRO or simulation.simulation_type == Simulation.ADVANCED:
                            prepare_dividends_payments.apply_async([simulation.id, current_round])
                        sim_day = SimDay(simulation=simulation, sim_round=last_clock['sim_round']+1, sim_day=0, state=simulation.state)
                        sim_day.save()
                    simulation.save()
                else:
                    sim_day = SimDay(simulation=simulation, sim_round=current_round, sim_day=current_day, state=simulation.state)
                    sim_day.save()
                    stocks = Stock.objects.all().filter(simulation_id=simulation.id)
                    for stock in stocks:
                        liquidity_trader_order.apply_async(args=[simulation.id, stock.id])
                    market_maker.apply_async(args=[simulation.id])
                if simulation.simulation_type == Simulation.INDEXED:
                    update_mssql_time(simulation.id)
                print("Next tick processed: SIM: %s - R%sD%s @ %s" %
                      (sim_day.simulation_id, sim_day.sim_round, sim_day.sim_day, sim_day.timestamp))
        else:
            # First start of the simulation
            sim_day = SimDay(simulation=simulation, sim_round=1, sim_day=1, state=simulation.state)
            sim_day.save()
            stocks = Stock.objects.all().filter(simulation_id=simulation.id)
            for stock in stocks:
                liquidity_trader_order.apply_async(args=[simulation.id, stock.id])
示例#7
0
文件: views.py 项目: abduladi/marmix
 def get(self, request, *args, **kwargs):
     team = self.request.user.get_team
     orders = Order.objects.all().filter(
         stock__simulation_id=team.current_simulation_id).filter(
             team=team).select_related('stock', 'transaction')
     clock = current_sim_day(team.current_simulation_id)
     return render(request, 'stocks/transactionline_list.html', {
         'orders': orders,
         'team': team,
         'clock': clock
     })
示例#8
0
文件: views.py 项目: abduladi/marmix
 def get(self, request, *args, **kwargs):
     team = self.request.user.get_team
     tl = TransactionLine.objects.select_related(
         'stock', 'transaction').filter(
             transaction__simulation_id=team.current_simulation_id).filter(
                 team_id=team.id).filter(
                     asset_type=TransactionLine.DIVIDENDS).order_by(
                         '-transaction__sim_round', 'stock__symbol')
     clock = current_sim_day(team.current_simulation_id)
     return render(request, 'stocks/dividends_list.html', {
         'transactions': tl,
         'clock': clock
     })
示例#9
0
 def get_shares(self, obj):
     clock = current_sim_day(obj.ticker.simulation_id)
     #print("Clock %s" % clock)
     if clock['sim_round'] == 0:
         round = 1
     #elif clock['sim_state'] == Simulation.FINISHED:
     #    print("We are in finished state!")
     #    round = clock['sim_round'] + 1
     else:
         round = clock['sim_round']
     current_shares = CompanyShare.objects.filter(company=obj).filter(sim_round__lt=round).filter(sim_round__gt=0)
     serializer = NestedSharesSerializer(current_shares, many=True)
     return serializer.data
示例#10
0
 def get_shares(self, obj):
     clock = current_sim_day(obj.ticker.simulation_id)
     #print("Clock %s" % clock)
     if clock['sim_round'] == 0:
         round = 1
     #elif clock['sim_state'] == Simulation.FINISHED:
     #    print("We are in finished state!")
     #    round = clock['sim_round'] + 1
     else:
         round = clock['sim_round']
     current_shares = CompanyShare.objects.filter(company=obj).filter(
         sim_round__lt=round).filter(sim_round__gt=0)
     serializer = NestedSharesSerializer(current_shares, many=True)
     return serializer.data
示例#11
0
文件: models.py 项目: HEG-Arc/marmix
 def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
     self.sim_round = current_sim_day(self.simulation_id)['sim_round']
     self.sim_day = current_sim_day(self.simulation_id)['sim_day']
     models.Model.save(self, force_insert, force_update, using, update_fields)
示例#12
0
 def get_financials(self, obj):
     clock = current_sim_day(obj.ticker.simulation_id)
     current_financials = CompanyFinancial.objects.filter(company=obj).filter(sim_date__lte=clock['sim_round']*100+clock['sim_day']).filter(sim_round__gt=0).filter(sim_day__gt=0)
     serializer = NestedFinancialsSerializer(current_financials, many=True)
     return serializer.data
示例#13
0
文件: views.py 项目: HEG-Arc/marmix
 def get(self, request, *args, **kwargs):
     team = self.request.user.get_team
     orders = Order.objects.all().filter(stock__simulation_id=team.current_simulation_id).filter(team=team).select_related('stock', 'transaction')
     clock = current_sim_day(team.current_simulation_id)
     return render(request, 'stocks/transactionline_list.html', {'orders': orders, 'team': team, 'clock': clock})
示例#14
0
文件: views.py 项目: HEG-Arc/marmix
 def get(self, request, *args, **kwargs):
     team = self.request.user.get_team
     tl = TransactionLine.objects.select_related('stock', 'transaction').filter(transaction__simulation_id=team.current_simulation_id).filter(
         team_id=team.id).filter(asset_type=TransactionLine.DIVIDENDS).order_by('-transaction__sim_round', 'stock__symbol')
     clock = current_sim_day(team.current_simulation_id)
     return render(request, 'stocks/dividends_list.html', {'transactions': tl, 'clock': clock})