Params
Numeric Length1(5);// 短期指数平均线参数
Numeric Length2(20);// 长期指数平均线参数
Vars
Series<Numeric> MA1;
Series<Numeric> MA2;
Series<Numeric> ATR(0);
Numeric Minpoint;
Numeric NewLots;
Events
OnBar(ArrayRef<Integer> indexs)
{
Minpoint=Minmove*PriceScale;
MA1 = Average(Close,Length1);
Ma2 = Average(Close,Length2);
atr=AvgTrueRange(Length2);
NewLots=max(IntPart(1000/(atr[1]*ContractUnit*BigPointValue)),1);
//系统入场
If(MarketPosition <1 && MA1[1] > MA2[1] && MA1[2]<MA2[2])
{
Buy(NewLots,Open);
Print(Buy!+Text(MarketPosition)+,MA1-1:+Text(MA1[1])+,MA1-2:+Text(MA1[2])+,MA2-1:+Text(MA2[1])+,MA2-2:+Text(MA2[2])+,+Text(Date)+Text(Time));
}
//系统出场
If(MarketPosition >-1 && MA1[1] < MA2[1] && MA1[2]>MA2[2])
{
SellShort(NewLots,Open);
Print(Sell!+Text(MarketPosition)+,MA1-1:+Text(MA1[1])+,MA1-2:+Text(MA1[2])+,MA2-1:+Text(MA2[1])+,MA2-2:+Text(MA2[2])+,+Text(Date)+Text(Time));
}
print函数,取历史数据只打印一次,实时行情推送在触发那一刻打印好多次,不知道什么原因
}
实时每次tick程序都会执行一次
恺明老师,我的理解是不是marketpositon是个时序类型,onbar驱动的时候,tick每次执行,调用的还是前一根bar值的marketpositon;下面是我做的改变,引入全局变量,是不是就ok了?
Params
Numeric Length1(5);// 短期指数平均线参数
Numeric Length2(20);// 长期指数平均线参数
Vars
Series<Numeric> MA1;
Series<Numeric> MA2;
Series<Numeric> ATR(0);
Numeric Minpoint;
Numeric NewLots;
Global Numeric NumPositon(0);
Events
OnBar(ArrayRef<Integer> indexs)
{
Minpoint=Minmove*PriceScale;
MA1 = Average(Close,Length1);
Ma2 = Average(Close,Length2);
atr=AvgTrueRange(Length2);
NewLots=max(IntPart(1000/(atr[1]*ContractUnit*BigPointValue)),1);
//系统入场
//NumPositon=MarketPosition;
If(NumPositon <1 && MA1[1] > MA2[1] && MA1[2]<MA2[2])
{
Buy(NewLots,Open);
NumPositon=1;
Print(\"Buy!\"+Text(NumPositon)+\",MA1-1:\"+Text(MA1[1])+\",MA1-2:\"+Text(MA1[2])+\",MA2-1:\"+Text(MA2[1])+\",MA2-2:\"+Text(MA2[2])+\",\"+Text(Date)+Text(Time));
}
//系统出场
If(NumPositon >-1 && MA1[1] < MA2[1] && MA1[2]>MA2[2])
{
SellShort(NewLots,Open);
NumPositon=-1;
Print(\"Sell!\"+Text(NumPositon)+\",MA1-1:\"+Text(MA1[1])+\",MA1-2:\"+Text(MA1[2])+\",MA2-1:\"+Text(MA2[1])+\",MA2-2:\"+Text(MA2[2])+\",\"+Text(Date)+Text(Time));
}
}