Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共26 条记录, 每页显示 10 条, 页签: [1] [2][3]
[浏览完整版]

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

1楼
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
2楼
jinzhe 发表于:2013/8/22 10:16:34

不要在所有公式前写aa:=tholding

直接把tholding判断写入后面所有的条件判断

3楼
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

4楼
jinzhe 发表于:2013/8/22 11:03:05

sjbm

这个是在哪里定义的?

5楼
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编辑过]
6楼
jinzhe 发表于:2013/8/22 13:30:42

都加个ISLASTBAR试试,下面是添加之后的代码

 

 

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 tholding=0  and jc  and islastbar then BEGIN
tbuy(1,1,mkt);
extgbdataset('dcw',1);
end
//平空与止损-若本级别仓位未被其它周期平掉则本周期仓位由本级别止损
dzs:=tholding>0 and extgbdata('dcw')=1 and  dezt=0;
if dzs  and islastbar then begin
tsell(1,0,mkt);
extgbdataset('dcw',0);
end
//开空部份
kk:=tholding=0  and sc;
if kk and islastbar then begin
tbuyshort(1,1,mkt);
extgbdataset('kcw',-1);
end
//平空与止损
kzs:=tholding<0 and extgbdata('kcw')=-1  and dezt;
if kzs and islastbar  then BEGIN
tsellshort(1,0,mkt);
extgbdataset('kcw',0);
end
//本级别仓位无论手动自动平仓后均将本级别全局变量置为0

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

 


{
KD:=;          //开多条件
PD:=;          //平多条件
KK:=;          //开空条件
PK:=;          //平空条件


平空:SELLSHORT(PK,1,THISCLOSE);                  //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE);          //开多信号
平多:SELL(PD,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE);     //开空信号

}
{
信号语句排列规则——先平后开
“费率设置”按钮——用于合理设置模型“费率”,以便在图形上正确输出如下帐户信息:

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;

您可以在查看菜单->交易系统模板 中设置自己需要的模板
}

7楼
lcgs005 发表于:2013/8/22 14:43:55
加了islastbar仍然是0,

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

8楼
jinzhe 发表于:2013/8/22 15:23:56

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

 

 

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

9楼
fly 发表于:2013/8/22 15:27:45

请运行在序列模式下

10楼
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

共26 条记录, 每页显示 10 条, 页签: [1] [2][3]


Powered By Dvbbs Version 8.3.0
Processed in 0.05078 s, 3 queries.