请教老师这种内置函数MarketPosition为何会编译报错呢?

请教老师这种内置函数为何会编译报错呢?

软件是tbquant版本如下:

//------------------------------------------------------------------------------
// 简称:OscillationAdaptive
// 名称:自适应震荡交易策略
// 类别:公式应用
// 类型:用户应用
// 输出:Void
// 版本:TBQuant 适配版
// 日期:2026/03/17
//------------------------------------------------------------------------------

Params
    // 布林带参数
    Numeric BollLength(20);           // 布林带周期
    Numeric BollDev(2);               // 布林带标准差倍数

    // RSI 参数
    Numeric RSILength(14);            // RSI 周期
    Numeric RSIOverSold(30);          // RSI 超卖线
    Numeric RSIOverBought(70);        // RSI 超买线

    // ADX 参数
    Numeric ADXLength(14);            // ADX 周期
    Numeric ADXThreshold(25);         // 震荡/趋势分界线

    // 均线参数
    Numeric FastMALength(10);         // 快速均线周期
    Numeric SlowMALength(30);         // 慢速均线周期

    // 止损止盈参数
    Numeric StopLossPct(0.02);        // 止损百分比
    Numeric TakeProfitPct(0.04);      // 止盈百分比
    Numeric TrailingStopPct(0.015);   // 移动止损百分比

    // 资金管理参数
    Numeric RiskPerTrade(0.02);       // 单笔风险比例

    // 过滤参数
    Numeric MinVolRatio(0.5);         // 最小成交量比率
    Numeric ChicangN(5);              // 最大持仓品种数

Vars
    // 布林带变量
    Series<Numeric> UpperBand;
    Series<Numeric> LowerBand;
    Series<Numeric> MidBand;
    Series<Numeric> BandWidth;

    // RSI 变量
    Series<Numeric> RSIValue;

    // ADX 变量
    Series<Numeric> ADXValue;
    Series<Numeric> PlusDI;
    Series<Numeric> MinusDI;

    // 均线变量
    Series<Numeric> FastMA;
    Series<Numeric> SlowMA;

    // 市场状态变量
    Series<Bool> IsRanging;
    Series<Numeric> TrendDirection;

    // 价格跟踪变量
    Series<Numeric> HighestSinceEntry;
    Series<Numeric> LowestSinceEntry;

    // 交易信号变量
    Bool LongSignal;
    Bool ShortSignal;
    Bool ExitLongSignal;
    Bool ExitShortSignal;

    // 成交量变量
    Series<Numeric> VolRatio;
    Series<Numeric> AvgVol;

    // 临时变量
    Numeric MyEntryPrice;
    Numeric StopLossPrice;
    Numeric TakeProfitPrice;
    Numeric TradeLots;

    // 持仓统计变量
    Numeric i;
    Integer ChiCang;
    Integer ChiCang11;
    Series<Numeric> MyMarketPosition;
    Series<Numeric> lots;

    // K 线对齐检查
    Numeric result(1);
    Numeric ii;

    // 过滤条件变量
    Bool GuoLv;

Events
    // 初始化事件函数
    OnInit()
    {
        // 设置初始资金
        SetInitCapital(1000000);

        // 设置数据标志
        Range[0:DataCount-1]
        {
            AddDataFlag(Enum_Data_RolloverBackWard());      // 设置后复权
            AddDataFlag(Enum_Data_RolloverRealPrice());     // 映射真实价格
            AddDataFlag(Enum_Data_AutoSwapPosition());      // 设置自动换仓
            AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());  // 忽略换仓信号计算
        }
        
        // 初始化价格跟踪变量
        HighestSinceEntry = 0;
        LowestSinceEntry = 999999;
    }

    // 在所有的数据源准备完成后调用
    OnReady()
    {
        Numeric maxBackBars;
        maxBackBars = Max(Max(SlowMALength, BollLength), Max(ADXLength, RSILength)) + 10;
        SetBackBarMaxCount(maxBackBars);
    }

    // 新 bar 的第一次执行之前调用一次
    OnBarOpen(ArrayRef<Integer> indexs)
    {
        // 重置最高最低价跟踪
        If MarketPosition > 0
        {
            HighestSinceEntry = High;
        }
        Else If MarketPosition < 0
        {
            LowestSinceEntry = Low;
        }
    }

    // Bar 更新事件函数,主要策略逻辑
    OnBar(ArrayRef<Integer> indexs)
    {
        //==============================// 判断 K 线是否对齐
        result = 1;
        For ii = 0 To DataSourceSize - 1
        {
            result = result * Data[ii].Barexiststatus;
        }
        // If(result <> 1) Return;  // 可选:K 线未对齐时退出
        //==============================

        Range[0:DataCount-1]
        {
            // 数据有效性检查
            If Data[0].BarIndex < Max(Max(SlowMALength, BollLength), Max(ADXLength, RSILength))
                Return;

            // ====================================================================
            // 第一部分:技术指标计算
            // ====================================================================

            // 计算布林带
            MidBand = AverageFC(Close, BollLength);
            UpperBand = MidBand + StandardDev(Close, BollLength, 1) * BollDev;
            LowerBand = MidBand - StandardDev(Close, BollLength, 1) * BollDev;
            BandWidth = (UpperBand - LowerBand) / MidBand * 100;

            // 计算 RSI
            RSIValue = RSI(Close, RSILength);

            // 计算 ADX 系统
            ADXValue = ADX(ADXLength);
            PlusDI = DMIPlus(ADXLength);
            MinusDI = DMIMinus(ADXLength);

            // 计算均线
            FastMA = AverageFC(Close, FastMALength);
            SlowMA = AverageFC(Close, SlowMALength);

            // 计算成交量比率
            AvgVol = AverageFC(Volume, 20);
            If AvgVol > 0
                VolRatio = Volume / AvgVol;
            Else
                VolRatio = 0;

            // ====================================================================
            // 第二部分:市场状态判断
            // ====================================================================

            // 初始化市场状态
            IsRanging = False;

            // 判断是否为震荡行情
            If ADXValue < ADXThreshold
                IsRanging = True;

            If BandWidth < 5
                IsRanging = True;

            // 判断趋势方向
            If FastMA > SlowMA And PlusDI > MinusDI
                TrendDirection = 1;
            Else If FastMA < SlowMA And MinusDI > PlusDI
                TrendDirection = -1;
            Else
                TrendDirection = 0;

            // ====================================================================
            // 第三部分:持仓统计
            // ====================================================================

            ChiCang11 = 0;
            ChiCang = 0;
            MyMarketPosition = MarketPosition;

            For i = 0 To DataCount - 1
            {
                If(Abs(Data[i].MyMarketPosition[1]) > 0)
                    ChiCang11 = ChiCang11 + 1;
                    
                If(Abs(Data[i].MarketPosition) > 0)
                    ChiCang = ChiCang + 1;
            }

            Commentary("Chicang111==" + Text(ChiCang));

            // ====================================================================
            // 第四部分:交易信号生成
            // ====================================================================

            // 初始化信号
            LongSignal = False;
            ShortSignal = False;
            ExitLongSignal = False;
            ExitShortSignal = False;

            // 过滤条件
            GuoLv = Data[0].BarIndex >= Max(Max(SlowMALength, BollLength), Max(ADXLength, RSILength)) * 2 
                    And OpenInt > 50000 
                    And result == 1;

            // 震荡行情策略
            If IsRanging
            {
                // 多头信号:价格触及下轨 + RSI 超卖
                If Close <= LowerBand And RSIValue < RSIOverSold
                {
                    If VolRatio >= MinVolRatio And GuoLv And ChiCang < ChicangN And ChiCang11 < ChicangN
                        LongSignal = True;
                }

                // 空头信号:价格触及上轨 + RSI 超买
                If Close >= UpperBand And RSIValue > RSIOverBought
                {
                    If VolRatio >= MinVolRatio And GuoLv And ChiCang < ChicangN And ChiCang11 < ChicangN
                        ShortSignal = True;
                }

                // 多头平仓信号
                If MarketPosition > 0
                {
                    If Close >= UpperBand Or RSIValue > RSIOverBought
                        ExitLongSignal = True;
                }

                // 空头平仓信号
                If MarketPosition < 0
                {
                    If Close <= LowerBand Or RSIValue < RSIOverSold
                        ExitShortSignal = True;
                }
            }
            // 趋势行情策略
            Else
            {
                // 多头信号:金叉 + ADX 确认
                If CrossOver(FastMA, SlowMA) And ADXValue > ADXThreshold
                {
                    If PlusDI > MinusDI And VolRatio >= MinVolRatio And GuoLv And ChiCang < ChicangN And ChiCang11 < ChicangN
                        LongSignal = True;
                }

                // 空头信号:死叉 + ADX 确认
                If CrossUnder(FastMA, SlowMA) And ADXValue > ADXThreshold
                {
                    If MinusDI > PlusDI And VolRatio >= MinVolRatio And GuoLv And ChiCang < ChicangN And ChiCang11 < ChicangN
                        ShortSignal = True;
                }

                // 多头平仓信号
                If MarketPosition > 0
                {
                    If CrossUnder(FastMA, SlowMA) Or ADXValue < ADXThreshold
                        ExitLongSignal = True;
                }

                // 空头平仓信号
                If MarketPosition < 0
                {
                    If CrossOver(FastMA, SlowMA) Or ADXValue < ADXThreshold
                        ExitShortSignal = True;
                }
            }

            // ====================================================================
            // 第五部分:止损止盈逻辑
            // ====================================================================

            // 多头持仓止损止盈
            If MarketPosition > 0
            {
                MyEntryPrice = AvgEntryPrice;
                HighestSinceEntry = Max(HighestSinceEntry, High);

                // 固定止损
                StopLossPrice = MyEntryPrice * (1 - StopLossPct);
                If Low <= StopLossPrice
                {
                    Sell(0, Min(Open, StopLossPrice));
                    HighestSinceEntry = 0;
                    LowestSinceEntry = 999999;
                    Return;
                }

                // 固定止盈
                TakeProfitPrice = MyEntryPrice * (1 + TakeProfitPct);
                If High >= TakeProfitPrice
                {
                    Sell(0, Max(Open, TakeProfitPrice));
                    HighestSinceEntry = 0;
                    LowestSinceEntry = 999999;
                    Return;
                }

                // 移动止损
                If HighestSinceEntry >= MyEntryPrice * (1 + TrailingStopPct)
                {
                    StopLossPrice = HighestSinceEntry * (1 - TrailingStopPct);
                    If Low <= StopLossPrice
                    {
                        Sell(0, Min(Open, StopLossPrice));
                        HighestSinceEntry = 0;
                        LowestSinceEntry = 999999;
                        Return;
                    }
                }
            }

            // 空头持仓止损止盈
            If MarketPosition < 0
            {
                MyEntryPrice = AvgEntryPrice;
                LowestSinceEntry = Min(LowestSinceEntry, Low);

                // 固定止损
                StopLossPrice = MyEntryPrice * (1 + StopLossPct);
                If High >= StopLossPrice
                {
                    BuyToCover(0, Max(Open, StopLossPrice));
                    HighestSinceEntry = 0;
                    LowestSinceEntry = 999999;
                    Return;
                }

                // 固定止盈
                TakeProfitPrice = MyEntryPrice * (1 - TakeProfitPct);
                If Low <= TakeProfitPrice
                {
                    BuyToCover(0, Min(Open, TakeProfitPrice));
                    HighestSinceEntry = 0;
                    LowestSinceEntry = 999999;
                    Return;
                }

                // 移动止损
                If LowestSinceEntry <= MyEntryPrice * (1 - TrailingStopPct)
                {
                    StopLossPrice = LowestSinceEntry * (1 + TrailingStopPct);
                    If High >= StopLossPrice
                    {
                        BuyToCover(0, Max(Open, StopLossPrice));
                        HighestSinceEntry = 0;
                        LowestSinceEntry = 999999;
                        Return;
                    }
                }
            }

            // ====================================================================
            // 第六部分:执行交易
            // ====================================================================

            // 平仓操作
            If ExitLongSignal And MarketPosition > 0
            {
                Sell(0, Open);
                HighestSinceEntry = 0;
                LowestSinceEntry = 999999;
            }

            If ExitShortSignal And MarketPosition < 0
            {
                BuyToCover(0, Open);
                HighestSinceEntry = 0;
                LowestSinceEntry = 999999;
            }

            // 开仓操作 - 多头
            If LongSignal And MarketPosition <= 0
            {
                // 计算仓位 (简化版:固定手数)
                lots = 1;
                
                // 如果持有空头,先平仓
                If MarketPosition < 0
                    BuyToCover(0, Open);

                // 开多仓
                Buy(lots, Open);
                
                // 初始化价格跟踪
                HighestSinceEntry = Open;
                LowestSinceEntry = 999999;
            }

            // 开仓操作 - 空头
            If ShortSignal And MarketPosition >= 0
            {
                // 计算仓位 (简化版:固定手数)
                lots = 1;
                
                // 如果持有多头,先平仓
                If MarketPosition > 0
                    Sell(0, Open);

                // 开空仓
                SellShort(lots, Open);
                
                // 初始化价格跟踪
                HighestSinceEntry = 0;
                LowestSinceEntry = Open;
            }

            // ====================================================================
            // 第七部分:绘图输出
            // ====================================================================

            PlotNumeric("上轨", UpperBand);
            PlotNumeric("下轨", LowerBand);
            PlotNumeric("中轨", MidBand);
            PlotNumeric("快线", FastMA);
            PlotNumeric("慢线", SlowMA);

            If IsRanging
                PlotString("状态", "震荡");
            Else
                PlotString("状态", "趋势");

            PlotNumeric("ADX", ADXValue);
            PlotNumeric("RSI", RSIValue);

            // 持仓统计输出
            ChiCang = 0;
            For i = 0 To DataCount - 1
            {
                If(Abs(Data[i].MarketPosition) > 0)
                    ChiCang = ChiCang + 1;
            }

            Commentary("MarketPosition==" + Text(MarketPosition));
            Commentary("Chicang==" + Text(ChiCang));
        }
    }

    // 持仓更新事件函数
    OnPosition(PositionRef pos)
    {
        // 可添加持仓监控逻辑
    }

    // 委托更新事件函数
    OnOrder(OrderRef ord)
    {
        // 可添加委托监控逻辑
    }

    // 成交更新事件函数
    OnFill(FillRef ordFill)
    {
        // 可添加成交监控逻辑
    }

//------------------------------------------------------------------------------
// 编译版本:2026/03/17
// 版权所有:TradeBlazer Software
// 更改声明:TradeBlazer 平台保留对每一版本的 TradeBlazer 公式修改和重写的权利
//------------------------------------------------------------------------------


Print函数编译时报错
marketposition函数是否也会闪烁
这种问题(见图中红框)导致无法编译公式,该如何处理呢?
IF 判断内部不能有内置函数
BarsSinceEntry-这个内置函数为何回测看到不会刷新
关于编译代码报错的问题
buy函数,marketposition函数
智大领峰编译指标报错
Series<Numeric> Price(1); 编译报错,难道Series<Numeric>,没有了吗
为什么有持仓但MarketPosition却为0呢

这不是TB语言的代码,请联系提供代码的人咨询

老师好,这是我用Claude code生成后又自己改了一下的代码,按照tbquant的语法生成并修改的,哪里不对吗?