跳空开仓数不对,怎么办?
老师,上午好,问题是这样的:黄金买多网格 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)); } } }