请看如下代码开不了仓,在图表上也没有箭头显示,但是回测历史正常。测试出来问题出在开仓次数:=1上,如果没有这行代码就可以开仓.
请问是什么原因。
VARIABLE:开仓次数=0;
初始开仓手数:=1;
多单开仓条件:=1;
if holding=0 and 开仓次数=0 THEN
begin
开多: buy(多单开仓条件,初始开仓手数,THISCLOSE);
止损位:=ENTERPRICE-止损跳点*MINDIFF;
开仓次数:=1;
end
你图表上肯定是有的,但是因为在第一个K,所以你可能没注意到。
此主题相关图片如下:temp.png

如果上面这段就是完整代码得话,那么
开仓次数:=1;
这个加不加效果都是一样的。因为代码逻辑决定你这个只会开一次仓。
这个不是完整代码,我一条条的排到这的。我需要根据这个开仓次数做后续判断。
那就是了。
这个全局变量会限制这个地方只开仓一次。你需要在其他地方 比如平仓的时候 执行一个:
开仓次数:=0;
平仓后赋0有写,我现在单独拿出这一小段代码是开不了仓的,把开仓次数注释掉就能开。
你给出完整代码吧。否则我也不知道你这里其他地方什么逻辑。全局变量是很常规的用法,并无特殊之处。
VARIABLE:开仓次数=0;
VARIABLE: 回撤平仓跳点=10;
止损跳点:=20;
加仓间距:=10;
初始开仓手数:=1;
加仓倍数:=1;
加仓次数循环:=3;
空单开仓条件:=1;
//回撤跳点评测1:=(DYNAINFO( 3)*初始开仓手数+DYNAINFO( 3)*加仓间距*加仓倍数*初始开仓手数)/(加仓倍数*初始开仓手数+初始开仓手数);
//回撤跳点评测2:=DYNAINFO( 3)*加仓间距-回撤平仓跳点;
if holding=0 and 开仓次数=0 THEN
begin
开空: buyshort(1,初始开仓手数,MARKETR);
止损:=ENTERPRICE+止损跳点*MINDIFF;
开仓次数:=1;
end
//回撤出:=ENTERPRICE+回撤平仓跳点*MINDIFF;
if holding<0 then
begin
if c>=止损 then begin
sellshort(holding<0,0,MARKETR);
开仓次数:=0;
end
if 开仓次数>1 then
begin
if c>=ENTERPRICE+回撤平仓跳点*MINDIFF then begin
sellshort(holding<0,0,MARKETR);
开仓次数:=0;
end
end
//----------------------------------------------------------------------------
if 0<开仓次数 and 开仓次数>=开仓次数%加仓次数循环 and 开仓次数%加仓次数循环<>0 then
begin
if c<=ENTERPRICE-加仓间距*MINDIFF THEN
begin
开空2:buyshort(1,entervol*加仓倍数,MARKETR);
开仓次数:=开仓次数+1;
end
end
if 0<开仓次数 and 开仓次数%加仓次数循环=0 then
begin
if c<=ENTERPRICE-加仓间距*MINDIFF THEN
begin
开空1:buyshort(1,初始开仓手数,MARKETR);
开仓次数:=开仓次数+1;
end
end
end
有几个地方要明确下:
1.是完整代码 不开仓 还是只那单独的一部分程序化不开仓?
2.单独那部分代码。无论是注释还是保留 赋值为1的那一句代码。效果都是一样,你这里说注释了就开仓 这个现象和代码效果不是一致的。我建议你再确认下。
目前完整代码过了遍,应该不存在大问题。建议明天盘中再观察下再反馈下。