收盘不平仓
以下是AI写的日内策略。但实际结果是:收盘前不平仓。请问该怎么解决?//------------------------------------------------------------------------// 简称: DayNightRange_Bar// 名称: 日夜盘开盘区间突破(传统Bar驱动版)// 类别: 公式应用 / 类型: 用户应用//------------------------------------------------------------------------// 说明: 1)每天分别计算夜盘(21:00)与日盘(09:00)开盘价;// 2)开盘后30分钟(21:00-21:29 / 09:00-09:29)的最高价与最低价;// 3)上轨=区间最高价 + n*最小变动价位, 下轨=区间最低价 - n*最小变动价位;// 4)收盘价>上轨开多, 收盘价<下轨开空;// 5)收盘前(夜盘02:27 / 日盘14:57)平掉全部持仓.// 本版为传统Bar驱动: 不设基础周期, 信号在数据源K线层面判断一次.//------------------------------------------------------------------------Params Numeric n(1); // 轨道倍数(以品种最小变动价位为单位) Numeric lots(1); // 开仓手数Vars Series<Numeric> rangeHigh; // 开盘后30分钟最高价 Series<Numeric> rangeLow; // 开盘后30分钟最低价Events OnInit() { SetCloseMode(); // 启用微周期驱动机制 SetInitCapital(10000000); } OnBar(ArrayRef<Integer> indexs) { Numeric minPoint = MinMove * PriceScale; // 品种最小变动价位 Integer curH = Hour(); // 当前Bar小时 Integer curM = Minute(); // 当前Bar分钟 Integer curTotal = curH * 60 + curM; // 当日分钟数 // ---- 5) 收盘前平仓: 夜盘02:27 / 日盘14:57 ---- If((curH == 2 And curM >= 27) Or (curH == 14 And curM >= 57)) { C_Sell(0); // 平多 C_BuyToCover(0); // 平空 Return; } // ---- 1)2) 收集开盘后前30分钟高低点 ---- Bool nightWin = (curH == 21 And curM < 30); // 夜盘 21:00-21:29 Bool dayWin = (curH == 9 And curM < 30); // 日盘 09:00-09:29 If(nightWin Or dayWin) { If(curM == 0) // 开盘那根: 重置区间 { rangeHigh = High; rangeLow = Low; } Else // 区间内其余Bar: 累积极值 { rangeHigh = Max(rangeHigh, High); rangeLow = Min(rangeLow, Low); } Return; // 区间收集期间不交易 } // ---- 是否处于可交易时段 ---- Bool inSession = ((curTotal >= 1290) Or (curTotal < 147) // 夜盘 21:30-02:26 Or (curTotal >= 570 And curTotal < 897)); // 日盘 09:30-14:56 If(inSession == False) { Return; } // ---- 3) 计算上/下轨 ---- Numeric upperBand = rangeHigh + n * minPoint; Numeric lowerBand = rangeLow - n * minPoint; // ---- 4) 收盘价突破开仓 (先平反向, 再开新向) ---- If(Close > upperBand) // 收盘价 > 上轨 开多 { If(shortCurrentContracts() > 0) { C_BuyToCover(0); // 反手: 先平空 } C_Buy(lots); } Else If(Close < lowerBand) // 收盘价 < 下轨 开空 { If(longCurrentContracts() > 0) { C_Sell(0); // 反手: 先平多 } C_SellShort(lots); } }