| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5302 人关注过本帖, 1 人收藏
标题:有对股票指标的编程感兴趣的吗?大家探讨下
只看楼主 加入收藏
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
以下是引用reedwu在2012-3-18 00:09:29的发言:

你的程序有问题,可能是DELETE FOR (TRMEKD=0 AND TRMEDK=0)这句造成的,不过结果到是提示了我,其实我不用再生成什么表的,我只要把dk追加到kd表里,再按shno排序下就行了,就像你的程序生成kddk就行了,至于profit字段的计算,我可以用第2条的shclose减第1条的shclose就可以了,测试下,谢了
前面已经提示过你。祝你好运。

坚守VFP最后的阵地
2012-03-18 00:17
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
回复 83楼 reedwu
能跟你学如何炒股吗

坚守VFP最后的阵地
2012-03-18 00:28
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
回复 86楼 reedwu
程序代码:
GO TOP
b=shclose
SCAN FOR RECNO()>1 AND !EOF()
     REPLACE profit WITH shclose-b
     b=shclose
ENDSCAN
BROWSE for trmekd<=0

坚守VFP最后的阵地
2012-03-19 10:48
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
以下是引用reedwu在2012-3-20 08:52:28的发言:

程序通过,没问题,谢了。
你看下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,这样就能直接看到哪个参数是最好的,不用手工做了。
nday,nm,nn xx这几个参数与数据表的关系是什么
FOR NDAY=9 TO 20
    FOR NM=3 TO 5
        FOR NN=3 TO 5
            ? NDAY,NM,NN
        ENDFOR
    ENDFOR
ENDFOR
是这个意思吗

坚守VFP最后的阵地
2012-03-20 09:17
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
快速回复:有对股票指标的编程感兴趣的吗?大家探讨下
数据加载中...
 
   



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

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