目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于 BP 神经网络企业财务模型优化分析 -MATLAB
课题背景和意义
实现技术思路
一、模型构建理论


当其为中间节点时,可将其表示为:

二、基于 MATLAB 的 BP 神经网络模型构建

本系统在构建过程中主要设定以下参数:
企业财务网络功能层次模型如图所示,该模型主要由3 个层次构成,该结构在处理企业财务数据过程中具有较高效率,并且可实现对众多数据的有效分析,以上网络层次可有效提升整个系统运行效率,尤其是在数据训练过程中可有效减少单个周期的循环时间,在指定时间内完成相应训练。

数据库结构
步骤四: 完成以上步骤后再返回步骤二,直至完成所有数据的训练。
Net = newff( minmax( p) ,{ } ,{ ’myfunc’,’purelin’} ,’mytrainfunc’)
Net. trainparam. epochs = 20000;
Ner,trainparam. goal = 0. 0002;
Ner = train( net,p. t) ;
三、模型运行实证研究分析
模型测试

部分源代码
# -*- coding:utf-8 -*-
from CloudQuant import SDKCoreEngine # 导入量子金服SDK
from CloudQuant import AssetType
from CloudQuant import QuoteCycle
import numpy as np
import pandas as pd
np.seterr(invalid='ignore')
config = {
'username': 'pengkun',
'password': '111111',
'rootpath': 'c:/cStrategy', # 客户端所在路径
'assetType': AssetType.Stock,
'initCapitalStock': 100000000,
'startDate': 20070101,
'endDate': 20170101,
'cycle': QuoteCycle.D,
'strategyName': 'Beneish',
'feeRate': 0.001,
'feeLimit': 5,
'stampTaxRate': 0.001,
'dealByVolume': True
}
HOLDING_PERIOD=60
HOLDING_NUMBER=100
def initial(sdk):
sdk.setGlobal('c',0)
def initPerDay(sdk):
pass
#M Score*=91.07-22.9×GMI-49.91×AQI+35.21×SGI-18.17×LVGI
def strategy(sdk):
count=sdk.getGlobal('c')
if count==0:
GM=sdk.getFactorData('LZ_CN_STKA_FIN_IND_GROSSPRFTMARGIN')
GMI=GM[-1]/GM[-1-HOLDING_PERIOD]
SG=sdk.getFactorData('LZ_CN_STKA_PRF_COMBO_Q_OPR_REV')
SGI=SG[-1]/SG[-1-HOLDING_PERIOD]
AQ=sdk.getFactorData('LZ_CN_STKA_BAL_COMBO_INTANG_ASTS')
AQI=AQ[-1]/AQ[-1-HOLDING_PERIOD]
LVG=sdk.getFactorData('LZ_CN_STKA_FIN_IND_DEBTTOASTS')
LVGI=LVG[-1]/LVG[-1-HOLDING_PERIOD]
M_SCORE=91.07-22.9*GMI-49.91*AQI+35.21*SGI-18.17*LVGI
ST = sdk.getFactorData('LZ_CN_STKA_SLCIND_ST_FLAG')[-1] # ST
STOP = sdk.getFactorData('LZ_CN_STKA_SLCIND_STOP_FLAG')[-1] # 停牌
stock_list = sdk.getStockList()
stock_list = np.array(stock_list)
condition_ST = ST == 0
condition_STOP = STOP == 0
condition = condition_ST * condition_STOP
stock_list=stock_list[condition]
M_SCORE=M_SCORE[condition]
M_SCORE=pd.Series(M_SCORE,index=stock_list)
M_SCORE=M_SCORE.sort_values()
# n=int(len(stock_list)/5)
stock_pool=M_SCORE.index[:HOLDING_NUMBER]
transferPosition(sdk, stock_pool)
count+=1
if count==HOLDING_PERIOD:
count=0
sdk.setGlobal('c',count)
def transferPosition(sdk,stock_pool):
position = sdk.getPositions()
position_dict = dict([i.code, i.optPosition] for i in position)
stock_to_buy = set(stock_pool) - set(position_dict.keys())
stock_to_sell = set(position_dict.keys()) - set(stock_pool)
quotes = sdk.getQuotes(list(stock_to_buy | stock_to_sell))
if stock_to_sell:
sell_orders = []
for stock in stock_to_sell:
if stock in quotes.keys():
price = quotes[stock].current
volume = position_dict[stock]
order = [stock, price, volume, -1]
sell_orders.append(order)
if sell_orders:
sdk.makeOrders(sell_orders)
sdk.sdklog("------------------------------------------")
sdk.sdklog(sdk.getNowDate(),"DATE")
sdk.sdklog(sell_orders,"SELL")
if stock_to_buy:
available_cash = sdk.getAccountInfo().availableCash
available_cash_one_stock = available_cash / len(stock_to_buy)
buy_orders = []
for stock in stock_to_buy:
if stock in quotes.keys():
price = quotes[stock].open
volume = int(available_cash_one_stock / (price * 100)) * 100
if volume > 0:
order = [stock, price, volume, 1]
buy_orders.append(order)
if buy_orders:
sdk.makeOrders(buy_orders)
sdk.sdklog("------------------------------------------")
sdk.sdklog(sdk.getNowDate(),"DATE")
sdk.sdklog(buy_orders,'BUY')
def run_all():
config['initial'] = initial
config['strategy'] = strategy
config['preparePerDay'] = initPerDay
# 启动SDK
SDKCoreEngine(**config).run()
if __name__ == '__main__':
run_all()
实现效果图样例
财务模型图:

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。
毕设帮助,疑难解答,欢迎打扰!

820

被折叠的 条评论
为什么被折叠?



