| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2947 人关注过本帖, 1 人收藏
标题:请大神帮忙写张表格,就是将总数量为28的两个元素的所有排列与组合都写进表 ...
取消只看楼主 加入收藏
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用shuxin211在2015-8-28 16:28:00的发言:


S版,刚才又试了下,发现代码放进命令框按下确定之后,代码只剩下最后一行,难怪只是查询到一张空表,问题是上面的三句代码为什么不执行并且在命令框里消失了呢?
SELECT aa.a1 bp1,bb.a1 bp2,cc.a1 bp3,dd.a1 bp4,ee.a1 bp5,ff.a1 bp6,gg.a1 bp7,hh.a1 bp8,ii.a1 bp9,jj.a1 bp10,kk.a1 bp11,ll.a1 bp12,mm.a1 bp13,nn.a1 bp14,oo.a1 bp15,pp.a1 bp16,qq.a1 bp17,rr.a1 bp18,ss.a1 bp19,tt.a1 bp20,uu.a1 bq21,vv.a1 bp22,ww.a1 bp23,xx.a1 bp24 FROM t1 aa,t1 bb,t1 cc,t1 dd,t1 ee,t1 ff,t1 gg,t1 hh,t1 ii,t1 jj,t1 kk,t1 ll,t1 mm,t1 nn,t1 oo,t1 pp,t1 qq,t1 rr,t1 ss,t1 tt,t1 uu,t1 vv,t1 ww,t1 xx


CREATE CURSOR t1 (a1 c(1))
INSERT INTO t1 VALUES ("B")
INSERT INTO t1 VALUES ("P")
SELECT aa.a1 bp1,bb.a1 bp2,cc.a1 bp3,dd.a1 bp4,ee.a1 bp5,ff.a1 bp6,gg.a1 bp7,hh.a1 bp8,ii.a1 bp9,jj.a1 bp10,kk.a1 bp11,ll.a1 bp12,mm.a1 bp13,nn.a1 bp14,oo.a1 bp15,pp.a1 bp16,qq.a1 bp17,rr.a1 bp18,ss.a1 bp19,tt.a1 bp20,uu.a1 bq21,vv.a1 bp22,ww.a1 bp23,xx.a1 bp24 FROM t1 aa,t1 bb,t1 cc,t1 dd,t1 ee,t1 ff,t1 gg,t1 hh,t1 ii,t1 jj,t1 kk,t1 ll,t1 mm,t1 nn,t1 oo,t1 pp,t1 qq,t1 rr,t1 ss,t1 tt,t1 uu,t1 vv,t1 ww,t1 xx
这个代码放进命令框里确定之后,弹出一个打开对话框,下面有个框前面写的是定位t1.dbf:但是我并没有先建立这个表,于是取消,先建一张表t1,再执行上面的代码,就出现查询到一张空表,代码框里下面这三行不见了。
CREATE CURSOR t1 (a1 c(1))
INSERT INTO t1 VALUES ("B")
INSERT INTO t1 VALUES ("P")
2015-08-28 16:34
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用吹水佬在2015-8-28 10:44:14的发言:


这句不好理解,能具体点吗?
可否这样理解:
按照问题的说法就是BP表的BP1字段的值,具体是 B 或 P,看来B或P还有变数?不是 0 或 1 那么简单。

吹水版主,非常感谢你的耐心解答,看来是我没有把需求说明清楚,我本来是想按照自己的思路一个环节一个环节的去解决,现在看来在VFP里面的解决方案是比较灵活的,而我只是个初哥,思路一直还停留在excel里对单元格的操作上,下面我说明一下这个测试工具的计算原理,便于大神们设计方案:
第一步:建立一张包含B个数+P个数=28的全部组合的表格,这个表格的268435456条记录是固定的,不会变动,在后面的计算当中会用到。如果28数值太大可以调整为26,就只有67108864条记录。
第二步:建立一张适时K线记录表,打比方k线涨10点用B表示,跌10点用P表示,这里需要在表单里设计"B""P"两个按钮,点击B就增加一个记录B,点P就增加一个记录P.
第三步:建立一张BP结果记录表,这个结果是怎么来的呢?首先,将第一步建立的固定记录表的第一个字段里所有的BP数量设为1,然后拿这张固定记录表的第一个字段的记录与适时K线记录表第一个字段的记录进行对比,如果相同,都是B或者都是P,则固定记录表第二个字段的数量-1,如果对比结果不同,则固定记录表第二个字段的数量+1,就是说固定记录表的每一行记录的字段都要与适时K线记录表相对应的字段进行对比,判断异同之后对下一个字段值的数量执行加减操作。文字比较难理解,下面我用个简单的表来举例一下,其实很简单的。
假设k线适时记录表一段时间的记录结果为:BBB P
固定记录表就是下面这样:
 bp1 bp2 bp3
  B   B   B   B   B      
  1   0  -1  -2  -1   
  B   B   P   B   B   
  1   0  -1   0   1   
  B   P   B   B   P   
  1   0   1   0   1   
  P   B   B   P   B   
  1   2   1   0  -1   
  P   P   P   P   P   
  1   2   3   4   3   
  P   P   B   P   P  
  1   2   3   2   1   
  P   B   P   P   B   
  1   2   1   2   1   
  B   P   P   B   P   
  1   0   1   2   3   
假设适时K线里有6个记录,我的固定记录表里只是用的B+P=3的排列与组合,总共是8组,第一个字段值的数量统一设为1,大家发现,第一个字段到第三个字段里的BP数量是相等的,BP数量都是等于4,也就是两个表进行对比之后采取了相同则-1,相异则+1的算数原则,从第四列开始,BP数量开始不同,这个第四五六列是怎么来的呢?因为适时K线记录会无限往后延伸,第四个记录对比的是固定记录里的第一个,第五个对比的是第二个,第六个对比的是第三个,就这样无限循环下去,可是第四个字段值的数量计算又不能从头开始,要接着前面的计算结果来往后算,拿适时记录第4个记录与固定记录里第一行举例,适时记录是P,实时记录第4个记录对应的是固定记录的第1个,即B,结果是不同的,这时候要在前面一次记录值的结果上执行+1原则得到第5个记录值的数量,即-2+1=-1.这时候得到结果P=8,B=0,P>B且P-B=8,预测结果下一次买P,目的就是根据前面的计算来预测后面是买B还是买P,所实时记录只有4个的时候第五买什么会自动计算好,不知道这样说大神们能不能看明白啊,不明白尽管问我,在这里统一致谢,不胜感激。
2015-08-28 18:20
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用吹水佬在2015-8-28 21:02:20的发言:

这种推算法(预测法)叫什么名堂?
算法虽然不算复杂,也有一定运算量,如果去到28*268435456个元素,这样在268435456条记录里,要每条记录横向逐个元素循环比对后再纵向统计B和P的计数,有无测算过耗时多少?

我就是因为用excel来做效率太低才转而投VFP的啊,用excel做了B+P=16的全部排列与组合,总共65536组合,输入80个k线记录之后,文件180多兆,打开一下要几十分钟,但是打开之后输入一个记录计算并不慢,主要是如果想记录数再继续增加的话就非常困难,而我需要用上百万的数据来进行测试,并且B+P=16这个组合数也太少,不符合大数概念。算法很简单,我上面说的那个算法只是举例,具体要测试的算法多达二十多种,但都是跟举例的那个那样简单的,所以只要一个模型能确定,其它的就很好做。之所以想用上亿条记录来进行计算,就是因为所有的K线指标在大数据里面一定会符合数据运行的内在规律,把一切都交给大数据去处理,彻底撇开人为因素的判断,玩期货和外汇时间久的人都知道,凡是通过什么技术面分析啊,什么所谓的盘面语言啊,这类人为主观判断的方法,最后的结果只有一个,就是输,虽然很多人并不承认。这就是我想做这个测试工具的初衷,这是题外话了。如果用28的两亿多条记录的计算量太大可以用26的六千多条记录,还不行那就用24吧,总之用双数就行了,如果用20的1048576条记录还是不行的话,那我就真不知道这个VFP数据库能做些什么东西了。其实在excel里真的很容易实现的,很好计算,几个简单的函数就行了,但是数据量的限制太大。在VFP里面我感觉好像很不好操作,至少没有excel里那么直观,还是因为我VFP没入门吧,唉,做测试工具就这点不好,尤其是投资领域,凡是测试用的,99%都是通不过的,所以就不想花钱请人写,毕竟测一下通不过就扔了,所以想自己学点简单的,没想到感觉很难的样子。
2015-08-28 21:41
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用shuxin211在2015-8-28 21:41:45的发言:


我就是因为用excel来做效率太低才转而投VFP的啊,用excel做了B+P=16的全部排列与组合,总共65536组合,输入80个k线记录之后,文件180多兆,打开一下要几十分钟,但是打开之后输入一个记录计算并不慢,主要是如果想记录数再继续增加的话就非常困难,而我需要用上百万的数据来进行测试,并且B+P=16这个组合数也太少,不符合大数概念。算法很简单,我上面说的那个算法只是举例,具体要测试的算法多达二十多种,但都是跟举例的那个那样简单的,所以只要一个模型能确定,其它的就很好做。之所以想用上亿条记录来进行计算,就是因为所有的K线指标在大数据里面一定会符合数据运行的内在规律,把一切都交给大数据去处理,彻底撇开人为因素的判断,玩期货和外汇时间久的人都知道,凡是通过什么技术面分析啊,什么所谓的盘面语言啊,这类人为主观判断的方法,最后的结果只有一个,就是输,虽然很多人并不承认。这就是我想做这个测试工具的初衷,这是题外话了。如果用28的两亿多条记录的计算量太大可以用26的六千多条记录,还不行那就用24吧,总之用双数就行了,如果用20的1048576条记录还是不行的话,那我就真不知道这个VFP数据库能做些什么东西了。其实在excel里真的很容易实现的,很好计算,几个简单的函数就行了,但是数据量的限制太大。在VFP里面我感觉好像很不好操作,至少没有excel里那么直观,还是因为我VFP没入门吧,唉,做测试工具就这点不好,尤其是投资领域,凡是测试用的,99%都是通不过的,所以就不想花钱请人写,毕竟测一下通不过就扔了,所以想自己学点简单的,没想到感觉很难的样子。

我传个刚做的EXCEL范例上来大神们参考吧,如果不是受制于excel数据量的限制,做起来真的好简单的。范例用的只是B+P=3的8个组合,添加了20多个记录而已,我现在的目的就是想要用B+P=28的两亿多个组合来做测试,如果数据量太大就依次减2,保持双数到数据量合适为止,如果B+P=20的100万个组合都搞不定的话那也就失去大数的意义了。请查看附件:
大数测试.rar (24.82 KB)
2015-08-29 01:28
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用hu9jj在2015-8-28 07:51:55的发言:


哪你应该先升级电脑的硬件和软件。

多谢版主提醒,如果减少数据量到千万级,应该一般电脑都能运行吧。
2015-08-29 02:11
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用shuxin211在2015-8-29 01:28:03的发言:


我传个刚做的EXCEL范例上来大神们参考吧,如果不是受制于excel数据量的限制,做起来真的好简单的。范例用的只是B+P=3的8个组合,添加了20多个记录而已,我现在的目的就是想要用B+P=28的两亿多个组合来做测试,如果数据量太大就依次减2,保持双数到数据量合适为止,如果B+P=20的100万个组合都搞不定的话那也就失去大数的意义了。请查看附件:

只有一个人下载了附件,大神们都不感兴趣了吗?还是题目太没挑战性了?
2015-08-29 15:50
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用吹水佬在2015-8-29 20:54:03的发言:

粗粗看了一下,对照测试了一下。
B B B B B B B B B B B B B B B B B B B B B B B B B B B
B B P B B P B B P B B P B B P B B P B B P B B P B B P
B P B B P B B P B B P B B P B B P B B P B B P B B P B
B P P B P P B P P B P P B P P B P P B P P B P P B P P
P B B P B B P B B P B B P B B P B B P B B P B B P B B
P B P P B P P B P P B P P B P P B P P B P P B P P B P
P P B P P B P P B P P B P P B P P B P P B P P B P P B
P P P P P P P P P P P P P P P P P P P P P P P P P P P

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...         0
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 ...  19173961
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 ...  38347922
0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 ...  57521883
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 ...  76695844
1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 ...  95869805
1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 ... 115043766
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 134217727

先将提供的BP表(27位)转换成二进制和10进制数值,作测试对照参考。
只显示结果:

CLEAR
SET TALK OFF
CREATE CURSOR bpb (bpn I, bp1 I, bp2 I, bpi I)
INSERT INTO bpb VALUES (        0, 0, 0, 1)
INSERT INTO bpb VALUES ( 19173961, 0, 0, 1)
INSERT INTO bpb VALUES ( 38347922, 0, 0, 1)
INSERT INTO bpb VALUES ( 57521883, 0, 0, 1)
INSERT INTO bpb VALUES ( 76695844, 0, 0, 1)
INSERT INTO bpb VALUES ( 95869805, 0, 0, 1)
INSERT INTO bpb VALUES (115043766, 0, 0, 1)
INSERT INTO bpb VALUES (134217727, 0, 0, 1)

nBits = 27
nBPk = 0
n位数 = 3
DO WHILE .T.
    nRet = MESSAGEBOX("P...是"+0h0D+"B...否", 3+32+512, "提示")
    IF nRet == 2
        EXIT
    ENDIF
    nBP = IIF(nRet == 6, 1, 0)
    nBPk = nBPk + 1
    nBit = MOD(nBPk, n位数)
    nBit = IIF(nBit == 0, n位数, nBit)

    CLEAR
    建BP表(nBits)
    ?
    ? " nBP="+IIF(nBP==0,"B","P"), " nBPk="+TRANSFORM(nBPk), " nBit="+TRANSFORM(nBit)
    ?
    ? " BP       BPi        BP2       BPi+1"
    nB = 0
    nP = 0
    SELECT bpb
    SCAN
        REPLACE bpb.bp1 WITH 取bp(bpb.bpn, nBit, nBits),;
                bpb.bp2 WITH 取bp(bpb.bpn, nBPk+1, nBits)
        ? " " + IIF(bpb.bp1==0, "B", IIF(bpb.bp1==1, "P", "-"))
        ?? bpb.bpi
        ?? "        "+IIF(bpb.bp2==0, "B", IIF(bpb.bp2==1, "P", "-"))
        ?? bpb.bpi + IIF(bpb.bp1 == nBP, -1, 1)
        REPLACE bpb.bpi WITH bpb.bpi + IIF(bpb.bp1 == nBP, -1, 1)
        nB = nB + IIF(bpb.bp2 == 0, bpb.bpi, 0)
        nP = nP + IIF(bpb.bp2 == 1, bpb.bpi, 0)
    ENDSCAN
    ?
    ? " B="+TRANSFORM(nB), " P="+TRANSFORM(nP)
ENDDO
RETURN

FUNCTION 取bp(bpn, nBit, nBits)
    IF !BETWEEN(bpn, 0x00000000, 0xFFFFFFFF) OR !BETWEEN(nBit, 1, nBits)
        RETURN -1
    ENDIF
    RETURN BITRSHIFT(BITLSHIFT(bpn, 32 - nBits + nBit - 1), 31)
ENDFUNC

FUNCTION 建BP表(nBits)
    LOCAL i, nBP
    SELECT bpb
    SCAN
        ? bpb.bpn, "..."
        FOR i = 0 TO nBits-1
            nBP = BITRSHIFT(BITLSHIFT(bpb.bpn, 32 - nBits + i), 31)
            ?? " " + IIF(nBP==0, "B", "P")
        ENDFOR
    ENDSCAN
ENDFUNC

吹水版主果然厉害,写出这么复杂的代码,可惜我一点都看不懂,都不知道怎么用,看来还有很长的路要走啊,靠自己写恐怕暂时是不成了。
2015-08-29 21:52
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用吹水佬在2015-8-29 22:37:55的发言:

只是测试代码,没用的。
按你说的算法和对照提供的EXCEL,每选择一次B或P时,最终算出B和P的值。

就是这个意思,然后根据算出的BP值来确定投向和数量,这个数量是要除以总的组合数的,我举例里面除了8,所以3个0后面应该是1,然后会慢慢上升。没想到在VFP里面实现起来这么困难,本以为这么简单的算法会很容易搞定才决定自学的。
2015-08-29 22:48
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用sdta在2015-8-29 22:03:11的发言:

没有基础,一切都是空谈。

我的算法很简单,没想到在VFP里实现起来还是比较有难度的。
2015-08-29 22:50
shuxin211
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-8-26
收藏
得分:0 
以下是引用sdta在2015-8-30 00:31:47的发言:

不是已经有方法了吗

你的那个方法已经可以写出全部组合了,但是后面的算法吹水版主的代码目前看不懂怎么用,慢慢琢磨吧。再此谢谢你们的指点。
2015-08-30 01:06
快速回复:请大神帮忙写张表格,就是将总数量为28的两个元素的所有排列与组合都写 ...
数据加载中...
 
   



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

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