使用动态仓位的一段代码,为啥不开盘测试正常,开盘后策略任务加载不了

// 使用A_GetMarginRate获取实时保证金率

   MarginRate marginRateStruct;               // 定义保证金率结构体

   Bool ret = A_GetMarginRate(Symbol, marginRateStruct);  // 获取当前合约的保证金率

   

   // 从结构体中提取保证金率

   if(ret)

   {

       longMarginRate = marginRateStruct.longMarginRatio;     // 多头保证金率

       shortMarginRate = marginRateStruct.shortMarginRatio;   // 空头保证金率

   }

   else

   {

       // 如果获取失败,使用默认值

       longMarginRate = DefaultMarginRate;

       shortMarginRate = DefaultMarginRate;

   }

   

   // 保证金率有效性检查

   if(longMarginRate <= 0 or longMarginRate >= 1)

       longMarginRate = DefaultMarginRate;

   

   if(shortMarginRate <= 0 or shortMarginRate >= 1)

       shortMarginRate = DefaultMarginRate;

   

   // 根据当前持仓确定使用的保证金率

   if(my_MarketPosition == 1 or (my_MarketPosition == 0 and b == 1 and s == 0))

       marginRateToUse = longMarginRate;

   else if(my_MarketPosition == -1 or (my_MarketPosition == 0 and b == 0 and s == 1))

       marginRateToUse = shortMarginRate;

   else

       marginRateToUse = Max(longMarginRate, shortMarginRate);  // 默认使用较大的保证金率


   // =====================================================================

   // 12. 动态手数计算(按L1_TSF方式)

   // =====================================================================

   lotsToUse = Lot;  // 默认使用固定手数

   

   if(UseMarginPercent)

   {

       Numeric initCapital = Portfolio_InitCapital();

       if(initCapital > 0)

       {

           Numeric targetMargin = initCapital * CapitalPercent;

           

           // 确定合约乘数:优先使用ContractUnit,若其<=1则使用手动设置的乘数

           realContractUnit = ContractUnit;

           if(realContractUnit <= 1)

               realContractUnit = ContractUnit_Manual;

           

           // 计算每手保证金

           Numeric marginPerLot = Open * realContractUnit * marginRateToUse;

           

           if(marginPerLot > 0)

           {

               // 计算理论手数

               Numeric calcLots = targetMargin / marginPerLot;

               calcLots = IntPart(calcLots);

               if(calcLots < 1)

                   calcLots = 1;

               

               // 可用资金上限检查

               Numeric currentCapital = Portfolio_CurrentCapital();

               if(currentCapital > 0)

               {

                   Numeric maxLotsByCapital = IntPart(currentCapital / marginPerLot);

                   if(maxLotsByCapital < 1)

                       maxLotsByCapital = 1;

                   

                   // 双重限制

                   calcLots = Min(calcLots, maxLotsByCapital);

               }

               

               if(calcLots > MaxLots)

                   calcLots = MaxLots;

               

               lotsToUse = calcLots;



这是动态仓位计算部分的代码,请管理员给看看啥原因。

开盘后策略启动问题求助
开盘后的前5分钟不开仓
使用SetPremiseFormulas加载含有plotline函数的策略画图失效测试代码
开盘后数据
TBQ开盘后的5分钟之内不开仓
如何使用策略代码平掉之前手动开的仓位
如何使用TBPY接口订阅回放K线数据,用于不开盘时程序测试?
分段新建优化任务,用不了。
为啥我的账户每天开盘几分钟后才登陆进去啊
加载公式后,K线无法正常显示