不要在所有公式前写aa:=tholding
直接把tholding判断写入后面所有的条件判断
sjbm
这个是在哪里定义的?
都加个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;
您可以在查看菜单->交易系统模板 中设置自己需要的模板
}
if tholding=0 and islastbar then begin
extgbdataset('dcw',0);
extgbdataset('kcw',0);
end
删了这段就能赋值,具体如何处理明天开盘后我试试
请运行在序列模式下
以下是个范例,比你的还复杂呢,已验证,正常使用,推荐给您看看
用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