def snapshot(save=True): stocks = polling() from portfolio.models import Portfolio portfolio = Portfolio(stocks) if save: portfolio.save() return portfolio
def post(self, request): form = self.form_class(request.POST) if form.is_valid(): user = form.save(commit=False) #storing user info locally # cleaning data username = form.cleaned_data['username'] password = form.cleaned_data['password'] #change password user.set_password(password) user.save() #returns User objects if credentials are correct user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user) # also need to make them a portfolio portfolio = Portfolio(user=User.objects.get( username=username)) portfolio.save() return redirect( 'index') # redirecting you back to the home page return render(request, self.template_name, {'form': form})
def snapshot(): stocks = polling() print(stocks) stock_list = [] for stock in stocks: stock_list.append({'code': stock['code'], 'name': stock['name'], 'amount': stock['amount'], 'current': stock['current'], 'percentage': stock['percentage'], 'change': stock['change'] or 0}) from portfolio.models import Portfolio from datetime import date date = get_date(str(date.today())) print('date***{}'.format(date)) p = Portfolio(list=stock_list) p.compute() Portfolio.objects(date=date).update_one(list=p.list, market_value=p.market_value, total=p.total, net_asset=p.net_asset, cost=p.cost, cost_history=p.cost_history, cost_zs=p.cost_zs, cost_ht1=p.cost_ht1, cost_ht2=p.cost_ht2, cost_ht1_real=p.cost_ht1_real, cost_ht2_real=p.cost_ht2_real, position_ratio=p.position_ratio, financing=p.financing, lever=p.lever, cash=p.cash, profit=p.profit, profit_ratio=p.profit_ratio, profit_today=p.profit_today, profit_ratio_today=p.profit_ratio_today, upsert=True) result = Portfolio.objects.get(date=date) if result: print('result list***{}'.format(result.list)) return result else: return None
def get_context_data(self, **kwargs): context_data = super(InnerView, self).get_context_data(**kwargs) portfolio = Portfolio(settings.FLICKR_USER_ID) portfolio.setSections(settings.PORTFOLIO_SECTIONS) context_data['portfolio'] = portfolio context_data['snippets'] = self.get_snippets() return context_data
def post(self, request, *args, **kw): print('post****{}'.format(request.data)) method = request.data.get('method') code = request.data.get('code') amount = request.data.get('amount') # mongoengine pull/push operator latest_portfolio = Portfolio.objects().order_by('-date').first() date = latest_portfolio.date Portfolio.objects(date=date).update_one(pull__list={'code': code}) Portfolio.objects(date=date).update_one(push__list={'code': code, 'amount': int(amount)}, upsert=True) return Response(status=status.HTTP_204_NO_CONTENT)
def signup(request): # 기로그인 -> redirect if request.user.is_anonymous: pass elif request.user: # return HttpResponseRedirect('/portfolios/') return HttpResponseRedirect('/') template = 'registration/signup.html' signupForm = UserCreationForm() message = "" # form 작성 후 post 액션 시 if request.method == "POST": signupForm = UserCreationForm(request.POST, request.FILES or None) if signupForm.is_valid(): user = signupForm.save(commit=False) user.save() """Create a portfolio for this user""" Portfolio.make_portfolio(user) # 계정 활성화를 위한 이메일 인증 current_site = get_current_site(request) mail_subject = render_to_string( 'registration/activation_email_subject.txt') mail_message = render_to_string( 'registration/activation_email.html', { 'user': user, 'domain': current_site.domain, 'uid': urlsafe_base64_encode(force_bytes(user.pk)), 'token': account_activation_token.make_token(user), 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, }) to_email = signupForm.cleaned_data.get('email') email = EmailMessage(mail_subject, mail_message, to=[to_email]) email.send() return HttpResponse( 'Please confirm your email address to complete the registration' ) else: message = "패스워드 미일치" elif request.method == "GET": pass context = {"signupForm": signupForm, "message": message} return render(request, template, context)
def post(self, request, *args, **kw): print('post****{}'.format(request.data)) method = request.data.get('method') code = request.data.get('code') amount = request.data.get('amount') # mongoengine pull/push operator latest_portfolio = Portfolio.objects().order_by('-date').first() date = latest_portfolio.date Portfolio.objects(date=date).update_one(pull__list={'code': code}) Portfolio.objects(date=date).update_one(push__list={ 'code': code, 'amount': int(amount) }, upsert=True) return Response(status=status.HTTP_204_NO_CONTENT)
def create(self, validated_data): """ Overwrites the create() method to return a ``Portfolio`` object after the POSTED ``Transaction`` has occured (instead of a ``Transaction`` object). Note that the validation for the posted transaction is done in the .save() method of the model, not here. (Model raises ValidationError on errors.) """ transaction = Transaction( user=validated_data["user"], symbol=validated_data["symbol"], amount=validated_data["amount"], date_posted=validated_data["date_posted"], simulation=None, ) # this automatically adds to / substracts from # the user's Portfolio for given <symbol> # (see Portfolio's .save() method overwrite) transaction.save() try: portfolio = Portfolio.objects.get( user=validated_data["user"], symbol=validated_data["symbol"], simulation=None, ) return portfolio except Portfolio.DoesNotExist: # user sold all his stocks # > user's portfolio for given <symbol> was deleted # > return a dummy portfolio return Portfolio(symbol=validated_data["symbol"], amount=0)
def get_user(request): '''used by front end app to get initial data on page load''' session = request.session portfolio = Portfolio.initialize_session(session) return HttpResponse(json.dumps(dict(cash_balance=portfolio.cash_balance, id=portfolio.pk, purchases=[dict(ticker=p.ticker, units=p.units, purchase_price=p.purchase_price, id=p.pk) for p in portfolio.stockpurchase_set.all()])))
def test_portfolio_creation(self): # create a portfolio port = Portfolio( title="My title", author=self.staffUser ) port.save() # assert slug is correctly generated self.assertEqual(port.slug, "my-title") # assert portfolio is in published manager n_port = Portfolio.published.all().count() self.assertEqual(n_port, 4) # assert published manager delivers last portfolio first ports = Portfolio.published.all() self.assertEqual(port, ports[0]) # create a new portfolio with same title port2 = Portfolio( title="My title", order=2, author=self.staffUser ) port2.save() # assert slugs are unique self.assertTrue(port.slug != port2.slug) # assert it's last in published manager ports = Portfolio.published.all() self.assertEqual(port2, ports[4])
def get(self, request, *args, **kw): # Process any get params that you may need # If you don't need to process get params, # you can skip this part items = Portfolio.objects().order_by('date') # portfolio_col = db.portfolio.find() # df = pd.DataFrame(list(portfolio_col)) # print(df) serializer = PortfolioListSerializer({'items': items}) # print(items) # print(serializer) result = get_portfolio_result(serializer) response = Response(result, status=status.HTTP_200_OK) return get_response_cors(response)
def new_transaction(request): '''used by front end app to send both BUY and SELL orders''' if request.method == 'POST': try: order = json.loads(request.body) except ValueError: order = request.POST portfolio = Portfolio.initialize_session(request.session) order = portfolio.process_order(order, True if order['type'] == 'sell' else False) return HttpResponse(json.dumps(dict(success=order, cash_balance=portfolio.cash_balance, id=portfolio.pk, purchases=[dict(ticker=p.ticker, units=p.units, purchase_price=p.purchase_price, id=p.pk) for p in portfolio.stockpurchase_set.all()]))) else: return HttpResponse('Sorry post only')
def snapshot(): stocks = polling() print(stocks) stock_list = [] for stock in stocks: stock_list.append({ 'code': stock['code'], 'name': stock['name'], 'amount': stock['amount'], 'current': stock['current'], 'percentage': stock['percentage'], 'change': stock['change'] or 0 }) from portfolio.models import Portfolio from datetime import date date = get_date(str(date.today())) print('date***{}'.format(date)) p = Portfolio(list=stock_list) p.compute() Portfolio.objects(date=date).update_one( list=p.list, market_value=p.market_value, total=p.total, net_asset=p.net_asset, cost=p.cost, cost_history=p.cost_history, cost_zs=p.cost_zs, cost_ht1=p.cost_ht1, cost_ht2=p.cost_ht2, cost_ht1_real=p.cost_ht1_real, cost_ht2_real=p.cost_ht2_real, position_ratio=p.position_ratio, financing=p.financing, lever=p.lever, cash=p.cash, profit=p.profit, profit_ratio=p.profit_ratio, profit_today=p.profit_today, profit_ratio_today=p.profit_ratio_today, upsert=True) result = Portfolio.objects.get(date=date) if result: print('result list***{}'.format(result.list)) return result else: return None
def create_portfolios(loan_number_list): print('Portfolio started....') for loan_number in loan_number_list: loan_number_str = str(loan_number) portfolio_name = loan_number_str + ' Sample Loans' new_portfolio = Portfolio(name=portfolio_name) new_portfolio.save() bank_loan_id = random.randint(500000, 600000) loans = [] # file_name = loan_number_str + '_sample_loans.csv' while len(loans) < loan_number: start_row = random.randint(0, 3000) real_world_file_number_str = str(random.randint(1, 7)) real_world_file_name = 'real_world_data/5000_real_world_loans_' + real_world_file_number_str + '.csv' with open(real_world_file_name) as real_world_csv_file: reader = csv.DictReader(real_world_csv_file) for row in reader: if start_row == 0 and len(loans) < loan_number: bank_loan_id = next_bank_loan_id(bank_loan_id) loans.append( Loan( portfolio=new_portfolio, bank_loan_id=bank_loan_id, deferred_balance=is_set(row['DEFERRED_BAL']), pmi_insurance=is_set(row['PMI']), first_payment_date=convert_date_string( row['First_Payment_Date']), junior_lien_balance=is_set( row['Junior Lien Bal']), senior_lien_balance=is_set( row['Senior Lien Bal']), mortgage_type=is_set(row['Mortgagetype']), gross_margin=is_set(row['Gross_Margin']), original_amount=is_set(row['Original_Amount']), current_value_date=convert_date_string( row['Current_Value_Date']), us_state=is_set(row['STATE']), BK_flag=is_set(row['BK_FLAG']), negam_initial_minimum_payment_period=is_set( row['Negam_Initial_Minimum_Payment_Period'] ), product_type=is_set(row['Product_Type']), remaining_term=is_set(row['Remaining_Term']), first_recast_or_next_recast=is_set( row['First_Recast/Next_Recast']), amortized_term=is_set(row['Amor_Term']), recast_cap=is_set(row['Recast_Cap']), occupancy_code=is_set(row['Occupancy']), modification_date=convert_date_string( row['Modification_Date']), negam_payment_reset_frequency=is_set( row['Negam_Payment_Reset_Frequency']), IO_term=is_set(row['IO_Term']), senior_lien_balance_date=convert_date_string( row['Senior Lien Bal Date']), icap=is_set(row['ICAP']), current_interest_rate=is_set( row['Current_Interest_Rate']), SF=is_set(row['SF']), fico=is_set(row['FICO']), pcap=is_set(row['PCAP']), interest_reset_interval=is_set( row['Interest_Reset_Interval']), recast_frequency=is_set( row['Recast_Frequency']), original_term=is_set(row['Original_Term']), as_of_date=convert_date_string( row['AS_OF_DATE']), lcap=is_set(row['LCAP']), status=is_set(row['STATUS']), MSR=is_set(row['MSR']), original_appraisal_amount=is_set( row['Original_Appraisal_Amount']), lfloor=is_set(row['LFLOOR']), purpose=is_set(row['Purpose']), reset_index=is_set(row['Reset_Index']), zipcode=is_set(row['ZIP']), property_type_code=is_set(row['Property']), lien_position=is_set(row['Lien_Position']), current_FICO_score=is_set( row['Current_FICO_Score']), current_property_value=is_set( row['Current_Property_Value']), foreclosure_referral_date=convert_date_string( row['Foreclosure_Referral_Date']), current_principal_balance=is_set( row['Current_Principal_Balance']), last_payment_received=convert_date_string( row['LAST_PMT_RECD']), original_rate=is_set(row['ORATE']), original_date=convert_date_string( row['Origination_Date']), city=is_set(row['CITY']), second_lien_piggyback_flag=is_set( row['2nd Lien Piggyback Flag']), junior_lien_balance_date=convert_date_string( row['Junior Lien Bal Date']), first_index_rate_adjustment_date= convert_date_string( row['First_Interest_Rate_Adjustment_Date'] ))) else: start_row -= 1 Loan.objects.bulk_create(loans) saved_loans = Loan.objects.filter(portfolio=new_portfolio).values() portfolio_loans_calculations = calculate_aggregate_portfolio_data( saved_loans) new_portfolio.total_loan_balance = portfolio_loans_calculations[ 'total_loan_balance'] new_portfolio.total_loan_count = portfolio_loans_calculations[ 'total_loan_count'] new_portfolio.average_loan_balance = portfolio_loans_calculations[ 'avg_loan_balance'] new_portfolio.weighted_average_coupon = portfolio_loans_calculations[ 'weighted_avg_coupon'] new_portfolio.weighted_average_life_to_maturity = portfolio_loans_calculations[ 'weighted_avg_life_to_maturity'] # Loan status summary data loan_status_summary = loans_status_summary(saved_loans) new_portfolio.current_balance = loan_status_summary["CURRENT"][ "balance"] new_portfolio.current_count = loan_status_summary["CURRENT"]["count"] new_portfolio.dpd90_balance = loan_status_summary["90 DPD"]["balance"] new_portfolio.dpd90_count = loan_status_summary["90 DPD"]["count"] new_portfolio.fc_balance = loan_status_summary["FC"]["balance"] new_portfolio.fc_count = loan_status_summary["FC"]["count"] new_portfolio.dpd60_balance = loan_status_summary["60 DPD"]["balance"] new_portfolio.dpd60_count = loan_status_summary["60 DPD"]["count"] new_portfolio.reo_balance = loan_status_summary["REO"]["balance"] new_portfolio.reo_count = loan_status_summary["REO"]["count"] new_portfolio.reperf_balance = loan_status_summary["REPERF"]["balance"] new_portfolio.reperf_count = loan_status_summary["REPERF"]["count"] new_portfolio.dpd30_balance = loan_status_summary["30 DPD"]["balance"] new_portfolio.dpd30_count = loan_status_summary["30 DPD"]["count"] new_portfolio.rem_balance = loan_status_summary["REM"]["balance"] new_portfolio.rem_count = loan_status_summary["REM"]["count"] new_portfolio.claim_balance = loan_status_summary["CLAIM"]["balance"] new_portfolio.claim_count = loan_status_summary["CLAIM"]["count"] # FICO summary data fico_results = fico_summary(saved_loans) new_portfolio.max_fico = fico_results["max_fico"] new_portfolio.min_fico = fico_results["min_fico"] new_portfolio.weighted_average_fico = fico_results["wa_fico"] print('Portfolio created...') new_portfolio.save()
def create_portfolios(loan_number_list): print('Portfolio started....') for loan_number in loan_number_list: loan_number_str = str(loan_number) portfolio_name = loan_number_str + ' Sample Loans' new_portfolio = Portfolio( name=portfolio_name ) new_portfolio.save() bank_loan_id = random.randint(500000, 600000) loans = [] # file_name = loan_number_str + '_sample_loans.csv' while len(loans) < loan_number: start_row = random.randint(0, 3000) real_world_file_number_str = str(random.randint(1, 7)) real_world_file_name = 'real_world_data/5000_real_world_loans_' + real_world_file_number_str + '.csv' with open(real_world_file_name) as real_world_csv_file: reader = csv.DictReader(real_world_csv_file) for row in reader: if start_row == 0 and len(loans) < loan_number: bank_loan_id = next_bank_loan_id(bank_loan_id) loans.append(Loan( portfolio=new_portfolio, bank_loan_id=bank_loan_id, deferred_balance=is_set(row['DEFERRED_BAL']), pmi_insurance=is_set(row['PMI']), first_payment_date=convert_date_string(row['First_Payment_Date']), junior_lien_balance=is_set(row['Junior Lien Bal']), senior_lien_balance=is_set(row['Senior Lien Bal']), mortgage_type=is_set(row['Mortgagetype']), gross_margin=is_set(row['Gross_Margin']), original_amount=is_set(row['Original_Amount']), current_value_date=convert_date_string(row['Current_Value_Date']), us_state=is_set(row['STATE']), BK_flag=is_set(row['BK_FLAG']), negam_initial_minimum_payment_period=is_set(row['Negam_Initial_Minimum_Payment_Period']), product_type=is_set(row['Product_Type']), remaining_term=is_set(row['Remaining_Term']), first_recast_or_next_recast=is_set(row['First_Recast/Next_Recast']), amortized_term=is_set(row['Amor_Term']), recast_cap=is_set(row['Recast_Cap']), occupancy_code=is_set(row['Occupancy']), modification_date=convert_date_string(row['Modification_Date']), negam_payment_reset_frequency=is_set(row['Negam_Payment_Reset_Frequency']), IO_term=is_set(row['IO_Term']), senior_lien_balance_date=convert_date_string(row['Senior Lien Bal Date']), icap=is_set(row['ICAP']), current_interest_rate=is_set(row['Current_Interest_Rate']), SF=is_set(row['SF']), fico=is_set(row['FICO']), pcap=is_set(row['PCAP']), interest_reset_interval=is_set(row['Interest_Reset_Interval']), recast_frequency=is_set(row['Recast_Frequency']), original_term=is_set(row['Original_Term']), as_of_date=convert_date_string(row['AS_OF_DATE']), lcap=is_set(row['LCAP']), status=is_set(row['STATUS']), MSR=is_set(row['MSR']), original_appraisal_amount=is_set(row['Original_Appraisal_Amount']), lfloor=is_set(row['LFLOOR']), purpose=is_set(row['Purpose']), reset_index=is_set(row['Reset_Index']), zipcode=is_set(row['ZIP']), property_type_code=is_set(row['Property']), lien_position=is_set(row['Lien_Position']), current_FICO_score=is_set(row['Current_FICO_Score']), current_property_value=is_set(row['Current_Property_Value']), foreclosure_referral_date=convert_date_string(row['Foreclosure_Referral_Date']), current_principal_balance=is_set(row['Current_Principal_Balance']), last_payment_received=convert_date_string(row['LAST_PMT_RECD']), original_rate=is_set(row['ORATE']), original_date=convert_date_string(row['Origination_Date']), city=is_set(row['CITY']), second_lien_piggyback_flag=is_set(row['2nd Lien Piggyback Flag']), junior_lien_balance_date=convert_date_string(row['Junior Lien Bal Date']), first_index_rate_adjustment_date=convert_date_string( row['First_Interest_Rate_Adjustment_Date'] ) )) else: start_row -= 1 Loan.objects.bulk_create(loans) saved_loans = Loan.objects.filter(portfolio=new_portfolio).values() portfolio_loans_calculations = calculate_aggregate_portfolio_data(saved_loans) new_portfolio.total_loan_balance = portfolio_loans_calculations['total_loan_balance'] new_portfolio.total_loan_count = portfolio_loans_calculations['total_loan_count'] new_portfolio.average_loan_balance = portfolio_loans_calculations['avg_loan_balance'] new_portfolio.weighted_average_coupon = portfolio_loans_calculations['weighted_avg_coupon'] new_portfolio.weighted_average_life_to_maturity = portfolio_loans_calculations[ 'weighted_avg_life_to_maturity'] # Loan status summary data loan_status_summary = loans_status_summary(saved_loans) new_portfolio.current_balance = loan_status_summary["CURRENT"]["balance"] new_portfolio.current_count = loan_status_summary["CURRENT"]["count"] new_portfolio.dpd90_balance = loan_status_summary["90 DPD"]["balance"] new_portfolio.dpd90_count = loan_status_summary["90 DPD"]["count"] new_portfolio.fc_balance = loan_status_summary["FC"]["balance"] new_portfolio.fc_count = loan_status_summary["FC"]["count"] new_portfolio.dpd60_balance = loan_status_summary["60 DPD"]["balance"] new_portfolio.dpd60_count = loan_status_summary["60 DPD"]["count"] new_portfolio.reo_balance = loan_status_summary["REO"]["balance"] new_portfolio.reo_count = loan_status_summary["REO"]["count"] new_portfolio.reperf_balance = loan_status_summary["REPERF"]["balance"] new_portfolio.reperf_count = loan_status_summary["REPERF"]["count"] new_portfolio.dpd30_balance = loan_status_summary["30 DPD"]["balance"] new_portfolio.dpd30_count = loan_status_summary["30 DPD"]["count"] new_portfolio.rem_balance = loan_status_summary["REM"]["balance"] new_portfolio.rem_count = loan_status_summary["REM"]["count"] new_portfolio.claim_balance = loan_status_summary["CLAIM"]["balance"] new_portfolio.claim_count = loan_status_summary["CLAIM"]["count"] # FICO summary data fico_results = fico_summary(saved_loans) new_portfolio.max_fico = fico_results["max_fico"] new_portfolio.min_fico = fico_results["min_fico"] new_portfolio.weighted_average_fico = fico_results["wa_fico"] print('Portfolio created...') new_portfolio.save()