请教一个代码问题,要有持仓开始,输出的穿越次数的值,但还没持仓就输出值了,谢谢

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);

       }    

   }

想请教持仓代码
为何输出的数据是空值,但是我之前输出的数据是正确的
为何输出的数据是空值,但是我之前输出的数据是正确的
关于对冲套利的持仓盈亏问题
关于输出K线的问题
持仓问题
关于均线输出的问题
请教图表持仓的函数
自带函数的计算输出为无效值
切换品种后,公式中的输出值,无法显示

建议投稿

投稿是什么意思?

分析代码,一般需要先读懂代码的业务逻辑,也就是要读明白要在做什么,然后要加入调试代码,去验证代码里每一步的设计逻辑有没有出错,最后一步步找到问题。

这个过程一般很花时间精力,而且思考过程不太容易用语言去总结。

所以需要分析代码,一般建议看社区的置顶帖,里面有一个投稿内容,投稿的代码会定期通过直播的方式分析解答。

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);

       }    

   }