这里是一个测试范例,仅仅用来测试逻辑的,我本地运行了一天,暂时没看到太多问题。
你设置一个多秒,然后走完K下单的,单品种测试也看看。
[PEL] 复制代码 INPUT:cw(1,1,100,1);
GLOBALVARIABLE:kc:=0;//表示开仓百分比。所有开仓手数 请用kc% 替换,来实现开仓量的控制
GLOBALVARIABLE:mark:=0;
if kc=0 then kc:=cw;
//这里不区分是平多的盈亏 还是平空的盈亏
//利用TNUMPROFIT函数获取后台运行记录里的盈亏记录数据 来判断连亏或连赢的情况
2lk:TNUMPROFIT(1)<0 and TNUMPROFIT(2)<0;
2ly:TNUMPROFIT(1)>0 and TNUMPROFIT(2)>0;
3ly:TNUMPROFIT(1)>0 and TNUMPROFIT(2)>0 and TNUMPROFIT(3)>0;
4lk:TNUMPROFIT(1)<0 and TNUMPROFIT(2)<0 and TNUMPROFIT(3)<0 and TNUMPROFIT(4)<0;
5lk:TNUMPROFIT(1)<0 and TNUMPROFIT(2)<0 and TNUMPROFIT(3)<0 and TNUMPROFIT(4)<0 and TNUMPROFIT(5)<0 ;
// 暂以多头为例
//3-2-3
if 2lk and TNUMPROFIT(3)>0 and TBUYHOLDINGEX('','',2)=0 and kc=2*cw then
begin
kc:=3*cw;
end
//1-2
if 2lk and TBUYHOLDINGEX('','',2)=0 and kc=cw then
begin
kc:=2*cw;
end
//2-3
if 4lk and TBUYHOLDINGEX('','',2)=0 and kc=2*cw then
begin
kc:=3*cw;
end
//2-1
if TNUMPROFIT(1)>0 and TNUMPROFIT(2)<0 and TNUMPROFIT(3)<0 and TBUYHOLDINGEX('','',2)=0 and kc=2*cw then
begin
kc:=cw;
end
//3-2
if TNUMPROFIT(1)>0 and TBUYHOLDINGEX('','',2)=0 and kc=3*cw then
begin
kc:=2*cw;
end
//3-2-1
if 2ly and TBUYHOLDINGEX('','',2)=0 and kc=2*cw then
begin
kc:=cw;
end
//4连亏之后
if 5lk then mark:=1;//5连亏后标记下
//3-2
if mark=1 and 2ly and kc=3*cw then
begin
kc:=2*cw;
end
//3-2-1
if 3ly and kc=2*cw and mark then
begin
kc:=1*cw;
end
//3-2-3
if 2lk and kc=2*cw and mark then
begin
kc:=3*cw;
mark:=0;
end
//暂时用固定手数便于理解,原始仓位1手,仓位总递增次数不超过2次。
//一:连续亏损2笔,仓位递增1次,此时2手,若盈利1次,仓位恢复至1手;
//二:若未有盈利,连续亏损4笔,仓位再次递增至3手,①若盈利第一笔,仓位递减一次至2手,②若连续盈利2笔仓位恢复至1手,③若递减一次后,再次出现连亏大于等于2笔,仓位再次递增至3手,则继续以①②处理,直至仓位恢复至1手;(若递减后出现盈亏交替,仓位维持当下)
//三:若连续亏损大于4笔(此情况也可能出现在第二点③中),仓位仍保持3手,①若连续盈利2笔仓位递减1次至2手,②若连续盈利3笔仓位恢复至1手,③若递减一次后,再次出现连亏大于等于2笔,仓位再次递增至3手,以第二点连亏4笔处理,直至仓位恢复至1手。(若递减后出现盈亏交替,仓位维持当下)
kd:MOD(TODAYBAR,1)=0;
pd:MOD(TODAYBAR,3)=0;
tbuy(kd and TBUYHOLDINGEX('','',2)=0,kc,mkt);
tsell(pd and TBUYHOLDINGEX('','',1)>0,0,mkt);
|