侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

框架(架构)  /  管理员 发布于 7年前   407

亲手教你如何搭建一个基金模拟系统(基于Django框架)

第一步:创建项目、APP以及静态文件存储文件夹

django-admin startproject Chongyangdjango-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 modelsimport 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 adminfrom django.urls import pathfrom django.conf.urls import urlfrom Stock import viewsurlpatterns = [ 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 renderfrom django.http import HttpResponsefrom django.utils import timezonefrom Stock.models import Fund_Manger, Stock, Trading, Fund_poolimport redef 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("<center><h1>该用户已处在!</h1></center>") else:  if int(age) < 20 or int(age) >= 40:  return HttpResponse("<center><h1>该用户年龄不符合要求!</h1></center>")  else:  Mas = Fund_Manger(name=name, age=age, entry_time=entry_time)  Mas.save()  return HttpResponse("<center><h1>用户注册成功!</h1></center>")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("<center><h1>基金池数据添加成功!</h1></center>")  else:  return HttpResponse("<center><h1>错误代码!</h1></center>") except Exception as e:  return HttpResponse("<center><h1>错误代码!</h1></center>")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('<center><h1>交易数量填写错误!</h1></center>')   else:   return HttpResponse('<center><h1>基金池无该股票信息!</h1></center>')  except Exception as e:   print('异常信息为:%s' % str(e))   pass  else:  return HttpResponse('<center><h1>没有该基金经理!</h1></center>') except Exception as e:  print('异常信息为:%s' % str(e))  passdef 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("<center><h1>交易完成!</h1></center>")  else:  return HttpResponse("<center><h1>持仓数小于卖出数,无法交易!</h1></center>") 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("<center><h1>交易完成!</h1></center>")  else:  print(total_price)  return HttpResponse("<center><h1>资金总额不足!</h1></center>") else:  return HttpResponse("<center><h1>无效指令!</h1></center>")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("<center><h1>数据清算成功!</h1></center>") else:  return HttpResponse('<center><h1>非法操作!</h1></center>')

4、admin.py

from django.contrib import adminfrom 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

<!DOCTYPE html><html lang="en"><head>{# <meta http-equiv="refresh" content="3;URL=data_entry/">#} <meta charset="UTF-8"> <title>首页</title><style> a{ font-size:25px; color: white} li{ color: white; font-size: 30px}</style></head><body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center> <br/> <div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"> <img src="https:/article/../static/images/logo.jpg" width="245" height="100"> <h2 style="color: white; size: 10px">基金模拟系统:</h2> <li><a href="https:/article/{% url 'data_entry' %}" rel="external nofollow" >数据录入系统</a></li> <li><a href="https:/article/{% url 'check' %}" rel="external nofollow" aria-setsize="10px">合规管理系统</a></li> <li><a href="https:/article/{% url 'fund_pool' %}" rel="external nofollow" >尾盘清算系统</a></li> </div></center></body></html>

2、check.html

<!DOCTYPE html><html><head><title>合规查询系统</title></head><body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center> <br/> <div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"> <img src="https:/article/../static/images/logo.jpg" width="245" height="100"> <h2 style="color: white; size: 10px">合规查询系统:</h2>  <form action="/trading/" method="POST">  {% csrf_token %}  <label style="color: white; size: 10px">姓   名: </label>  <input type="text" name="name"> <br>  <label style="color: white; size: 10px">代   码: </label>  <input type="text" name="code"> <br>  <label style="color: white; size: 10px">数   量: </label>  <input type="text" name="number"> <br><br>  <input type="submit" type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提 交">  </form> </div></center></body></html>

3、data_entry.html

<!DOCTYPE html><html><head><title>数据录入系统</title></head><body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center> <div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 700px; height: 400px; margin:auto;"> <h1 style="color: white; size: 10px">重阳投资</h1> <h4 style="color: white; size: 10px">基金交易职员信息录入系统:</h4>  <form action="/add_fund_manger/" method="post">  {% csrf_token %}  <label style="color: white; size: 10px">姓      名: </label>  <input type="text" name="name"> <br>  <label style="color: white; size: 10px">年      龄: </label>  <input type="text" name="age"> <br>  <label style="color: white; size: 10px">入职时间: </label>  <input type="text" name="Time"> <br><br>  <input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提 交">  </form>  <h4 style="color: white; size: 10px">基金池信息录入系统:</h4>  <form action="/add_stock/" method="post">  {% csrf_token %}  <label style="color: white; size: 10px">股票简称: </label>  <input type="text" name="stock_name"> <br>  <label style="color: white; size: 10px">代      码: </label>  <input type="text" name="code"> <br><br>  <input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提 交">  </form> </div></center></body></html>

4、trade_index.html

<!DOCTYPE html><html><head><title>交易系统</title></head><body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 250%;overflow: hidden;"><center> <div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"> <h1 style="color: white; size: 10px">重阳投资</h1> <h2 style="color: white; size: 10px">交易系统:</h2>  <form action="/trading_success/" method="POST">  {% csrf_token %}  <label style="color: white; size: 10px">姓   名: </label>  <input type="text" name="name" value={{ name }} readonly="readonly" /> <br>  <label style="color: white; size: 10px">代   码: </label>  <input type="text" name="code" value={{ code }} readonly="readonly" /> <br>  <label style="color: white; size: 10px">数   量: </label>  <input type="text" name="number" value={{ number }} readonly="readonly" /> <br>  <label style="color: white; size: 10px">价   格: </label>  <input type="text" name="price"> <br>  <label style="color: white; size: 10px">操   作: </label>  <input type="text" name="operate"> <br><br>  <input type="submit" type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提 交">  </form> </div></center></body></html>

5、fund_pool.html

<!DOCTYPE html><html><head><title>基金清算系统</title></head><body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center> <br> <div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"> <h1 style="color: white; size: 10px">重阳投资</h1> <h4 style="color: white; size: 10px">基金清算系统:</h4>  <form action="/account/" method="post">  {% csrf_token %}  <label style="color: white; size: 10px">姓  名: </label>  <input type="text" name="name"> <br><br>  <input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="清 算">  </form> </div></center></body></html>

第六步:创建表结构,创建超级管理员,运行项目即可

python manage.py makemigrationspython manage.py migratepython manage.py createsuperuserpython manage.py runserver 0.0.0.0:8000

以下内容只是自己学习Django的一点总结分享,有不足的地方欢迎大家指导学习,一起进步。

这篇使用Django搭建一个基金模拟交易系统教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Django使用消息提示简单的弹出个对话框实例
    下一条:
    解决django model修改添加字段报错的问题
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客