代码片段如下,逐K线运行,目的是提前2秒进场,但如果进场后不再满足进场条件,不让信号消失
以下内容为程序代码:
1 if ref(date,1)<>date then begin
2 extgbdataset('ex03',0); //开盘第一分钟,将做多次数记为0
3 extgbdataset('ex04',0); //开盘第一分钟,将做空次数记为0
4 end
5
6 if barpos>30 then begin
7 if 做多条件 then bb:=1;
8 if 做空条件 then ss:=1;
9 end
10
11 sec:=dynainfo(207);
12 secfilter:=mod(sec,100)>=secEntry; //如果秒数到达58(即提前2秒下单)
13
14 if secfilter and islastbar then begin
15 if ceiling(sec/100.0)*100=EXTGBDATA('ex01') then begin //如果当前时间是最后一次进场时间
16 if EXTGBDATA('ex02')=1 then buy(1,1,thisclose);
17 if EXTGBDATA('ex02')=-1 then buyshort(1,1,thisclose);
18 end
19 else if ss=1 and holding=0 and EXTGBDATA('ex04')<2 then begin //满足做空条件,且当天做空次数<2
20 buyshort(1,units,limitr,close-4*mindiff),IGNORECHECKPRICE;
21 extgbdataset('ex01',ceiling(sec/100.0)*100); //记录(最后一次)进场时间
22 extgbdataset('ex02',-1); //记录进场方向为做空
23 trades2:=EXTGBDATA('ex04')+1;
24 extgbdataset('ex04',trades2); //做空次数+1
25 end
26 else if bb=1 and holding=0 and EXTGBDATA('ex03')<2 then begin //满足做多条件,且当天做多次数<2
27 buy(1,units,limitr,close+4*mindiff),IGNORECHECKPRICE;
28 extgbdataset('ex01',ceiling(sec/100.0)*100); //记录(最后一次)进场时间
29 extgbdataset('ex02',1); //记录进场方向为做多
30 trades1:=EXTGBDATA('ex03')+1;
31 extgbdataset('ex03',trades1); //做多次数+1
32 end
33 end
34
35 if (time=EXTGBDATA('ex01') and date=currentdate and not(islastbar)) then begin //如果不是最后一跟bar,且是最后一次进场时间,显示进场
36 if EXTGBDATA('ex02')=1 then begin
37 buy(1,units,thisclose);
38 end
39 if EXTGBDATA('ex02')=-1 then begin
40 buyshort(1,units,thisclose);
41 end
42 end
43
44 bb:=0;
45 ss:=0;
实盘运行时,(图表交易,固定轮询-高频)在10:04有做空信号,查看工具-数据-全局变量,EX01=100400,正确,EX02=-1,正确,但EX04=0,应该等于1,请版主帮忙看下红色语句
红色语句看起来没问题.
23 trades2:=EXTGBDATA('ex04')+1;
24 extgbdataset('ex04',trades2); //做空次数+1
将这两句并为1句:extgbdataset('ex04',EXTGBDATA('ex04')+1);
重点跟踪一下全局变量ex04在语句执行前后的值
你第一句 就把 ex04 就赋值为 0 了。 而且这个是每次都执行的。