数据库期末设计 代码 sql serverWord下载.docx

上传人:b****5 文档编号:16322973 上传时间:2022-11-22 格式:DOCX 页数:26 大小:25.10KB
下载 相关 举报
数据库期末设计 代码 sql serverWord下载.docx_第1页
第1页 / 共26页
数据库期末设计 代码 sql serverWord下载.docx_第2页
第2页 / 共26页
数据库期末设计 代码 sql serverWord下载.docx_第3页
第3页 / 共26页
数据库期末设计 代码 sql serverWord下载.docx_第4页
第4页 / 共26页
数据库期末设计 代码 sql serverWord下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数据库期末设计 代码 sql serverWord下载.docx

《数据库期末设计 代码 sql serverWord下载.docx》由会员分享,可在线阅读,更多相关《数据库期末设计 代码 sql serverWord下载.docx(26页珍藏版)》请在冰豆网上搜索。

数据库期末设计 代码 sql serverWord下载.docx

EXEC('

DROPTABLE'

+@tb)

set@a=@a+1

end

ifexists(select*fromINFORMATION_SCHEMA.TABLESwhereTABLE_NAME='

不同n日均线时的盈利情况比较表'

DROPTABLE不同n日均线时的盈利情况比较表

 

/*创建结果总表“不同n日均线时的盈利情况比较表”*/

createtable不同n日均线时的盈利情况比较表

n日均线intnull,

胜次数intnull,

总次数intnull,

胜概率decimal(10,3)null,

总收益decimal(10,3)null--数据格式为精度为10,小数位数为3的小数

/*定义相关变量*/

declare@iint--定义变量i用于循环,指定第几天的数据

declare@jint--定义变量j用于循环,指定第几天的数据

declare@nexint--定义变量@nex,用于指向第i天的下一天

declare@sumdint--定义变量sumd存储book表中数据的总量,即总天数

declare@nint--定义变量n表示求解的是n日均线的情况

declare@follow_nfloat--定义变量follow_n表示某天前第n日当天的收盘

declare@sumfloat--定义变量sum表示某天前n日收盘的总和

declare@oneddecimal(10,3)--定义变量oned表示某天的n日均线值

declare@时间nvarchar(255)--定义变量@时间,用于暂存游标在数据库中获得的当天的时间

declare@收盘decimal(10,3)--定义变量@收盘,用于暂存游标在数据库中获得的当天的收盘值

declare@开盘decimal(10,3)--定义变量@开盘,用于暂存游标在数据库中获得的当天的开盘值

declare@次日开盘decimal(10,3)--定义变量@次日开盘,用于暂存游标在数据库中获得的次日开盘值

declare@statusnvarchar(20)--定义变量@status,用于循环求解过程中保存当前的股票状态

declare@买入数据decimal(10,3)--定义变量@买入数据,用于循环求解过程中保存最新一次买入时的买入数据

declare@卖出数据decimal(10,3)--定义变量@卖出数据,用于循环求解过程中保存最新一次卖出时的卖出数据

declare@本次收益decimal(10,3)--定义变量@本次收益,用于循环求解过程中保存本次卖出时的收益情况

declare@总收益decimal(10,3)--定义变量@总收益,用于循环求解过程累加求解出n日均线时的总收益值

declare@胜次数int--定义变量@胜次数,用于循环求解过程累加求解出n日均线时的胜次数

declare@总次数int--定义变量@总收益,用于循环求解过程累加求解出n日均线时的总收益值

declare@胜概率decimal(10,3)--定义变量@总收益,用于循环求解过程累加求解出n日均线时的总交易次数

/*定义游标*/

declareyoubiao1cursorSCROLLFOR

select时间,开盘,收盘fromStock

declareyoubiao2cursorSCROLLFOR--定义游标youbiao12指向Stock表开盘列,用于求解时获取次日开盘值

select开盘fromStock

/*打开游标*/

openyoubiao1

openyoubiao2

/*开始循环求解步骤*/

set@n=2

while@n<

=365--从2日均线开始求解到365日均线

begin--开始第一层循环求解n日均线时的情况,共循环364次

/*创建表:

“使用n日均值时的交易情况”*/

DECLARE@tablenameVARCHAR(60)

SET@tablename='

+CONVERT(VARCHAR(60),@n)+'

print@tablename

DECLARE@TableSqlVARCHAR(512)

SET@TableSql='

CREATETABLE'

+@tableName+'

时间nvarchar(20)NULL,

开盘decimal(10,3)NULL,

收盘decimal(10,3)NULL,

日均线decimal(10,3)NULL,

操作nvarchar(20)NULL,

买入卖出数据decimal(10,3)NULL,

收益decimal(10,3)NULL

)'

EXEC(@TableSql)

/*每一次统计前重置各变量的初始值*/

set@i=1

set@j=1

set@胜次数=0

set@总次数=0

set@总收益=0

set@status='

SELL'

--策略1,先默认股票为卖出状态

select@sumd=count(*)fromStock--保存数据源数据总量,即总天数

set@follow_n=0

set@sum=0

/*开始遍历数据表,前n-1个数据无n日均线,直接求和*/

while@i<

@n

begin

fetchABSOLUTE@ifromyoubiao1into@时间,@开盘,@收盘

set@sum=@sum+@收盘

/*保存数据到“使用n日均值时的交易情况"

表中*/

DECLARE@SqlNVARCHAR(max)--定义sql字符串,用于拼接要执行的命令

SET@Sql='

insertinto'

+@tableName+'

(时间,开盘,收盘)values('

+'

'

+@时间+'

'

+CAST(@开盘ASNVARCHAR(10))+'

+CAST(@收盘AS

NVARCHAR(10))+'

)'

print@Sql--输出sql字符串以跟踪操作情况

EXEC(@Sql)--执行sql字符串

set@i=@i+1

end

/*第n天的数据开始到结束,开始边求解日均线边统计买入卖出*/

=@sumd

fetchABSOLUTE@ifromyoubiao1into@时间,@开盘,@收盘--获取相应天的值

set@sum=@sum-@follow_n+@收盘--求今日前n日收盘和,所以要在上一次总和基础上先减去前第i天当天的收盘@follow_n,在加上今天的收盘值*/

set@oned=CONVERT(decimal(10,3),@sum/@n)--求解出今日均线值,保留相应格式

/*情况1买入*/

if(@收盘>

@onedAND@status='

)--当收盘大于日均线且股票为卖出状态时,买入操作

BUY'

--置股票状态为买入

set@nex=@i+1--next指向下一日,便于获得下一天开盘值

fetchABSOLUTE@nexfromyoubiao2into@次日开盘

set@买入数据=@次日开盘--买入数据位次日收盘值

(时间,开盘,收盘,日均线,操作,买入卖出数据)values('

'

+CAST(@收盘ASNVARCHAR(10))+'

+CAST(@onedASNVARCHAR(10))+'

+CAST(@买入数据ASNVARCHAR(10))+'

print@Sql

EXEC(@Sql)

/*情况2卖出*/

elseif(@收盘<

)--当收盘小于日均线且股票为买入状态时,卖出操作

--置股票状态为卖出

set@nex=@i+1

set@卖出数据=@次日开盘--卖出数据位次日收盘值

set@本次收益=@卖出数据-@买入数据--计算本次收益

/*当股票卖出操作时,保存本次操作收益情况到变量*/

if(@本次收益>

0)

set@胜次数=@胜次数+1--如果本次收益>

0,则胜次数+1

set@总次数=@总次数+1--无论输胜总次数都要加1

set@总收益=@总收益+@本次收益--累加总收益

values('

+CAST(@开盘ASnvarchar(10))+'

+CAST(@收盘ASnvarchar(10))+'

+CAST(@onedASnvarchar(10))+'

+CAST(@卖出数据ASNVARCHAR(10))+'

+CAST(@本次收益ASNVARCHAR(10))+'

/*情况3无交易*/

else

--无交易发生,直接保存数据到“使用n日均值时的交易情况"

表中

(时间,开盘,收盘,日均线)values('

fetchABSOLUTE@jfromyoubiao1into@时间,@开盘,@收盘

set@follow_n=@收盘--保存前第n天收盘,便于下次循环时减去,便于统计收盘和

set@i=@i+1--第i天变量递增,统计下一天

set@j=@j+1--变量j指向的是前第n天,便于统计收盘和

--结束第i天的统计交易情况,进入第i+1天的循环

end

/*保存n日均线时的统计情况到总表中*/

set@胜概率=@胜次数*1.0/@总次数

insertinto不同n日均线时的盈利情况比较表values(@n,@胜次数,@总次数,@胜概率,@总收益)

set@n=@n+1--n递增,进入求解n+1日均线的情况

end

--结束外循环2日到365日

/*关闭和释放游标资源*/

CLOSEyoubiao1

DEALLOCATEyoubiao1

CLOSEyoubiao2

DEALLOCATEyoubiao2

/*查询结果:

*/

--查询最大胜率的n日均线

selectn日均线AS最大胜率日均线,胜概率from不同n日均线时的盈利情况比较表

where胜概率=(selectmax(胜概率)from不同n日均线时的盈利情况比较表)

--查询最大盈利总点(总收益)的n日均线

selectn日均线AS最大盈利总点日均线,总收益from不同n日均线时的盈利情况比较表

where总收益=(selectmax(总收益)from不同n日均线时的盈利情况比较表)

--按胜率从大到小排列

select*from不同n日均线时的盈利情况比较表

orderby胜概率deSc

--按盈利总点(总收益)从大到小排列

orderby总收益deSc

题目二:

假设每次买入卖出的操作,都需要万分之三的费用,求最大胜率及最大盈利点数的均值数据

declare@买入手续费decimal(10,3)--定义变量@买入手续费,用于循环求解过程中保存最新一次买入时的买入手续费

declare@卖出手续费decimal(10,3)--定义变量@卖出手续费,用于循环求解过程中保存最新一次卖出时的卖出手续费

[手续费5%]decimal(10,3)NULL,

set@买入手续费=@买入数据*0.00003--万分之五手续费

(时间,开盘,收盘,日均线,操作,买入卖出数据,[手续费5%%])values('

+CAST(@onedASNVARCH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1