本帖最后由 技术009 于 2021-9-18 10:20 编辑
[PEL] 复制代码 INPUT:T(3,1,200,1),DIF(0.005,0.001,100,1),SS(1000,1,100000,1);//T为高低价统计的时间,默认为开盘前三分钟;DIF为价差参数,默认为0.005;SS是手数参数
GLOBALVARIABLE:levelb:=-1,levels:=-1;//超全局变量用来记录最近一次 买和卖 时候的档位。
//开盘三分钟的最高最低价
H1:VALUEWHEN(TODAYBAR=T,HHV(H,TODAYBAR));
L1:VALUEWHEN(TODAYBAR=T,LLV(L,TODAYBAR));
if TODAYBAR=1 then //开盘初始化一次
begin
levelb:=-1;
levels:=-1;
end
level1:=FLOOR((H1-c)/DIF);//当前价格从最高点回落的 档位
level2:=FLOOR((c-l1)/DIF);//当前价格从最低点上涨的 档位
if levelb=-1 then levelb:=max(1,level1);
if levels=-1 then levels:=max(1,level2);
upprice:=H1-(max(levelb,level1))*DIF;//跌破这个价格买入,每次买后,levelb升一档。考虑到价格可能不连续变化,实际取(上次记录的档位,当前实际档位)最大值计算价格
dnprice:=L1+(max(levels,level2))*DIF;//突破这个价格卖出,每次卖后,levels升一档。
买:=c<=upprice and levelb>=0 ;
卖:=c>=dnprice and TBUYHOLDINGEX('','',1)>0 and levels>=0;
if 卖 and TODAYBAR>T then //开盘三分钟后才允许交易
begin
tsell(1,SS,mkt);
levels:=level2+1;
end
if 买 and TODAYBAR>T then
begin
tbuy(1,SS,mkt);
levelb:=level1+1;
end
还需要最后测试几波,节后再测试吧。
上面代码逻辑就是开盘T分钟后,开始交易。按照T分钟最高最低价作为上下轨。最新价跌破上轨一个DIF(0.005)买入1000股,突破最低价一个DIF(0.005)卖出1000股。代码里是按照0.005的间距 从最低和最高价给当前价格划分档位,只有突破最近一次交易时候的档位或者当前最新价格档位(2者取其大,因为存在价格突然大幅度变化的情况) 才能下单,比如最近一次买入时候是1挡,下次必须突破到2挡才能下单,每次下单后更新记录的档位。另外2次下单价格价差可能不是刚好0.005,但是必然是2个档位上,通常来说除非是价格突然跳动了很大幅度,正常情况下2次下单价差都会在0.005上下左右,不会差太多。 |