//周期引用
TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR : MA(TR,26),COLORYELLOW;
//在IF、IC、IH上回测,3.102
#IMPORT[MIN,15,ZZ01] AS VAR
ATR:VAR.ATR;
ATR1:REF(ATR,DAYBARPOS); //跨周期引用15分钟的ATR
NN:=BARSLAST(DATE<>REF(DATE,1))+1;
KK5:REF(MA(C,5),NN-5);//开盘5分钟均价
KK20:=REF(HHV(H,20),NN-20);//十分钟最高点
O1:=REF(O,DAYBARPOS-1);//今日开盘价
H1:=HHV(H,DAYBARPOS);//今日最高价
L1:=LLV(L,DAYBARPOS);//今日最低价
O2:=REF(O1,DAYBARPOS);//昨日开盘价
C2:=REF(CLOSE,DAYBARPOS);//昨日收盘价
H2:=REF(H1,DAYBARPOS);//昨日最高价
L2:=REF(L1,DAYBARPOS);//昨日最低价
LL2:=MIN(O2,C2);//开盘价与收盘价中最低价
HH2:=MAX(O2,C2);//开盘价与收盘价中最高价
MA10:MA(C,10);
AA:(H2-L2)/O1>0.011 AND C2<O2 AND (HH2-LL2)/(H2-L2)>0.11 AND MA10<KK20;
M1:1+0.01*M;
//开仓方式1
IF TIME>=1000 AND TIME<=1130 THEN BEGIN
COUNT(BARSSK=1,DAYBARPOS)<1 AND AA AND MA(C,5)<HH2,SK;
TRADE_OTHER('AUTO');
END
(KK5-L1)<ATR1 AND DAYBARPOS>30,BP;//开盘90分钟判断,未跌破ATR止损出局
C>SKPRICE+20,BP;
CLOSEMINUTE<=2,BP;
CLOSEMINUTE<=2,SP;
AUTOFILTER;
您1楼思路很简单,用wh8就可以直接实现,为什么非要转用MQ呢
wh8就是为您这样的个人程序化用户设计的,麦语言编写简单易懂,自己就可以编写契合自己思路的模型
而MQ适合有专业编程团队的机构用户使用,相应的语言也更复杂,没有编程基础的话学习难度很大
所以如果您没有别的特别需求,建议继续使用wh8软件,更适合您
您1楼模型,部分代码写法不正确,改写同时给改正了(见注释部分),改写参考,
Params
Numeric Length(26);
Vars
Numeric TR;
Numeric ATR;
Numeric ATR1;
Numeric N;
Begin
TR = TrueRange;
ATR = Ma(TR, Length);//求Length个周期内的TR的简单移动平均
N=BarsLast(Date<>Ref(Date,1))+1;
ATR1 = Ref(ATR, N);
PlotNumeric("TR",TR);
PlotNumeric("ATR",ATR);
PlotNumeric("ATR1",ATR1);
End
以上指标请保存并命名为 ZZ01
跨周期主模型:
Vars
Numeric ATR1;
Numeric NN;
Numeric N1;
Numeric MA5;
Numeric KK5;
Numeric N2;
Numeric HH;
Numeric KK20;
Numeric O1;
Numeric H1;
Numeric L1;
Numeric O2;
Numeric C2;
Numeric H2;
Numeric L2;
Numeric LL2;
Numeric HH2;
Numeric MA10;
Numeric AA;
Setting
Trade_Other:Auto;
ImPort
#ImPort [Min,15,ZZ01] As Var1
Begin
ATR1=Var1.ATR1; //这里您是想引用昨天的ATR,需要在被引用指标里重新定义昨天的再引用
NN=BarsLast(Date<>Ref(Date,1))+1;
N1=IIF(NN<=5,NN,InvalidNumeric);
MA5=Ma(Close,N1);
KK5=ValueWhen(NN==5,MA5); //这里您想求开盘5分钟均价吧,这样改下,以加载1分钟K线为例,开盘5分钟内均线返回值见前面1行MA5指标
N2=IIF(NN<=10,NN,InvalidNumeric);
HH=HHV(High,N2);
KK20=ValueWhen(NN==10,HH);//这里是想求开盘十分钟的最高点吧,方法同上
O1=ValueWhen(NN==1,Open);//今日开盘价
H1=HHV(High,NN);//今日最高价
L1=LLV(Low,NN);//今日最低价
O2=Ref(O1,NN);//昨日开盘价
C2=Ref(Close,NN);//昨日收盘价
H2=Ref(H1,NN);//昨日最高价
L2=Ref(L1,NN);//昨日最低价
LL2=Min(O2,C2);//开盘价与收盘价中最低价
HH2=Max(O2,C2);//开盘价与收盘价中最高价
MA10=Ma(Close,10);
AA=(H2-L2)/O1>0.011 && C2<O2 && (HH2-LL2)/(H2-L2)>0.11 && MA10<KK20;
If(Time>=1000 && Time<=1130 && Count(BarsSellShort==1,NN)<1 && AA && Ma(Close,5)<HH2)
{
SellShort;
}
If((KK5-L1) < ATR1 && NN>30)//开盘90分钟判断,未跌破ATR止损出局
{
BuyToCover;
}
If(Close > SKPrice + 20)
{
BuyToCover;
}
If(CloseMinute<=2)
{
BuyToCover;
}
End