在多层中开多单以后,MarketPosition为什么总是0
//------------------------------------------------------------------------
// 简称: EMA30Price
// 名称: 均线斜率
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
    Numeric EMA30Length(30); // 30日均线参数
    Numeric MinDiff(0);   // 与30线的最小价差
    Numeric MaxDiff(100);   // 与30线的最大价差
    Numeric DiffPrice(3);   // 多几跳去买/卖
    Numeric SlopeCnt(5);   // 近N天均线值的斜率
    Numeric SlopeVal(2); // 斜率
Vars
    Series<Numeric> ema30; // 30日均线值
    Series<Numeric> slope; // 30日均线值
    Numeric CurrentPrice; // 当前实时价格
    Numeric Diff;
    Numeric longPosition;
    Numeric shortPosition;
    Bool Flag(False);
    String mainSymbol;
    Numeric Cnt(1);   // 手数
    Numeric MarketPosition; // 图表上信号的当前净持仓状态,-1表示当前位置为持空仓,0表示当前位置为持平,1表示当前位置为持多仓
Events
    //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
    OnInit()
    {
        //与数据源有关
        Range[0:DataCount-1]
        {
            //=========数据源相关设置==============
            AddDataFlag(Enum_Data_RolloverBackWard());    //设置后复权

            AddDataFlag(Enum_Data_RolloverRealPrice());    //设置映射真实价格

            AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓 (据说只是回测时用的)

            AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());    //设置忽略换仓信号计算

            //=========交易相关设置==============
            SetSlippage(Enum_Rate_PointPerHand,2);    //设置滑点为2跳/手

            SetOrderMap2MainSymbol();    //设置委托映射到主力
        }
    }


    // 每根BAR开始的时候设置触发时间点, 收盘价模型收盘提前N秒发单
    OnBarOpen(ArrayRef<Integer> indexes)
    {
        Array<Numeric> timePoint;
        Numeric ret = DateTimeAdd(RealEndDateTime, -10); // 提前10秒发单
        ret = StringToTime(TimeToString(ret));
        ArrayPushBack(timePoint, ret);

        ret = DateTimeAdd(RealEndDateTime, -5); // 提前5秒发单
        ret = StringToTime(TimeToString(ret));
        ArrayPushBack(timePoint, ret);

        SetTriggerBarClose(timePoint);
    }

    OnReady()
    {
        SetBackBarMaxCount(1 + EMA30Length); // 设置最大回溯条数
        Range[0:DataSourceSize() - 1]
        {
            setPlotOption("ema30", "begin-bar", EMA30Length);
        }
    }

    OnBar(ArrayRef<Integer> indexs)
    {
        // data0 是日线数据
        // data1 是分钟级别数据
        Range[0:DataSourceSize() - 1]
        {
            // 计算30日均线
            ema30 = AverageFC(Close, EMA30Length);
            PlotNumeric("ema30", ema30);

            // 计算日均线的斜率
            Array<Numeric> arr;
            Numeric i;
            for i=SlopeCnt DownTo 1
            {
                ArrayInsert(arr, 0, ema30[i]);
            }
            slope = LinearRegSlopeArray(arr); //线性回归斜率
            Commentary("均线斜率:" + Text(slope));
        }
    }
    
    OnBarClose(ArrayRef<Integer> indexs)
    {
        Print("OnBarClose 执行时间:" + DateTimeToString(MakeDateTime(Date, Time)));

        // 获取当前实时价格(当前bar的close价)
        CurrentPrice = Close();

        // 计算分钟线的最低价格/最高价格
        Numeric lowest = data1.Lowest(data1.Close[1], EMA30Length);
        Numeric highest = data1.Highest(data1.Close[1], EMA30Length);
        
        if(data1.MarketPosition <> 1) // 没有多单
        {
            Flag = data1.Buy(Cnt, CurrentPrice + DiffPrice); // 尽量成交,减少偷价
            FileAppend("d:/tb_data/ma30.tbf", "开多单: " +DateTimeToString(MakeDateTime(Date, Time))+ ", 结果: " +Text(IIF(Flag, 1, 0)));
        }
    }

为什么我在 OnBarClose 中开多单以后,用data1.MarketPosition 获取到的值一直是0,然后导致一直开单;data0是日线级别,data1是分钟/小时线级别;以下是截图:

为什么有持仓但MarketPosition却为0呢
为什么买入多单开仓之后,MarketPosition 和 A_BuyPosition都显示为0,
在持有多单的情况下开空单如何表达
麻烦老师把文字部分(先平掉所有空单再开多单,先平掉所有多单再开空单)
BarsSinceExit 为什么总位0
怎么做到开多单不平空单
频繁开仓,MarketPosition一直是0
多单开仓条件下,多单止损后如何不让再开多单
持有多仓,MarketPosition =1,MarketPosition 识别不到,还要进入下面的买入开仓语句,逻辑不对呀
开仓条件设置了marketposition==0才开仓,模拟盘的时候第一单未平仓有连续2次开仓。

看到原因了,打扰了

哦好