1、 EXEC(DROP TABLE +tb)set a=a+1endif exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 不同n日均线时的盈利情况比较表) DROP TABLE 不同n日均线时的盈利情况比较表/*创建结果总表“不同n日均线时的盈利情况比较表”*/create table 不同n日均线时的盈利情况比较表( n日均线 int null, 胜次数 int null, 总次数 int null, 胜概率 decimal(10,3) null, 总收益 decimal(10,3) null -数据格式为精
2、度为10,小数位数为3的小数/*定义相关变量*/declare i int -定义变量i用于循环,指定第几天的数据 declare j int -定义变量j用于循环,指定第几天的数据declare nex int -定义变量nex,用于指向第i天的下一天 declare sumd int -定义变量sumd存储book表中数据的总量,即总天数 declare n int -定义变量n表示求解的是n日均线的情况 declare follow_n float -定义变量follow_n表示某天前第n日当天的收盘 declare sum float -定义变量sum表示某天前n日收盘的总和 decl
3、are oned decimal(10, 3) -定义变量oned表示某天的n日均线值declare 时间 nvarchar(255) -定义变量时间,用于暂存游标在数据库中获得的当天的时间declare 收盘 decimal(10, 3) -定义变量收盘,用于暂存游标在数据库中获得的当天的收盘值declare 开盘 decimal(10, 3) -定义变量开盘,用于暂存游标在数据库中获得的当天的开盘值declare 次日开盘 decimal(10, 3) -定义变量次日开盘 ,用于暂存游标在数据库中获得的次日开盘值 declare status nvarchar(20) -定义变量statu
4、s ,用于循环求解过程中保存当前的股票状态declare 买入数据 decimal(10, 3) -定义变量买入数据 ,用于循环求解过程中保存最新一次买入时的买入数据declare 卖出数据 decimal(10, 3) -定义变量卖出数据 ,用于循环求解过程中保存最新一次卖出时的卖出数据declare 本次收益 decimal(10, 3) -定义变量本次收益 ,用于循环求解过程中保存本次卖出时的收益情况declare 总收益 decimal(10, 3) -定义变量总收益 ,用于循环求解过程累加求解出n日均线时的总收益值declare 胜次数 int -定义变量胜次数 ,用于循环求解过程累
5、加求解出n日均线时的胜次数declare 总次数 int -定义变量总收益 ,用于循环求解过程累加求解出n日均线时的总收益值declare 胜概率 decimal(10,3) -定义变量总收益 ,用于循环求解过程累加求解出n日均线时的总交易次数 /*定义游标*/declare youbiao1 cursor SCROLL FOR select 时间,开盘,收盘 from Stock declare youbiao2 cursor SCROLL FOR -定义游标 youbiao12指向Stock表开盘列,用于求解时获取次日开盘值 select 开盘 from Stock /*打开游标*/ope
6、n youbiao1open youbiao2/*开始循环求解步骤*/set n=2 while n=365 -从2日均线开始 求解到365日均线begin -开始第一层循环求解n日均线时的情况,共循环364次 /*创建表:“使用n日均值时的交易情况”*/ DECLARE tablename VARCHAR(60) SET tablename=+CONVERT(VARCHAR(60),n)+ print tablenameDECLARE TableSql VARCHAR(512)SET TableSql=CREATE TABLE +tableName+ 时间 nvarchar(20) NULL
7、, 开盘 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(*) from Stock -保存数据源
8、数据总量,即总天数 set follow_n=0 set sum=0 /*开始遍历数据表,前n-1个数据无n日均线,直接求和*/ while ioned AND status=) -当收盘大于日均线且股票为卖出状态时,买入操作BUY -置股票状态为买入 set nex=i+1 -next指向下一日,便于获得下一天开盘值 fetch ABSOLUTE nex from youbiao2 into 次日开盘 set 买入数据=次日开盘 -买入数据位次日收盘值 (时间,开盘,收盘,日均线,操作,买入卖出数据) values(, +CAST(收盘 AS NVARCHAR(10)+CAST(oned A
9、S NVARCHAR(10)+CAST(买入数据 AS NVARCHAR(10)+ print Sql EXEC(Sql) /*情况2 卖出*/ else if(收盘0) set 胜次数=胜次数+1 -如果本次收益0,则胜次数+1 set 总次数=总次数+1 -无论输胜总次数都要加1 set 总收益=总收益+本次收益 -累加总收益 values(+CAST(开盘 AS nvarchar(10)+CAST(收盘 AS nvarchar(10)+CAST(oned AS nvarchar(10)+CAST(卖出数据 AS NVARCHAR(10)+CAST(本次收益 AS NVARCHAR(10)
10、+ /*情况3 无交易*/ else -无交易发生,直接保存数据到“使用n日均值时的交易情况表中 (时间,开盘,收盘,日均线) values( fetch ABSOLUTE j from youbiao1 into 时间,开盘,收盘 set follow_n=收盘 -保存前第n天收盘,便于下次循环时减去,便于统计收盘和 set i=i+1 -第i天变量递增,统计下一天 set j=j+1 -变量j指向的是前第n天,便于统计收盘和 -结束第i天的统计交易情况,进入第i+1天的循环 end /*保存n日均线时的统计情况到总表中*/ set 胜概率=胜次数*1.0/总次数 insert into 不
11、同n日均线时的盈利情况比较表 values(n,胜次数,总次数,胜概率,总收益) set n=n+1 -n递增,进入求解n+1日均线的情况end -结束外循环2日到365日/*关闭和释放游标资源*/ CLOSE youbiao1 DEALLOCATE youbiao1CLOSE youbiao2 DEALLOCATE youbiao2 /*查询结果:*/ -查询最大胜率的n日均线select n日均线 AS 最大胜率日均线,胜概率 from 不同n日均线时的盈利情况比较表where 胜概率=(select max(胜概率) from 不同n日均线时的盈利情况比较表) -查询最大盈利总点(总收益
12、)的n日均线select n日均线 AS 最大盈利总点日均线,总收益 from 不同n日均线时的盈利情况比较表where 总收益=(select max(总收益) from 不同n日均线时的盈利情况比较表) -按胜率从大到小排列select * from 不同n日均线时的盈利情况比较表order by 胜概率 deSc -按盈利总点(总收益)从大到小排列order by 总收益 deSc题目二:假设每次买入卖出的操作,都需要万分之三的费用,求最大胜率及最大盈利点数的均值数据declare 买入手续费 decimal(10, 3)-定义变量买入手续费 ,用于循环求解过程中保存最新一次买入时的买入手续费declare 卖出手续费 decimal(10, 3)-定义变量卖出手续费 ,用于循环求解过程中保存最新一次卖出时的卖出手续费 手续费5% decimal(10, 3) NULL, set 买入手续费=买入数据*0.00003 -万分之五手续费 (时间,开盘,收盘,日均线,操作,买入卖出数据,手续费5%) values(+CAST(oned AS NVARCH
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1