那代码进一步简化下就行了,去掉之前使用的累加手数的全局变量就行了:
[PEL] 复制代码 //客户原始思路:
//以启动程序时候的价格作为基准价:上涨1%以上并回落0.1%则卖出100股;下跌1%以下并反弹0.1%则买入100股;如果连续触发下跌买入,则每次买入比上一次买入的数量加一个单位
INPUT:N1(0.1,0.01,100,0.01),N2(0.01,0.01,100,0.01),ss(1,1,500,1);
GLOBALVARIABLE:base:=-1,maxp:=-1,minp:=-1;
//首次运行 初始化基准价,以程序启动时候的价格作为初始基准价
if base=-1 then
begin
base:=DYNAINFO( 7);
maxp:=DYNAINFO( 7);
minp:=DYNAINFO( 7);
end
if DYNAINFO( 7)>maxp and base<>0 then maxp:=DYNAINFO( 7);
if DYNAINFO( 7)<minp and base<>0 then minp:=DYNAINFO( 7);
//P1,P2:最高点的涨幅,最低点的跌幅
P1:100*(maxp-base)/(base);
P2:100*(base-minp)/minp;
//P3,P4:高点回落幅度,低点上涨的幅度
P3:100*(maxp-DYNAINFO( 7))/(maxp);
P4:100*(DYNAINFO( 7)-minp)/minp;
//有可用持仓时候才能平仓
if P1>N1 and P3>N2 and minp<>0 and maxp <>0 and TBUYHOLDINGEX('','',0)>0 then
begin
//固定手数平仓
tsell(1,ss,mkt);
//平仓后重置最高最低价的记录,同时更新基准价为当时的信号触发价
maxp:=DYNAINFO( 7);
minp:=DYNAINFO( 7);
base:=DYNAINFO( 7);
end
//加仓逻辑
if P2>N1 AND P4>N2 and minp<>0 and maxp<>0 and TBUYHOLDINGEX('','',1)>0 then
begin
//固定手数加仓
tbuy(1,ss,mkt);
//开仓后重置基准价为当时的信号触发价
maxp:=DYNAINFO( 7);
minp:=DYNAINFO( 7);
base:=DYNAINFO( 7);
end
//完全没有持仓时候才能进行初始开仓;初始开仓时候始终按照ss开仓
if P2>N1 AND P4>N2 and minp<>0 and maxp <>0 and TBUYHOLDINGEX('','',2)=0 then
begin
tbuy(1,ss,mkt);
//开仓后重置基准价为当时的信号触发价
maxp:=DYNAINFO( 7);
minp:=DYNAINFO( 7);
base:=DYNAINFO( 7);
end
|