以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 帮帮忙呀,实在无法解决该问题! (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=65388) |
-- 作者:追逐趋势 -- 发布时间:2014/5/23 20:42:54 -- 帮帮忙呀,实在无法解决该问题! 以下这段交易系统: variable:n=0; ma1:ma(c,10); ma2:ma(c,20); 多头:ma1>ma2,LINETHICK0; 空头:ma2>ma1,LINETHICK0; 上轨:ref(hhv(h,15),1); 下轨:ref(llv(l,15),1); 开多:h>上轨,LINETHICK0; 开空:l<下轨,LINETHICK0; if 开多 and n=0 and holding=0 and TIME>093000 and time<145000 then BEGIN buy(多头 and 开多 ,1,LIMITR,上轨-0.2); BUYSHORT(空头 and 开空,1,LIMITR,下轨-0.2); n:=n+1; end Sell(空头 or time>145000,1,MARKET); sellshort(多头 or time>145000,1,MARKET); if time=CLOSETIME(0) then n:=0; 这段交易系统,只有几天是有测算有信号, 中间有很多天没有测算,没有信号。。 怪的是,有信号的日子,全部是早上9点31分开仓,其余那些时间符合条件的时间大于9点31分的仓位多没有信号?? 但是把下面两行代码的 ‘开多’ 和 ‘开空’ 给去掉后: buy(多头 and 开多 ,1,LIMITR,上轨-0.2); BUYSHORT(空头 and 开空,1,LIMITR,下轨-0.2); 却每天多有信号, 但如果不加‘开多’和‘开空’,就没办法在: 开多:h>上轨;OR 开空:l<下轨;成立 且 时间大于9点30分时 且 其他条件成立时 每天多有信号? 请问我是错在哪里? [此贴子已经被作者于2014/5/23 20:43:54编辑过]
|
-- 作者:追逐趋势 -- 发布时间:2014/5/23 20:46:09 -- 这个系统的要求是这样子 取以前15根1分钟K线的最高价和最低价为上轨下轨, 当时间大于9点30分时, 如果MA1大于MA2,且最高价突破上轨,开多 如果MA2大于MA1,且最低价跌破下轨,开空。 |
-- 作者:admin -- 发布时间:2014/5/23 20:53:57 -- 金字塔公式编写调试 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246&page=1&star=1
请先认真学习一下调试功能,你说的问题完全可以自行解决 |
-- 作者:追逐趋势 -- 发布时间:2014/5/23 21:01:11 -- 大哥呀,我当然知道调试啦,但是我就是调试出了问题,就是没办法解决呀。。 buy(多头 and 开多 ,1,LIMITR,上轨-0.2); BUYSHORT(空头 and 开空,1,LIMITR,下轨-0.2); 明明条件完全符合,却没有开仓? 就是做不到开仓! 没办法才上来问的
|
-- 作者:追逐趋势 -- 发布时间:2014/5/23 21:28:19 -- 天呀,谁帮帮忙呀, 我要是能解决干嘛上来发帖呀
|
-- 作者:qwer123 -- 发布时间:2014/5/23 21:48:53 -- 取以前15根1分钟K线的最高价和最低价为上轨下轨, 当时间大于9点30分时, 如果MA1大于MA2,且最高价突破上轨,开多 如果MA2大于MA1,且最低价跌破下轨,开空。 这个策略这样写 t1:=time>093000 and time<145000 rh:=ref(hhv(h,15),1); rL:=ref(llv(L,15),1); ma10:=ma(c,10); ma20:=ma(c,20); if t1 and h>rh and ma10>ma20 then begin sellshort(holding<0,0,limitr,rh-0.2); buy(holding=0,1,limitr,rh-0.2); end if t1 and l<rL and ma10<ma20 then begin sell(holding>0,0,limitr,rL+0.2); buyshort(holding=0,1,limitr,rL+0.2); end if time>145000 then begin sell(holding>0,0,limitr,c); sellshort(holding<0,0,limitr,c); end ------------------------------------------ 以上是你要的程序,但是你这是一种自欺欺人的做法,你的交易结果是不可能达到这个程序的测试结果的,也就是说如果怎么干你的实盘结果和你的测试结果就没有任何关系。 那么按你的意思也应该写成这样 t1:=time>093000 and time<145000 rh:=ref(hhv(h,15),1); rL:=ref(llv(L,15),1); ma10:=ma(c,10); ma20:=ma(c,20); if t1 and h>=rh and ma10>ma20 then begin sellshort(holding<0,0,limitr,rh+0.4); buy(holding=0,1,limitr,rh+0.4); end if t1 and l<=rL and ma10<ma20 then begin sell(holding>0,0,limitr,rL-0.4); buyshort(holding=0,1,limitr,rL-0.4); end if time>145000 then begin sell(holding>0,0,limitr,c-0.2); sellshort(holding<0,0,limitr,c+0.2); end ---------------------------------------------------------------- 这样写也有问题,可能会出现没有成交价格的问题所以按你的策略意思应该这样写; t1:=time>093000 and time<145000 rh:=ref(hhv(h,15),1); rL:=ref(llv(L,15),1); ma10:=ma(c,10); ma20:=ma(c,20); if t1 and h>=rh and ma10>ma20 then begin sellshort(holding<0,0,limitr,max(rh,o)+0.4); buy(holding=0,1,limitr,max(rh,o)+0.4); end if t1 and l<=rL and ma10<ma20 then begin sell(holding>0,0,limitr,min(rL,o)-0.4); buyshort(holding=0,1,limitr,min(rL,o)-0.4); end if time>145000 then begin sell(holding>0,0,limitr,c-0.2); sellshort(holding<0,0,limitr,c+0.2); end ------------------------------------------------------- 这样的写法其实还是有问题的,会到致你的测试信号和实盘信号有差别(由于这个程序程序的特例差别不是太大)。也就是说你这个小小的程序还含有未来数据。这个你自己琢磨吧。 |
-- 作者:追逐趋势 -- 发布时间:2014/5/23 22:58:35 -- 这位朋友,非常感谢你的解答! |
-- 作者:追逐趋势 -- 发布时间:2014/5/23 23:25:11 -- variable:n=0; ma1:ma(c,10); ma2:ma(c,20); 多头:ma1>ma2,LINETHICK0; 空头:ma2>ma1,LINETHICK0; 上轨:ref(hhv(h,15),1); 下轨:ref(llv(l,15),1); 开多:h>上轨,LINETHICK0; 开空:l<下轨,LINETHICK0; if 开多 and n=0 and 多头 and TIME>093000 and time<145000 then BEGIN buy( holding=0 ,1,LIMITR,上轨-0.2); n:=n+1; end if 开空 and n=0 and 空头 and TIME>093000 and time<145000 then BEGIN BUYSHORT(holding=0 ,1,LIMITR,下轨-0.2); n:=n+1; end Sell(空头 or time>145000,1,MARKET); sellshort(多头 or time>145000,1,MARKET); if time=CLOSETIME(0) then n:=0; 以上时我修改后的代码, 跟一楼的代码差别是: 把原来BUY和BUYSHORT里的第一个参数,放到BUY外面判断。 在这里我要反映个问题: 为什么我把BUY里面的参数换成HOLDING=0,把变量多头和空头放在BUY外面判断,就可以每天在满足条件下多可以开仓 而原来一楼的代码中的: buy(多头 and 开多 ,1,LIMITR,上轨-0.2); BUYSHORT(空头 and 开空,1,LIMITR,下轨-0.2); 在条件满足的情况下,只有9点31分产生的信号才能开仓,超过了9点31分的却不行? 这是个BUG 呀! 这是不是金字塔的BUG ,还是金字塔中在IF语句里的BUY和BUYSHORT的第一个参数,只能是关于HODING的判断?
|
-- 作者:追逐趋势 -- 发布时间:2014/5/23 23:43:01 -- 我遇到的情况简单讲是这样子的,不知道这个是不是你们的BUG: 当日交易,每天只交易一单: TIME>XX,time<qq 在IF语句里,只要BUY和BUYSHORT的第一个参数不是关于HOLDING的,而是关于其他的, 那么当天就算BUY和BUYSHORT的条件成立时,只要不是在XX+1的时间里成立的, 那么XX+1的时间以后所有条件成立时应该出现的信号和开平仓的地方,金字塔就不会出现信号和并且不会开平仓了。。 会导致在测试时,很多的应该开仓的日子经常却没有开仓。 测试的时候,粗略算了一下,在上面的情况出现时,100天里面,原本100天多应该开仓,而出现了上面的情况就只有20多天有开仓。 只有把在IF语句里的BUY和BUYESHORT的第一个参数,换成关于HOLDING的, 并且把其他条件放在BUY和BUYESHORT外面进行判断后,金字塔才能正常的出现信号和开仓。。 请问这是金字塔在IF语句里对BUY和buyshort的第一个参数故意这样设置的吗?
[此贴子已经被作者于2014/5/23 23:44:45编辑过]
|
-- 作者:qwer123 -- 发布时间:2014/5/24 9:46:53 -- 先不要怀疑平台的bug,这种常用的东西一般不会有问题的。等你把金字塔玩熟了,用到一些偏僻的功能有可能会遇到BUG.你的写法有问题,你1楼的的程序在IF里限制里了holding=0....那么只要有持仓就不会进行任何交易了,按我给你的写法写程序。建议你还是好好从基础开始学起。 |