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


[ 本帖最后由 sdta 于 2012-3-20 09:32 编辑 ]

坚守VFP最后的阵地
2012-03-20 09:30
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 92楼 reedwu
INSERT INTO LSB VALUES(RECNO(),NDAY1,NM1,NN1)
出错原因是什么,我运行时一切正常
?nday1,nm1,nn1,xx &&这句可以?还是要用LSB
不明白你到底是什么意思

坚守VFP最后的阵地
2012-03-20 10:45
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
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 94楼 reedwu
看不清
你的代码不完整,是你偷工减料造成的。

[ 本帖最后由 sdta 于 2012-3-20 11:03 编辑 ]

坚守VFP最后的阵地
2012-03-20 10:58
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 95楼 sdta
我改好了,还是出错啊,我去掉前面的程序,改成手工的,就运行正常了的

[ 本帖最后由 reedwu 于 2012-3-20 11:16 编辑 ]
2012-03-20 11:11
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 96楼 reedwu
      ENDFOR
   ENDFOR
ENDFOR
偷工减料

坚守VFP最后的阵地
2012-03-20 11:14
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 97楼 sdta
晕,我把endf都放程序最下面了

但改成下面的,只打印了21,6,6 .null.,好像运行的也太快了,我的意思是每变动一个参数,蓝色的程序都要运行一次的啊
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)
ENDFOR
ENDFOR
ENDFOR
 
&&nday=18   &&修改天数
&&nm=5  &&修改k参数
&&nn=4  &&修改d参数

FOR I=1 TO RECCOUNT()-(nday1-1)
SELECT MAX(SHHIGH),MIN(SHLOW) FROM 1A0001 WHERE BETWEEN(RECNO(),I,I+(nday1-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+(nm1-1)*G)/nm1,TRMD WITH (TRMA+(nn1-1)*H)/nn1 FOR RECNO()=I+(nday1-1)
GO I+(nday1-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

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


[ 本帖最后由 reedwu 于 2012-3-20 11:27 编辑 ]
2012-03-20 11:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 98楼 reedwu
可以,但时间太长了

坚守VFP最后的阵地
2012-03-20 11:31
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 99楼 sdta
但总比手工一个一个去试来的方便,可以设少点,看看那个参数效果好,然后再重点测试
2012-03-20 11:38
快速回复:有对股票指标的编程感兴趣的吗?大家探讨下
数据加载中...
 
   



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

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