跳空开仓数不对,怎么办?

老师,上午好,问题是这样的:

黄金买多网格 850以下 每下跌超8 买1手  每下跌超16 买2手 以此类推/价格反弹8就卖1手 反弹超16就卖2手 以此类推 /上一个网格价是786(上周五晚上) 今天周一低开

1)上周五晚上净多仓:(850-786)/8网格间距=8手净多仓

2)今天周一刚开盘那会:  上一baseprice网格基准价是786,掉到775多点,已经掉了8个点多,信号显示增加1手,净持仓+8手,

这时baseprice网格基准价是778(验证 850-778=72除以网格间距8 得出净持仓+9手)

3)价格低开后 继续往下掉 最低掉到765.64 此时较上一基准价778跌了超过8 ,信号显示增加2手,净持仓+10手

但此时我的代码打死不再开仓 净持仓还是9手

代码名称叫WANGGGE_AU_DUO5 // 因其它代码也有au成交

麻烦老师看一下 问题如下:信号是对的 但是跳空几格就只买/卖1手 代码如下(关键是下跌买入跳空跳几个网格买入 每次就买1手 // 估计跳空卖出也存在这个问题):  下跌买入还有上涨卖出的代码应该怎么改呀

//------------------------------------------------------------------------

// 简称: WANGGGE_AU_DUO5

// 名称: 黄金多网格 解决跳空

// 类别: 删除minMove * priceScale 因为有偏移委托10跳  Low + minMove * priceScale/High - minMove * priceScale

// 类型: 用户应用

// 输出: Void

//------------------------------------------------------------------------

Params

   Numeric gridSpacing (8);  // 网格间距

   Numeric lots (1);

   Numeric startprice(850);


Vars

   Series <Numeric> baseBKVol;  // 净多仓   删除了Global

   Series <Numeric> basePrice;  // 作为衡量的基准价格

   Series <Numeric> gridCount;  // 用于计算买量的变量


Events

   // 初始化事件函数,策略运行期间,首先运行且只有一次

   OnInit()

   {

       // 初始化变量

       baseBKVol = 0;

       basePrice = 0;

       gridCount = 0;

   }


   // Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

    OnBar(ArrayRef<Integer> indexs)

   {

       // 初始建仓(使用当前Bar的最低价)

       If (MarketPosition == 0 and Low <= startprice)

       {

           gridCount = RoundDown((startprice - Low) / gridSpacing, 0);

           if (gridCount >= 1)

           {

               baseBKVol = lots * gridCount;

               // 修改开仓价

               Buy(baseBKVol, Max(open, startprice - gridCount * gridSpacing));  // 买价虽用min 卖价虽用max 但都是偏离10跳 更具优势更易成交 // 改前 Buy(baseBKVol, Min(open, min(Low, startprice - gridCount * gridSpacing)))

               basePrice = startprice - gridCount * gridSpacing;

               Commentary("抄底初始建仓@网格" + Text(gridCount)+",买入建仓价:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

               Print("抄底初始建仓@网格" + Text(gridCount)+",买入建仓价:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

           }

       }


      // 持仓网格逻辑 下跌买入(使用当前Bar的最低价,严格基于最新basePrice)

       else if (MarketPosition > 0 and Low <= basePrice - gridSpacing)

       {

           // 计算当前价格与基准价格的差值对应的网格数

           Numeric gridDiff = RoundDown((basePrice - Low) / gridSpacing, 0);

           if (gridDiff >= 1)

           {

               // 根据网格数进行一次性增仓操作,修改开仓价

               Buy(lots * gridDiff, max(open, basePrice - gridDiff * gridSpacing)); //改前 Buy(lots * gridDiff, Min(open, min(Low, basePrice - gridDiff * gridSpacing))) 这个滑点大

               baseBKVol = baseBKVol + lots * gridDiff;

               basePrice = basePrice - gridDiff * gridSpacing;   // 买价

               Commentary("抄底加仓买入@网格" + Text(gridDiff) + ",手数:" + Text(lots * gridDiff) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

               Print("抄底加仓买入@网格" + Text(gridDiff) + ",手数:" + Text(lots * gridDiff) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

           }

       }


       // 上涨卖出(使用当前Bar的最高价,严格基于最新basePrice)

       else if (MarketPosition > 0 and High >= basePrice + gridSpacing)

       {

           // 计算当前价格与基准价格的差值对应的网格数(这里是上涨情况)

           Numeric gridDiff = RoundDown((High - basePrice) / gridSpacing, 0);

           if (gridDiff >= 1 && baseBKVol > 0)

           {

               // 确定卖出数量,不超过持仓量

               Numeric sellVol = Min(lots * gridDiff, baseBKVol);

               // 修改平仓价

               Sell(sellVol, min(open, basePrice + gridDiff * gridSpacing)); // 改前 Sell(sellVol, Max(open, max(High, basePrice + gridDiff * gridSpacing))) 这个滑点大

               baseBKVol = baseBKVol - sellVol;  

               basePrice = basePrice + gridDiff * gridSpacing;  

               Commentary("抄底减仓卖出@网格" + Text(gridDiff) + ",手数:" + Text(sellVol) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

               Print("抄底减仓卖出@网格" + Text(gridDiff) + ",手数:" + Text(sellVol) + ",价格:" + Text(basePrice) + ",当前净多仓:" + Text(baseBKVol)+ " / 间距:"+ Text(gridSpacing)+ ",初始价:"+ Text(startprice));

           }

       }

   }

关于自动计算开仓手数
如何用ATR和实盘权益计算开仓手数
跳空表达
根据资金使用率计算下单手数不对
如何过滤开盘跳空呢?
关于动态权益百分比计算开仓手数的问题
自动交易如何设置开仓手数
旗舰版主连跳空不同步问题
)挎号不对,是照着视频例子看的。怎么就不对呢
MarketPosition() 获取到的状态不对

这种复杂的问题除了写调试代码,查看模型运行日志,慢慢一点点分析,其他没什么办法。

谢谢老师!