print问题
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)); } }