请教一个代码问题,要有持仓开始,输出的穿越次数的值,但还没持仓就输出值了,谢谢
Params Numeric FastLength(1);// 短期指数平均线参数 Numeric SlowLength(276);// 长期指数平均线参数Vars Series<Numeric> AvgValue1; Series<Numeric> AvgValue2; Series<Numeric> CrossTimes; // 穿越次数 Series<Numeric> XDss;Events OnReady() { SetBackBarMaxCount(1+Max(FastLength,SlowLength)); } OnBar(ArrayRef<Integer> indexs) { // 每次进入 OnBar 时,先检查是否有持仓 If(MarketPosition == 0) { CrossTimes = 0; // 无持仓时,重置穿越次数为0 } AvgValue1 = AverageFC(Close,FastLength); AvgValue2 = AverageFC(Close,SlowLength); PlotNumeric("MA1",AvgValue1); PlotNumeric("MA2",AvgValue2); // 当有持仓且均线发生交叉时,增加穿越次数 If(MarketPosition <> 0 && (CrossOver(AvgValue1,AvgValue2) || CrossUnder(AvgValue1,AvgValue2))) { CrossTimes = CrossTimes + 1; Print("穿越次数:" + Text(CrossTimes)); } // 买入条件 If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1]) { BuyToCover(0, Open); Buy(0, Open); } // 卖出条件 If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1]) { Sell(0, Open); SellShort(0, Open); } }
建议投稿
回复:投稿是什么意思?
回复:分析代码,一般需要先读懂代码的业务逻辑,也就是要读明白要在做什么,然后要加入调试代码,去验证代码里每一步的设计逻辑有没有出错,最后一步步找到问题。这个过程一般很花时间精力,而且思考过程不太容易用语言去总结。所以需要分析代码,一般建议看社区的置顶帖,里面有一个投稿内容,投稿的代码会定期通过直播的方式分析解答。
CrossTimes设置成Global Integer试试?
回复:感觉每次平对向仓,开新仓的时候,CrossTIMES都需要重置为0
回复:谢谢 我试试 不过还是不能感觉,需要官方信息
回复:👌
应该是被污染了在onbar域里 所有代码前面加一句if(currentbar<maxbarsback) return;
回复:老师好,被污染是什么意思?怎么解决呢?我加了还是不行。谢谢指教Params Numeric FastLength(10);// 短期指数平均线参数 Numeric SlowLength(60);// 长期指数平均线参数Vars Series<Numeric> AvgValue1; Series<Numeric> AvgValue2; Series<Numeric> CrossTimes; // 穿越次数 Series<Numeric> XDss;Events OnBar(ArrayRef<Integer> indexs) { if(currentbar<maxbarsback) return; If(MarketPosition == 0) { if(currentbar<maxbarsback) return; CrossTimes=0; // 无持仓时,重置穿越次数为0 } } OnBarOpen(ArrayRef<Integer> indexs) { // 每次进入 OnBar 时,先检查是否有持仓 if(currentbar<maxbarsback) return; AvgValue1 = AverageFC(Close,FastLength); AvgValue2 = AverageFC(Close,SlowLength); PlotNumeric("MA1",AvgValue1); PlotNumeric("MA2",AvgValue2); // 当有持仓且均线发生交叉时,增加穿越次数 If(MarketPosition <> 0 && (CrossOver(AvgValue1,AvgValue2) || CrossUnder(AvgValue1,AvgValue2))) { CrossTimes = CrossTimes + 1; Print("穿越次数:" + Text(CrossTimes)); } // 买入条件 If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1]) { BuyToCover(0, Open); Buy(0, Open); } // 卖出条件 If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1]) { Sell(0, Open); SellShort(0, Open); } }