欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 全局变量无法取得正确值

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有5797人关注过本帖树形打印复制链接

主题:全局变量无法取得正确值

帅哥,在线噢!
lcgs005
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
全局变量无法取得正确值  发帖心情 Post By:2013/8/22 10:13:30    Post IP:119.86.185.24[显示全部帖子]

下面的公式,是金叉时开多单,死叉时开空单,希望开仓后用全局变量记住开仓的周期,若仓位自动平或手动平仓后全局变量置为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

 回到顶部
帅哥,在线噢!
lcgs005
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/22 10:53:48    Post IP:119.86.185.24[显示全部帖子]

按你的指导改为这样了,全局变量仍然一直为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


 回到顶部
帅哥,在线噢!
lcgs005
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/22 11:15:11    Post IP:119.86.185.24[显示全部帖子]

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编辑过]

 回到顶部
帅哥,在线噢!
lcgs005
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/22 14:43:55    Post IP:119.86.185.24[显示全部帖子]

加了islastbar仍然是0,

图片点击可在新窗口打开查看此主题相关图片如下:00.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
lcgs005
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/22 15:55:08    Post IP:119.86.185.24[显示全部帖子]

以下是引用fly在2013/8/22 15:27:45的发言:

请运行在序列模式下

谢谢fly,后台程序运行在序列模式下肯定是不准确的, 另外,建议就我求助的程序段指导,对于新手来说,一个已经很难了,根本没学透,这个时候想要举一反三基本不可能啊

 回到顶部
帅哥,在线噢!
lcgs005
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/22 15:58:27    Post IP:119.86.185.24[显示全部帖子]

以下是引用jinzhe在2013/8/22 15:23:56的发言:

if tholding=0 and islastbar then begin
extgbdataset('dcw',0);
extgbdataset('kcw',0);
end

 

 

删了这段就能赋值,具体如何处理明天开盘后我试试

谢谢你再三指导,拜托明天再帮我试下, 
金字塔客服如果都能像你这样立足于帮助用户彻底地解决问题,我想它的强大是指日可待的,再次深表谢意

 回到顶部
帅哥,在线噢!
lcgs005
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/23 9:39:16    Post IP:119.86.189.136[显示全部帖子]

如果去掉尾部那段,在多周期里,其值就完全混乱了,在没有开仓的周期,其值也为1

 回到顶部
帅哥,在线噢!
lcgs005
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/23 9:48:06    Post IP:119.86.189.136[显示全部帖子]

多周期是指,这段代码,我在1分钟,5分钟,30分钟等周期里同时使用
每个周期使用不同的全局变量,某个周期开仓后,赋一个值给这个周期的全局变量,用以记住这个开仓的周期

 回到顶部
帅哥,在线噢!
lcgs005
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/23 9:56:45    Post IP:119.86.189.136[显示全部帖子]

好,我马上改一下

 回到顶部
帅哥,在线噢!
lcgs005
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:649 积分:1359 威望:0 精华:0 注册:2009/10/24 1:57:01
  发帖心情 Post By:2013/8/23 10:24:15    Post IP:119.86.189.136[显示全部帖子]

修改后代码如下,还是不行
WARNING_DISABLE:4;
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);

//多周期的开多与止损
if tbuyholdingex('','',1)=0  and jc  and islastbar then BEGIN
tbuy(1,1,mkt);
extgbdataset('dcw',1); 
end
//平空与止损-若本级别仓位未被其它周期平掉则本周期仓位由本级别止损
dzs:=tbuyholdingex('','',1)>0 and extgbdata('dcw')=1 and  dezt=0;
if dzs  and islastbar then begin
tsell(1,0,mkt);
extgbdataset('dcw',0); 
end
//开空部份
kk:=tsellholdingex('','',1)=0  and sc;
if kk and islastbar then begin
tbuyshort(1,1,mkt);
extgbdataset('kcw',-1); 
end
//平空与止损
kzs:=tsellholdingex('','',1)>0 and extgbdata('kcw')=-1  and dezt;
if kzs and islastbar  then BEGIN
tsellshort(1,0,mkt);
extgbdataset('kcw',0); 
end

//本级别仓位无论手动自动平仓后均将本级别全局变量置为0
if tbuyholdingex('','',1)=0 then extgbdataset('dcw1',0); 
if tsellholdingex('','',1)=0 then extgbdataset('kcw1',0); 

 回到顶部
总数 16 1 2 下一页