| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5302 人关注过本帖, 1 人收藏
标题:有对股票指标的编程感兴趣的吗?大家探讨下
只看楼主 加入收藏
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 60楼 sdta
trix的没问题
2012-03-16 21:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
回复 61楼 reedwu
GO I+(nday-1)
加在
G=TRMA
前面
这下应该对了吧

[ 本帖最后由 sdta 于 2012-3-16 21:53 编辑 ]

坚守VFP最后的阵地
2012-03-16 21:46
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
刚好,我准备炒
2012-03-16 23:10
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 62楼 sdta
正确,现在语句简单了。我在1a0001中加了字段trmd,trmd(nday)=(trma(nday)+2*trmd(nday-1))/3,作为kdj的d值
USE 1a0001.DBF ALIAS A
 T1=seconds()
 BLANK ALL FIELDS K,D,TRIX,TRMA,trmd
G=100 &&此处设为100,否则nday开始的几条数据不正确
 h=100

 nday=9 &&修改天数
 FOR I=1 TO RECCOUNT()-(nday-1)
     SELECT SHHIGH,SHLOW FROM 1A0001 WHERE BETWEEN(RECNO(),I,I+(nday-1)) INTO ARRAY AA
     =ACOPY(AA,BB)
     =ASORT(BB,1) &&按SHHIGH排序
     BB1=BB(nday,1) &&最大值
     =ASORT(BB,2) &&按SHLOW排序
     BB2=BB(1,2) &&最小值
     SELECT A
     REPLACE K WITH BB2,D WITH BB1,TRIX WITH (ABS(shclose-k)/ABS(d-k))*100,TRMA WITH (TRIX+2*G)/3 FOR RECNO()=I+(nday-1)
  
  GO I+(nday-1)
     G=TRMA  &&trma列为kdj.k
     repl TRMd WITH (TRma+2*h)/3 FOR RECNO()=I+(nday-1) &&增加了trmd列,为kdj.d 本想放上面的,但编译不通过,搞不懂,所以另写一行了
     GO I+(nday-1)
     h=trmd
ENDFOR
 MESSAGEBOX("共用时间: "+TRANSFORM(seconds()-T1,"@Z 999.99")+" 秒")
 BROWSE
通过,结果正确

[ 本帖最后由 reedwu 于 2012-3-17 00:48 编辑 ]
2012-03-16 23:38
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 44楼 reedwu
2012.rar (36.96 KB)
SELECT shno,shtime,shclose,trma,trmd FROM 1a0001 WHERE trma>trmd 只能取到trma>trmd 的值,如4426行~4443行,但我想只取出4426行,其他连续的trma>trmd就过滤掉,直到出现4444行,trma<trmd,并将4426行和4444行放在新表中的同一行中,怎么编?
2012-03-17 10:31
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 65楼 reedwu
&&k>d
CLOSE TABLES
 USE 1a0001.DBF ALIAS A
SELECT shno,shtime,shclose,trma,trmd FROM a WHERE trma>trmd INTO TABLE kd
ALTER table kd ADD COLUMN trme number(8,4)  &&增加了个字段,如果下一条也是k>d的话,那shno之差就是1,然后删除=1的就是每次的金叉记录,下面死叉的同理
USE kd
  n=2
 GO n
 DO WHILE !EOF()
 a=shno
 GO n-1
 b=shno
 h=a-b
GO n
  REPLACE trme WITH h
 SKIP
 n=n+1
 ENDDO
DELETE FOR trme=1
PACK
 CLOSE ALL


&&k<d
USE 1a0001.DBF ALIAS A
SELECT shno,shtime,shclose,trma,trmd FROM a WHERE trma<trmd INTO TABLE dk
ALTER table dk ADD COLUMN trme number(8,4)
USE dk
  n=2
 GO n
 DO WHILE !EOF()
 a=shno
 GO n-1
 b=shno
 h=a-b
GO n
  REPLACE trme WITH h
 SKIP
 n=n+1
 ENDDO
DELETE FOR trme=1
PACK
 CLOSE ALL
用trmd>trma生成kd表,用trmd<trma生成dk表,我再合并上2表,呵呵,麻烦了点,但也算成了


[ 本帖最后由 reedwu 于 2012-3-17 13:08 编辑 ]
2012-03-17 11:21
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
程序代码:
CLEAR
CLOSE TABLES
USE 1a0001.DBF ALIAS A
T1=seconds()
BLANK ALL FIELDS K,D,TRIX,TRMA
G=0
nday=9 &&修改天数
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+2*G)/3 FOR RECNO()=I+(nday-1)
    GO I+(nday-1)
    G=TRMA
ENDFOR
MESSAGEBOX("共用时间: "+TRANSFORM(seconds()-T1,"@Z 999.99")+" 秒")
BROWSE
修改后的代码

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

坚守VFP最后的阵地
2012-03-17 11:32
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
回复 64楼 reedwu
原表字段不要改,可以增加字段,修改后的表重新上传。
为什么要设置G、H为100?
初始值本来就是0

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

坚守VFP最后的阵地
2012-03-17 11:49
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 68楼 sdta
因为前几天收盘就是最高价,所以数值都是100,不然的话,前30多条的记录都是错的,呵呵,不过也没关系,肯定不会用到那么前的数据
2012-03-17 12:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
回复 64楼 reedwu
程序代码:
CLOSE TABLES
USE 1a0001.DBF ALIAS A
T1=seconds()
BLANK ALL FIELDS K,D,TRIX,TRMA
G=0
H=0
nday=9 &&修改天数
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+2*G)/3,TRMD WITH (TRMA+2*H)/3 FOR RECNO()=I+(nday-1)
    GO I+(nday-1)
    G=TRMA
    H=TRMD
ENDFOR
MESSAGEBOX("共用时间: "+TRANSFORM(seconds()-T1,"@Z 999.99")+" 秒")
BROWSE

坚守VFP最后的阵地
2012-03-17 12:42
快速回复:有对股票指标的编程感兴趣的吗?大家探讨下
数据加载中...
 
   



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

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