跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

使用Django搭建一个基金模拟交易系统教程

亲手教你如何搭建一个基金模拟系统(基于Django框架) 第一步: 创建项目、APP以及静态文件存储文件夹 django-admin startproject Chongyang django-admin startapp Stock # Chongyang文件夹里面操作 在chongyang项目创建statics和templates两个文件夹 第二步: 配置Setting.py文件 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'Stock' # 添加自己的APP名 ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 静态文件夹地址(必须配置) 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] # 数据库配置(使用默认sqlite) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'NAME': os.path.join(BASE_DIR, 'StockDB.db'), } } LANGUAGE_CODE = 'zh-hans' # 汉语 TIME_ZONE = 'Asia/Shanghai' # 时区 STATIC_URL = '/static/' # 静态文件配置 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'statics'), # 具体的路径 os.path.join(BASE_DIR, 'templates'), ] 第三步: 运行项目 python manage.py runserver 0.0.0.0:8000 到目前为止,你已经创建了一个拥有极其庞大功能的web网站,后续只需激活相应的服务即可 url.py # 路由配置文件 views.py # 功能实现文件 admin.py # 后台管理文件 model.py # 数据库创建文件 第四步: 具体项目配置 在配置好前面设置后直接在相应的文件里复制如下代码运行项目即可 1、models.py from django.db import models import uuid # 基金经理数据表 class Fund_Manger(models.Model): name = models.CharField(max_length=20) age = models.IntegerField() entry_time = models.CharField(max_length=20) def __str__(self): return self.name # 股票信息数据表 class Stock(models.Model): stock_name = models.CharField(max_length=20) code = models.CharField(max_length=10) def __str__(self): return self.code # 交易系统表 class Trading(models.Model): name = models.CharField(max_length=20) time = models.DateTimeField() code = models.CharField(max_length=10) number = models.IntegerField() price = models.CharField(max_length=10) operate = models.CharField(max_length=10) total_price = models.CharField(max_length=20) # 清算数据表 class Fund_pool(models.Model): time = models.DateTimeField() total_pool = models.CharField(max_length=30) oprate_people = models.CharField(max_length=10) people_num = models.IntegerField() def __str__(self): return self.total_pool 2、url.py from django.contrib import admin from django.urls import path from django.conf.urls import url from Stock import views urlpatterns = [ path('admin/', admin.site.urls), url(r'^$', views.index), url(r'^data_entry/$', views.data_entry, name='data_entry'), url(r'^add_fund_manger/$', views.add_fund_manger), url(r'^add_stock/$', views.add_stock), url(r'^check$', views.check_index, name='check'), url(r'^trading/$', views.check), url(r'^trading_success/$', views.trading), url(r'^fund_pool/$', views.Fund_pool_, name='fund_pool'), url(r'^account/$', views.Account) ] 3、views.py from django.shortcuts import render from django.http import HttpResponse from django.utils import timezone from Stock.models import Fund_Manger, Stock, Trading, Fund_pool import re def index(request): return render(request, 'index.html') def data_entry(request): return render(request, 'data_entry.html') def check_index(request): return render(request, 'check.html') def add_fund_manger(request): ''' 添加时需判断原始表是否已经存在此用户信息 同时添加年龄限制(20~40) ''' if request.method == "POST": name = request.POST['name'] age = request.POST['age'] entry_time = request.POST['Time'] check_name = Fund_Manger.objects.filter(name=name) if check_name: return HttpResponse("

该用户已处在!

") else: if int(age) < 20 or int(age) >= 40: return HttpResponse("

该用户年龄不符合要求!

") else: Mas = Fund_Manger(name=name, age=age, entry_time=entry_time) Mas.save() return HttpResponse("

用户注册成功!

") def add_stock(request): ''' 添加基金池数据时需对股票代码做限定 仅限A股市场,同时做异常捕获处理 ''' if request.method == "POST": stock_name = request.POST['stock_name'] post_code = request.POST['code'] # 过滤交易代码(以0、3、6开头长度为6的数字) pattern = re.compile(r'000[\d+]{3}$|^002[\d+]{3}$|^300[\d+]{3}$|^600[\d+]{3}$|^601[\d+]{3}$|^603[\d+]{3}$') code = pattern.findall(post_code) # 异常处理 try: num = code[0].__len__() if num == 6: Mas = Stock(stock_name=stock_name, code=code[0]) Mas.save() return HttpResponse("

基金池数据添加成功!

") else: return HttpResponse("

错误代码!

") except Exception as e: return HttpResponse("

错误代码!

") def check(request): ''' 信息合规查询(仅限A股数据) 需对基金经理、股票代码、交易数量同时做判断 ''' if request.method == "POST": name = request.POST['name'] code = request.POST['code'] number = request.POST['number'] # 基金经理信息过滤 try: check_name = Fund_Manger.objects.filter(name=name) if check_name: # 基金池数据过滤 try: check_code = Stock.objects.filter(code=code) # 交易数量过滤 if check_code: if int(number) % 100 == 0: return render(request, 'trade_index.html', {"name": name, "code": code, "number": number}) else: return HttpResponse('

交易数量填写错误!

') else: return HttpResponse('

基金池无该股票信息!

') except Exception as e: print('异常信息为:%s' % str(e)) pass else: return HttpResponse('

没有该基金经理!

') except Exception as e: print('异常信息为:%s' % str(e)) pass def trading(request): ''' 按照操作进行划分(买入卖出) 若买入只需判断交易金额与剩余现金资产对比即可 若卖出还需对其持股数量加以判断 ''' if request.method == "POST": name = request.POST['name'] code = request.POST['code'] number = request.POST['number'] price = request.POST['price'] operate = request.POST['operate'] # 获取剩余可用资金 try: total_price = float(Trading.objects.all().order_by('-time')[0].total_price) except Exception as e: total_price = 1000000 if operate == '卖出': # 获取此股票持仓数量 stock_nums = Trading.objects.filter(code=code) stock_num = sum([i.number for i in stock_nums]) number = -int(number) if abs(number) <= stock_num: # 计算交易所需金额 trade_price = float(price) * int(number) balance = total_price - trade_price Time_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S") Mas = Trading(name=name, time=Time_, code=code, number=number, price=price, operate=operate, total_price=balance) Mas.save() return HttpResponse("

交易完成!

") else: return HttpResponse("

持仓数小于卖出数,无法交易!

") elif operate == '买入': trade_price = float(price) * int(number) balance = total_price - trade_price Time_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S") if trade_price <= total_price: Mas = Trading(name=name, time=Time_, code=code, number=number, price=price, operate=operate, total_price=balance) Mas.save() print(total_price) return HttpResponse("

交易完成!

") else: print(total_price) return HttpResponse("

资金总额不足!

") else: return HttpResponse("

无效指令!

") def Fund_pool_(request): return render(request, 'fund_pool.html') def Account(request): ''' 清算只需查询操作人是否为基金经理即可 ''' if request.method == "POST": name = request.POST['name'] # 基金经理信息 check_name = Fund_Manger.objects.filter(name=name) # 基金操作人数统计 oprate_people = Trading.objects.all() if check_name: total_price = float(Trading.objects.all().order_by('-time')[0].total_price) total_pool = '¥ ' + str(total_price) oprate_people_num = set([stock_name.name for stock_name in oprate_people]).__len__() Time_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S") Mas = Fund_pool(time=Time_, total_pool=total_pool, oprate_people=name, people_num=oprate_people_num) Mas.save() return HttpResponse("

数据清算成功!

") else: return HttpResponse('

非法操作!

')
4、admin.py from django.contrib import admin from Stock.models import Fund_Manger, Stock, Trading, Fund_pool # Register your models here. class Fund_MangerAdmin(admin.ModelAdmin): list_display = ('name', 'age', 'entry_time') class StockAdmin(admin.ModelAdmin): list_display = ('stock_name', 'code') class TradingAdmin(admin.ModelAdmin): list_display = ('name', 'time', 'code', 'number', 'price', 'operate', 'total_price') class Fund_PoolAdmin(admin.ModelAdmin): list_display = ('time', 'total_pool', 'oprate_people', 'people_num') admin.site.register(Fund_Manger, Fund_MangerAdmin) admin.site.register(Stock, StockAdmin) admin.site.register(Trading, TradingAdmin) admin.site.register(Fund_pool, Fund_PoolAdmin) 第五步: 在templates文件夹下面创建业务页面 1、index.html {# #} 首页

基金模拟系统:

  • 数据录入系统
  • 合规管理系统
  • 尾盘清算系统
  • 2、check.html 合规查询系统

    合规查询系统:

    {% csrf_token %}



    3、data_entry.html 数据录入系统

    重阳投资

    基金交易职员信息录入系统:

    {% csrf_token %}



    基金池信息录入系统:

    {% csrf_token %}


    4、trade_index.html 交易系统

    重阳投资

    交易系统:

    {% csrf_token %}





    5、fund_pool.html 基金清算系统

    重阳投资

    基金清算系统:

    {% csrf_token %}

    第六步: 创建表结构,创建超级管理员,运行项目即可 python manage.py makemigrations python manage.py migrate python manage.py createsuperuser python manage.py runserver 0.0.0.0:8000 以下内容只是自己学习Django的一点总结分享,有不足的地方欢迎大家指导学习,一起进步。 这篇使用Django搭建一个基金模拟交易系统教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。 您可能感兴趣的文章: 基于django micro搭建网站实现加水印功能 python框架Django实战商城项目之工程搭建过程图文详解 python+Django+pycharm+mysql 搭建首个web项目详解 nginx+uwsgi+django环境搭建的方法步骤 Python django搭建layui提交表单,表格,图标的实例 详解使用django-mama-cas快速搭建CAS服务的实现 python3.6+django2.0+mysql搭建网站过程详解 使用Django搭建网站实现商品分页功能

    相关文章