| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5311 人关注过本帖, 1 人收藏
标题:有对股票指标的编程感兴趣的吗?大家探讨下
取消只看楼主 加入收藏
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 76楼 sdta
这个数据就不用写回原表了,直接生成新表,只要每次k>d开始时的shno,shtime,shclose和结束时k<d的shno,shtime,shclose就行了,加个profit字段计算出每次的交易收益,哈哈,刚刚算了下kd金叉时买入,死叉时卖出,从91-2-6的129买入算,到12-2-27卖出2447,知道收益是多少?1998点,不错,还算好的,比只买不动收益只差了319点。如果从2000-1-24的1477金叉买入,按kdj提示的信号到12-2-27卖出点2447算,亏损416点,还不算上证涨970点,冤死了,呵呵,这个是用excel做的,我还没将kd和dk合并的程序搞定,excel只要把dk表贴过去就好了,所以先看看

[ 本帖最后由 reedwu 于 2012-3-17 17:00 编辑 ]
2012-03-17 16:36
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 78楼 sdta
你是高手,当然不难了,我太差,用的都是笨办法,呵呵,写出的程序估计没人能看懂,万分感谢你的帮助,谢了.
我新建了个表kdj,设shno,shtime,shclose,shno1,shtime1,shclose1然后用下面的程序只能将dk的数据放进kdj表,但kdj.shno,kdj.shtime,kdj.shclose所有的都只用了kd的第1条,
而且我想将dk表的shno=17的记录过滤掉也不行,大家帮我纠正下程序,谢谢
看楼下的程序吧,我的太乱,已删

[ 本帖最后由 reedwu 于 2012-3-17 23:58 编辑 ]
2012-03-17 17:03
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 80楼 sdta
你的程序有问题,可能是DELETE FOR (TRMEKD=0 AND TRMEDK=0)这句造成的,不过结果到是提示了我,其实我不用再生成什么表的,我只要把dk追加到kd表里,再按shno排序下就行了,就像你的程序生成kddk就行了,至于profit字段的计算,我可以用第2条的shclose减第1条的shclose就可以了,测试下,谢了
2012-03-18 00:09
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 82楼 sdta
知道问题出哪了,你的程序没问题,是kd,dk表的第1行数据的trme都是0,所以kddk少了2条记录,这个没什么影响的。你前面的提示我没能理解,再说那时我只想着要将2张表横向排列去,没去想纵的也能解决问题,呵呵,愚笨了
2012-03-18 00:25
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 84楼 sdta
这个程序主要是用上证的历史数据来测算那个指标和如何设置参数比较适合,从数据分析的角度看能盈利的概率,我会把我的思路都放上来的,大家一起学习,呵呵,当然能挣钱最好了
2012-03-18 00:50
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 85楼 reedwu
经过几天的测试,程序很好,感谢sdta的大力支持,大家可以测试下,希望对大家的炒股有帮助,谢谢了。
需要说明的是先要在1a0001.dbf上增加一列trmd number(15,4),测试时只要修改 nday,nm,nn三个值,对应kdj的参数设置,然后累计profit值就是盈利值。
USE 1a0001.DBF ALIAS A
BLANK ALL FIELDS K,D,TRIX,TRMA,trmd
G=100
H=100
nday=18
 &&修改天数
nm=5  &&修改k参数
nn=4  &&修改d参数
FOR I=1 TO RECCOUNT()-(nday-1)
SELECT MAX(SHHIGH),MIN(SHLOW) FROM 1A0001 WHERE BETWEEN(RECNO(),I,I+(nday-1)) INTO ARRAY AA
SELECT A
REPLACE K WITH AA(1,2),D WITH AA(1,1),TRIX WITH (ABS(shclose-k)/ABS(d-k))*100,TRMA WITH (TRIX+(nm-1)*G)/nm,TRMD WITH (TRMA+(nn-1)*H)/nn FOR RECNO()=I+(nday-1)
GO I+(nday-1)
G=TRMA
H=TRMD
ENDFOR

&&Close all

*----KD±í
SELECT *,CAST("" AS Numeric(4)) AS TRME FROM 1A0001 WHERE trma>trmd INTO TABLE KD
B=SHNO
SCAN FOR RECNO()>1 AND !EOF()
A=SHNO
REPLACE TRME WITH A-B
B=SHNO
ENDSCAN
DELETE FOR TRME=1
PACK

*----DK±í
SELECT *,CAST("" AS Numeric(4)) AS TRME FROM 1A0001 WHERE trma<trmd INTO TABLE DK
B=SHNO
SCAN FOR RECNO()>1 AND !EOF()
A=SHNO
REPLACE TRME WITH A-B
B=SHNO
ENDSCAN
DELETE FOR TRME=1
PACK


&&Close all

SELECT shno,shtime,shy,shhigh,shlow,shclose,trma,trmd,CAST("" AS Numeric(4)) AS TRMEKD,CAST("" AS Numeric(4)) AS TRMEDK, CAST("" AS Numeric(15,4)) AS profit FROM 1A0001 INTO TABLE KDDK
UPDATE KDDK SET TRMEKD=KD.TRME FROM KD WHERE KDDK.SHNO==KD.SHNO
UPDATE KDDK SET TRMEDK=DK.TRME FROM DK WHERE KDDK.SHNO==DK.SHNO
DELETE FOR (TRMEKD=0 AND TRMEDK=0) &&可以留着,这样数据全
PACK
CLOSE TABLES


&&close all

USE kddk.dbf
n=2
 GO n
  DO WHILE !EOF()
  a=shclose
GO n-1
b=shclose
GO n
REPLACE profit WITH a-b
SKIP
n=n+1
ENDDO
CLOSE TABLES

USE kddk.dbf
REPLACE ALL profit WITH 0 for trmekd>0

SELECT SUM(profit) FROM kddk WHERE shy>=2009  INTO ARRAY xx
?nday,nm,nn,xx    &&求2009年以来的盈利

CLOSE TABLES
ERASE KD.DBF
ERASE DK.DBF
CLOSE ALL


[ 本帖最后由 reedwu 于 2012-3-20 09:38 编辑 ]
2012-03-19 09:05
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 87楼 sdta
程序通过,没问题,谢了。
你看下86楼的几个参数设置,nday,nm,nn,我每次都是手工改的,能设成 for nday=9 to 20, for nm=3 to 5,for nn=3 to 5 ,就是先9,3,3;10,3,3;...20,3,3;9,4,3;10,4,3...最后输出 nday,nm,nn xx,这样就能直接看到哪个参数是最好的,不用手工做了。
2012-03-20 08:52
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 89楼 sdta
是这个意思,我就是想让程序一次运行出来,不用我手工一个一个改,我先设 for nday=9 to 18 ,在结尾处 ?nday,nm,nn,xx(86楼增加了xx的取值语句)
                                                                                                 endfor但程序出来的结果9,5,4 xx 和10,5,4。。。xx都是一样的,可能并不是就for  endfor就好了的


[ 本帖最后由 reedwu 于 2012-3-20 09:39 编辑 ]
2012-03-20 09:23
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 91楼 sdta
USE 1a0001.DBF ALIAS A
BLANK ALL FIELDS K,D,TRIX,TRMA,trmd
G=100
H=100
CREATE CURSOR LSB (XH N(3),NDAY N(2),NM N(2),NN N(2))  &&这段程序就是替代下面三行的参数,后面运行的程序是不改的,只要不断的把三个值让程序运行就好了
 FOR NDAY1=9 TO 20
     FOR NM1=3 TO 5
         FOR NN1=3 TO 5
              INSERT INTO LSB VALUES(RECNO(),NDAY1,NM1,NN1)  &&这句执行时出错了
&nday=18   &&修改天数
&nm=5  &&修改k参数
&nn=4  &&修改d参数      

FOR I=1 TO RECCOUNT()-(nday-1)
SELECT MAX(SHHIGH),MIN(SHLOW) FROM 1A0001 WHERE BETWEEN(RECNO(),I,I+(nday-1)) INTO ARRAY AA
SELECT A
REPLACE K WITH AA(1,2),D WITH AA(1,1),TRIX WITH (ABS(shclose-k)/ABS(d-k))*100,TRMA WITH (TRIX+(nm-1)*G)/nm,TRMD WITH (TRMA+(nn-1)*H)/nn FOR RECNO()=I+(nday-1)
GO I+(nday-1)
G=TRMA
H=TRMD
ENDFOR

&&Close all

*----KD表
SELECT *,CAST("" AS Numeric(4)) AS TRME FROM 1A0001 WHERE trma>trmd INTO TABLE KD
B=SHNO
SCAN FOR RECNO()>1 AND !EOF()
A=SHNO
REPLACE TRME WITH A-B
B=SHNO
ENDSCAN
DELETE FOR TRME=1
PACK

*----DK表
SELECT *,CAST("" AS Numeric(4)) AS TRME FROM 1A0001 WHERE trma<trmd INTO TABLE DK
B=SHNO
SCAN FOR RECNO()>1 AND !EOF()
A=SHNO
REPLACE TRME WITH A-B
B=SHNO
ENDSCAN
DELETE FOR TRME=1
PACK


&&Close all

SELECT shno,shtime,shy,shm,shhigh,shlow,shclose,trma,trmd,CAST("" AS Numeric(4)) AS TRMEKD,CAST("" AS Numeric(4)) AS TRMEDK, CAST("" AS Numeric(15,4)) AS profit FROM 1A0001 INTO TABLE KDDK
UPDATE KDDK SET TRMEKD=KD.TRME FROM KD WHERE KDDK.SHNO==KD.SHNO
UPDATE KDDK SET TRMEDK=DK.TRME FROM DK WHERE KDDK.SHNO==DK.SHNO
DELETE FOR (TRMEKD=0 AND TRMEDK=0) &&可以留着,这样数据都全
PACK
CLOSE TABLES


&&close all

USE kddk.dbf
GO TOP
b=shclose
SCAN FOR RECNO()>1 AND !EOF()
REPLACE profit WITH shclose-b
b=shclose
ENDSCAN
REPLACE ALL profit WITH 0 for trmekd>0

SELECT SUM(profit) FROM kddk WHERE shy>=2009  INTO ARRAY xx
?nday1,nm1,nn1,xx
ENDFOR
ENDFOR
ENDFOR

CLOSE TABLES
ERASE KD.DBF
ERASE DK.DBF
CLOSE ALL

[ 本帖最后由 reedwu 于 2012-3-20 11:09 编辑 ]
2012-03-20 10:42
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 93楼 sdta
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
执行时第1次错误是打印9.3.3 .null.,然后打开对话框,点取消的话出来第2个错误


[ 本帖最后由 reedwu 于 2012-3-20 10:56 编辑 ]
2012-03-20 10:54
快速回复:有对股票指标的编程感兴趣的吗?大家探讨下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042091 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved