以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 全局变量无法取得正确值 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=55537) |
-- 作者:lcgs005 -- 发布时间:2013/8/22 10:13:30 -- 全局变量无法取得正确值 下面的公式,是金叉时开多单,死叉时开空单,希望开仓后用全局变量记住开仓的周期,若仓位自动平或手动平仓后全局变量置为0,用下面的公式全局变量始终显示为0,不知是什么原因 DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26); DEA:=EMA(DIFF,9); MACD:=2*(DIFF-DEA); mszt:=macd>=ref(macd,1); dezt:=diff>=dea; jc:=cross(diff,dea); sc:=cross(dea,diff); aa:=tholding; //多周期的开多与止损 kd:=aa=0 and jc; if kd then BEGIN tbuy(1,1,mkt); extgbdataset(\'dcw\',1); end //平空与止损-若本级别仓位未被其它周期平掉则本周期仓位由本级别止损 dzs:=aa>0 and extgbdata(\'dcw\')=1 and dezt=0; if dzs then begin tsell(1,0,mkt); extgbdataset(\'dcw\',0); end //开空部份 kk:=aa=0 and sjbm=0 and sc; if kk then begin tbuyshort(1,1,mkt); extgbdataset(\'kcw\',-1); end //平空与止损 kzs:=aa<0 and extgbdata(\'kcw\')=-1 and dezt; if kzs then BEGIN tsellshort(1,0,mkt); extgbdataset(\'kcw\',0); end //本级别仓位无论手动自动平仓后均将本级别全局变量置为0 if aa=0 then begin extgbdataset(\'dcw\',0); extgbdataset(\'kcw\',0); end |
-- 作者:jinzhe -- 发布时间:2013/8/22 10:16:34 -- 不要在所有公式前写aa:=tholding 直接把tholding判断写入后面所有的条件判断 |
-- 作者:lcgs005 -- 发布时间:2013/8/22 10:53:48 -- 按你的指导改为这样了,全局变量仍然一直为0,开仓后并不变化,拜托看下其它有没有问题 DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26); DEA:=EMA(DIFF,9); MACD:=2*(DIFF-DEA); mszt:=macd>=ref(macd,1); dezt:=diff>=dea; jc:=cross(diff,dea); sc:=cross(dea,diff); //多周期的开多与止损 kd:=tholding=0 and jc; if kd then BEGIN tbuy(1,1,mkt); extgbdataset(\'dcw\',1); end //平空与止损-若本级别仓位未被其它周期平掉则本周期仓位由本级别止损 dzs:=tholding>0 and extgbdata(\'dcw\')=1 and dezt=0; if dzs then begin tsell(1,0,mkt); extgbdataset(\'dcw\',0); end //开空部份 kk:=tholding=0 and sjbm=0 and sc; if kk then begin tbuyshort(1,1,mkt); extgbdataset(\'kcw\',-1); end //平空与止损 kzs:=tholding<0 and extgbdata(\'kcw\')=-1 and dezt; if kzs then BEGIN tsellshort(1,0,mkt); extgbdataset(\'kcw\',0); end //本级别仓位无论手动自动平仓后均将本级别全局变量置为0 if tholding=0 then begin extgbdataset(\'dcw\',0); extgbdataset(\'kcw\',0); end |
-- 作者:jinzhe -- 发布时间:2013/8/22 11:03:05 -- sjbm 这个是在哪里定义的? |
-- 作者:lcgs005 -- 发布时间:2013/8/22 11:15:11 -- sjb=0这个去掉吧,可能之前的没清除掉 现在用的这个: DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26); DEA:=EMA(DIFF,9); MACD:=2*(DIFF-DEA); mszt:=macd>=ref(macd,1); dezt:=diff>=dea; jc:=cross(diff,dea); sc:=cross(dea,diff); //多周期的开多与止损 kd:=tholding=0 and jc; if kd then BEGIN tbuy(1,1,mkt); extgbdataset(\'dcw\',1); end //平空与止损-若本级别仓位未被其它周期平掉则本周期仓位由本级别止损 dzs:=tholding>0 and extgbdata(\'dcw\')=1 and dezt=0; if dzs then begin tsell(1,0,mkt); extgbdataset(\'dcw\',0); end //开空部份 kk:=tholding=0 and sc; if kk then begin tbuyshort(1,1,mkt); extgbdataset(\'kcw\',-1); end //平空与止损 kzs:=tholding<0 and extgbdata(\'kcw\')=-1 and dezt; if kzs then BEGIN tsellshort(1,0,mkt); extgbdataset(\'kcw\',0); end //本级别仓位无论手动自动平仓后均将本级别全局变量置为0 if tholding=0 then begin extgbdataset(\'dcw\',0); extgbdataset(\'kcw\',0); end [此贴子已经被作者于2013/8/22 11:15:35编辑过]
|
-- 作者:jinzhe -- 发布时间:2013/8/22 13:30:42 -- 都加个ISLASTBAR试试,下面是添加之后的代码
WARNING_DISABLE:4; if tholding=0 and jc and islastbar then BEGIN if tholding=0 and islastbar then begin
} 持仓:holding,linethick0; 您可以在查看菜单->交易系统模板 中设置自己需要的模板 |
-- 作者:lcgs005 -- 发布时间:2013/8/22 14:43:55 -- 加了islastbar仍然是0, |
-- 作者:jinzhe -- 发布时间:2013/8/22 15:23:56 -- if tholding=0 and islastbar then begin
删了这段就能赋值,具体如何处理明天开盘后我试试 |
-- 作者:fly -- 发布时间:2013/8/22 15:27:45 -- 请运行在序列模式下 |
-- 作者:fly -- 发布时间:2013/8/22 15:37:31 -- 以下是个范例,比你的还复杂呢,已验证,正常使用,推荐给您看看
用BARPOS和全局变量结合起来,控制是否开仓。 //序列模式运行 //t1_flag 0表示没有仓位,1表示持有多头,-1表示持有空头 //bar控制一根K线只能有一次开平仓
runmode:1; ss:=1; //手数 maa:ema(c,5); buycond:=h>maa; sellcond:=l<maa; //平多 if extgbdata(\'t1_flag\')>0 and sellcond and barpos>extgbdata(\'bar\') then begin tsell(1,ss,mkt); extgbdataset(\'t1_flag\',0); end //平空 if extgbdata(\'t1_flag\')<0 and buycond and barpos>extgbdata(\'bar\') then begin tsellshort(1,ss,mkt); extgbdataset(\'t1_flag\',0); end //开多 if extgbdata(\'t1_flag\')=0 and buycond then begin tbuy(1,ss,mkt); extgbdataset(\'t1_flag\',1); extgbdataset(\'bar\',barpos); end //开空 if extgbdata(\'t1_flag\')=0 and sellcond then begin tbuyshort(1,ss,mkt); extgbdataset(\'t1_flag\',-1); extgbdataset(\'bar\',barpos); end 全局变量使用注意事项: 策略运行过程中,手动平仓进行干预,请到"工具--数据--全局变量"里,将对应的全局变量清0,否则会引起开平仓混乱 论坛帖子http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=48919 |