| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5311 人关注过本帖, 1 人收藏
标题:有对股票指标的编程感兴趣的吗?大家探讨下
取消只看楼主 加入收藏
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 95楼 sdta
我改好了,还是出错啊,我去掉前面的程序,改成手工的,就运行正常了的

[ 本帖最后由 reedwu 于 2012-3-20 11:16 编辑 ]
2012-03-20 11:11
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
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 99楼 sdta
但总比手工一个一个去试来的方便,可以设少点,看看那个参数效果好,然后再重点测试
2012-03-20 11:38
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
我打算先编程5个指标做测试,优化后根据他们出的买卖信号操作,每出1个进出20%,呵呵,把资金管理的部分都省了
2012-03-20 11:40
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 102楼 sdta
还是不执行蓝色部分的程序,我看到kd,dk,kddk都是空的,
我觉得先建立lsb表,
CREATE TABLE  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,nm,nn应该取lsb表里的值,执行到lsb表尾
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


[ 本帖最后由 reedwu 于 2012-3-20 12:48 编辑 ]
2012-03-20 12:34
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 104楼 sdta
CLOSE TABLES
IF FILE('lsb.dbf')
DELETE FILE lsb.dbf
ENDIF

CREATE TABLE  LSB (XH N(3),NDAY0 N(2),NM0 N(2),NN0 N(2),xx0 n(15,4))
 FOR NDAY1=9 TO 10
     FOR NM1=3 TO 4
         FOR NN1=3 TO 4
         INSERT INTO LSB VALUES(RECNO(),NDAY1,NM1,NN1,0)
    ENDFOR
ENDFOR
ENDFOR
CLOSE TABLES &&以上建立lsb表,将要取值的变量列表

USE lsb.dbf
nx=1
GO nx
 DO WHILE !EOF()
 nday=nday0
 nm=nm0
 nn=nn0  &&分别从lsb表中将nday,nm,nn的值取过来


&&nday=18   &&修改天数
&&nm=5  &&修改k参数
&&nn=4  &&修改d参数,以下程序不变,直到skip

USE 1a0001.DBF ALIAS A

BLANK ALL FIELDS K,D,TRIX,TRMA,trmd
G=100
H=100

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 WHERE shy>=2009 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 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  INTO ARRAY xx

?nday,nm,nn,xx   &&这句也可以将xx写进lsb.dbf中的xx0中去,对应的的nx就是xh repl xx0 with xx for xh=nx 可能和下面的一样都没能找到 lsb表,所以都出错了


SKIP  &&这里出错了,没能执行下去
 nx=nx+1
ENDDO



CLOSE TABLES

CLOSE ALL
2012-03-20 13:44
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 106楼 sdta
通过测试,谢了,我只测试了18~20,3~5,3~5,每次耗时25.6,共用了700秒啊,看来多了就得放台式机上了,不过效果很好,马上就对比出了高点,kdj(18,5,4)是最适合上证2009年以来的走势的,共获利772.04点,大家可以以此为基础,测试不同指标的最佳参数,来晒晒,方便大家参考。sdta谢了。

[ 本帖最后由 reedwu 于 2012-3-20 15:28 编辑 ]
2012-03-20 14:54
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 107楼 reedwu
上述程序已经完全能适合大家的测试了,这个帖子也能完结了。
不过大家有没有注意到这句DELETE FOR (TRMEKD=0 AND TRMEDK=0),我后面特意加了句要留着,这个语句是删除除金叉死叉的其他数据的,但有种理论是说不管死叉,只等金叉出现就买入,设好止损,持有n天就出货的,再等下次的买入机会。但我觉得在震荡市中比较适合,感兴趣的可以测试下,持有n天的程序,但我这里就不做了,免得误导大家,因为碰上2006年的那个牛市,简单持股就行了,下了车就没机会了。
再次感谢sdta的大力帮助,谢谢。
 
2012-03-20 15:44
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 109楼 sdta
好,谢了。不过建议编程的去试试炒股,你们的逻辑能力和处理数据的能力应该是远胜于一般人的,自己建立个模型,呵呵,赢钱应该是不成问题的。我再到后面的程序就没戏了,比如怎么做图表等,看看买卖点,最高最低的时间分布图等等,虽然有点想法,但我都不知道该怎么弄?哪天理清头绪了,再来探讨,免不了请你帮忙。

[ 本帖最后由 reedwu 于 2012-3-20 16:45 编辑 ]
2012-03-20 16:35
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
回复 111楼 TonyDeng
谢了,不过“赌运”要改,否则我就不用折腾出这个程序了,那2字还是给那些无畏无惧的杀入股市的人了。我现在的思路是先测算指标的参数,然后研究资金管理,再制定下操作规则,最后就是纪律,纪律再纪律。呵呵,这样“赌运”、“好运”、“厄运”这些字眼都不需要和我搭边,我只要我的盈利是我计算出来的就好。
2012-03-21 10:01
快速回复:有对股票指标的编程感兴趣的吗?大家探讨下
数据加载中...
 
   



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

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