等级: 免费版
- 注册:
- 2023-8-24
- 曾用名:
|
//全局变量
variable:num:=0; // 全局变量,来控制同条件加仓次数
variable:gsumr=0; //gsum红柱总和
variable:glongr=0; //glong最长红柱
variable:ghighr=0; //glow红柱区域最高价
cs:=3; //限定最多加仓3次
//macd背离
//中间变量
//MACD指标
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA := EMA(DIFF,9);
MACD := 2*(DIFF-DEA);
gnum:=barslast(ref(macd>0,1) and macd<0); //红转绿
bnum:=barslast(ref(macd<0,1) and macd>0); //绿转红
jc:cross(diff,dea),NODRAW;
sc:cross(dea,diff),NODRAW;
if ref(macd,1)<0 and macd>0 then
begin
gsumr:=0; //红柱开始,清0
glongr:=0; //红柱开始,清0
ghighr:=high; //红柱开始,初始化
end
if macd>0 then
begin
gsumr:=gsumr+macd; //累加
if abs(macd)>abs(glongr) then glongr:=macd; //如果红柱更长,则记录
if high>ghighr then ghighr:=high; //如果价格更高,则记录
end
numb:=max(gnum,bnum)+1; //两次红柱/绿柱之间间隔
//交易条件
con1:=abs(gsumr)<abs(ref(gsumr,numb)); //面积小于前一波--面积没创新高
con2:=abs(glongr)<abs(ref(glongr,numb)); //柱子长度小于前一波----长度没创新高
con3:=ghighr>ref(ghighr,numb); //价格大于前一波-----价格创新高
con11:=abs(gsumr)<abs(ref(gsumr,numb)); //面积小于前一波--面积没创新高
con22:=abs(glongr)<abs(ref(glongr,numb)); //柱子长度小于前一波----长度没创新高
con33:=ghighr>ref(ghighr,numb); //价格大于前一波-----价格创新高
if pd and holding>0 then
begin
sell(1,holding,market); //平多仓
num:=0;
end
if pk and holding<0 then
begin
SELLSHORT(1,holding,market); //平空仓
num:=0;
end
//加仓**********************************************************//and FILTER(kj1,N)
//当红柱开始收缩时(牛市即将结束,可能反转向下(或高位盘整)),如果出现顶背离,则少量建仓
//kj1:aa>bb and all(macd>0,3) and ref(macd,1)>macd and ref(macd,1)>ref(macd,2) and con1 and con2 and con3;
//kj2:aa>bb and ref(macd>0,1) and macd<0 and con1 and con2 and con3;
if aa>bb and all(macd>0,3) and ref(macd,1)>macd and ref(macd,1)>ref(macd,2) then
begin
if con1 and con2 and con3 and num<cs and ENTERBARS>20 and num<cs and HOLDING<0 then 空加1:buyshort(1,1,market);//顶背离,面积没创新高,长度没创新高,价格创新高
num:=num+1;
end
//
//红柱消失、绿柱开始放出时(上涨行情(或高位盘整)已经结束),如果出现顶背离,则加仓
if ref(macd>0,1) and macd<0 then
begin
if con1 and con2 and con3 and ENTERBARS>20 and num<cs and HOLDING<0 then 空加2:buyshort(1,1,market);//低背离,面积没创新低,长度没创新低,价格创新低
num:=num+1;
end
if pk and holding<0 then num:=cs;
//开仓放在加平仓后面**************************************************************************
if kd and holding=0 then buy(1,ss,market); //首次开多仓
if kk and holding=0 then BUYSHORT(1,ss,market); //首次开空仓
老师好,这个加了加仓限制条件,结果是没有加仓信号了,麻烦老师帮我看看哪里出现问题了,能直接在上面改下吗?多谢老师
|
|