我写了一段在固定时间间隔模式下交易情况的测试代码,开仓条件是出阳线后开多仓,反之开空仓,平仓条件是出阴线平多,出阳线平空.可经常会多次开仓,我设了标志限制一根K线一种情况只能操作一次,可还是会多次开仓,请高手帮忙看一下是哪里的问题,代码如下 :
谢谢!
runmode:0;
variable:zs=0,KD=0,KK=0,PD=0,PK1=0,zq=0;
///////止损价//开多标志///开空标志////平多标志///平空标志//周期数
if zq<>TODAYBAR then begin
KD:=0;
KK:=0;
PD:=0;
PK1:=0;
zq:=TODAYBAR;
end
entertime:=time>091500 and time<151500;
开多条件:=ref(c>o,1)AND KD=0 and entertime ;
开空条件:=ref(c<o,1) AND KK=0 and entertime ;
平空条件:=ref(c>o,1) and PK1=0 and entertime ;
平多条件:=ref(c<o,1) and PD=0 and entertime ;
priceD:=ref(c,1)-0.4;
priceK:=ref(c,1)+0.4;
if holding>0 and 平多条件 then BEGIN
多离场: sell(1,1,limitr,priceD),ORDERQUEUE;
PD:=1;
END
if holding<0 and 平空条件 then BEGIN
空离场:sellshort(1,1,limitr,priceK),ORDERQUEUE ;
PK1:=1;
end
if holding=0 and 开多条件 then BEGIN
buy(1,1,limitr,priceK),ORDERQUEUE;
zs:=priceK-3;
KD:=1;
end
if holding=0 and 开空条件 then BEGIN
buyshort(1,1,limitr,priceD),ORDERQUEUE;
zs:=priceD+3;
KK:=1;
end
多止损条件 := l<zs and entertime ;
空止损条件:= h>zs and entertime ;
if 多止损条件 and holding>0 then begin
多止损:sell(1,1,limitr,zs-0.2),ORDERQUEUE;
cc:=0;
end
if 空止损条件 and holding<0 then begin
空止损:sellshort(1,1,limitr,zs+0.2),ORDERQUEUE;
end
if time>=151400 then begin
收盘空离场:sellshort(1,1,limitr,MARKET+0.4),ORDERQUEUE ;
收盘多离场: sell(1,1,limitr,MARKET-0.4),ORDERQUEUE;
end
如果需要一根k开一次仓,那么就用全局变量来记录
vairable:n=0;
if 开多 and n=0 then begin
buy;
n:=1;
end
if 开空 and n=0 then begin
buyshort;
n:=1;
end
我是这样做的,可还是多次开仓,为什么?
一些代码不是很能理解你的意图
if zq<>TODAYBAR then begin
KD:=0;
KK:=0;
PD:=0;
PK1:=0;
zq:=TODAYBAR;
end
你用H L等控制避免信号闪烁了。金字塔默认一根K线只能开多、开空、平多、平空各一次。除非用后台的allowrepeat功能打开。
这段代码感觉没意义。
你指的多次开仓又是何意义,指图表信号,还是模拟?在什么周期上运行?不讲清楚,没法帮助你。
你的止损代码有些问题,有可能造成止损条件在开多后,马上就成立,即L<ZS在你开仓前就成立了,开完仓马上又平仓了.
我不清楚同时你是不是又勾选了自动持仓同步,造成的混乱。
从逻辑上讲,我们建议用户定义清楚各种情况,那种1根K线上即开多,又平多的情况要尽量避免。