请帮忙修改跨周期模型语法不通过,

//------------------------------------------------------------------------// 简称: KUAHEYUMOX// 名称: 跨品种集合竞价模型(美原油→沥青)// 类别: 策略应用// 类型: 用户应用// 输出: Void// 说明: // 夜盘阶段 (15:00~20:55):// 记录沥青15:00收盘价、美原油15:00价格// 若20:49前美原油未跌破15:00价格,则在20:55以沥青收盘价-50跳申报集合竞价多单// 若跌破则放弃夜盘交易// 日盘阶段 (23:00~次日08:55):// 记录美原油23:00价格// 若08:49前美原油未跌破23:00价格,则在08:55以前日沥青收盘价-50跳申报集合竞价多单// 若跌破则放弃日盘交易// 集合竞价开盘后若委托未成交,自动撤单//------------------------------------------------------------------------Params // ----- 申报价格偏移 ----- Numeric offsetTicks(50); // 申报价格偏移量(相对沥青15点收盘价,单位:最小变动价位) // ----- 定时器间隔 ----- Numeric checkInterval(60000); // 美原油监控定时器间隔(毫秒),默认60秒 // ----- 夜盘申报时间 ----- Numeric nightOrderHour(20); // 夜盘申报小时 Numeric nightOrderMinute(55); // 夜盘申报分钟 // ----- 日盘申报时间 ----- Numeric dayOrderHour(8); // 日盘申报小时 Numeric dayOrderMinute(55); // 日盘申报分钟 // ----- 夜盘检查截止时间 ----- Numeric nightCheckEndHour(20); // 夜盘检查截止小时 Numeric nightCheckEndMinute(49); // 夜盘检查截止分钟 // ----- 日盘检查截止时间 ----- Numeric dayCheckEndHour(8); // 日盘检查截止小时 Numeric dayCheckEndMinute(49); // 日盘检查截止分钟 // ----- 撤单延迟(秒) ----- Numeric cancelDelaySeconds(5); // 集合竞价开盘后等待N秒再撤单,给撮合留时间 // ----- 交易手数 ----- Numeric tradeLots(1); // 每次委托手数Vars // ----- 数据记录 ----- Numeric asphaltClosePrice; // 沥青15:00收盘价(当日夜盘及次日日盘共用) Numeric crudeStartPrice; // 美原油起点价格(夜盘:15:00价格;日盘:23:00价格) // ----- 状态标志 ----- Numeric nightCrudeBroken; // 夜盘美原油是否已跌破(0=未跌破,1=已跌破) Numeric dayCrudeBroken; // 日盘美原油是否已跌破(0=未跌破,1=已跌破) Numeric nightOrderPlaced; // 夜盘是否已申报(0=未申报,1=已申报) Numeric dayOrderPlaced; // 日盘是否已申报(0=未申报,1=已申报) // ----- 委托管理 ----- Numeric orderID; // 当前有效委托单ID Numeric orderStatus; // 委托状态: 0=无委托, 1=已提交未成交, 2=已成交 Numeric orderPlacedSession; // 记录当前委托属于哪个时段: 1=夜盘, 2=日盘 // ----- 时段标识 ----- Numeric isNightSession; // 1=夜盘时段(15:00~次日凌晨), 0=日盘时段(23:00~次日) // ----- 定时器ID ----- Global Integer timerId; // ----- 辅助变量 ----- Numeric currentHour; Numeric currentMinute; Numeric currentSecond;//------------------------------------------------------------------------// 自定义函数区//------------------------------------------------------------------------Defs // 获取当前系统时间(时、分、秒) Void GetCurrentTime(NumericRef hour, NumericRef minute, NumericRef second) { Numeric now = CurrentTime(); hour = IntPart(now); minute = IntPart((now - hour) * 100); second = IntPart((now - hour - minute/100.0) * 10000); } // 检查美原油是否跌破起点价格(取最低价、买一价、收盘价的最小值) Bool IsCrudeBroken(Numeric startPrice) { Numeric currentLow = data1.Low; Numeric currentBid = data1.Bid; Numeric currentPrice = data1.Close; Numeric lowestCurrent = Min(currentLow, Min(currentBid, currentPrice)); Return lowestCurrent < startPrice; } // 获取沥青申报价格 = 沥青15点收盘价 - 偏移量 * 最小变动价位 Numeric GetOrderPrice() { Return asphaltClosePrice - offsetTicks * data0.MinMove; } // 执行集合竞价申报(限价买入开仓) Void PlaceAuctionOrder(Numeric price, Numeric session) { If(orderStatus == 0) { orderID = A_SendOrder(Enum_Buy, Enum_Entry, tradeLots, price); orderStatus = 1; orderPlacedSession = session; Comment(\"【集合竞价申报】时段=\" + IIfString(session==1,\"夜盘\",\"日盘\") + \", 价格=\" + Text(price) + \", 委托号=\" + Text(orderID)); } } // 撤销未成交委托 Void CancelOrder() { If(orderStatus == 1) { A_DeleteOrder(orderID); orderStatus = 0; Comment(\"【撤单】委托号=\" + Text(orderID) + \", 原因=集合竞价超时未成交\"); } }//------------------------------------------------------------------------// 事件函数区//------------------------------------------------------------------------Events OnInit() { // 初始化所有变量 asphaltClosePrice = 0; crudeStartPrice = 0; nightCrudeBroken = 0; dayCrudeBroken = 0; nightOrderPlaced = 0; dayOrderPlaced = 0; orderID = 0; orderStatus = 0; orderPlacedSession = 0; isNightSession = 0; // 创建定时器(美原油监控) timerId = CreateTimer(checkInterval); // 数据源设置(data1为美原油加权,需手动添加) Range[1:1] { AddDataFlag(Enum_Data_RolloverBackWard()); // 后复权,保证连续性 } // 交易设置(可选) // SetTradeLots(tradeLots); // SetSlippage(Enum_Rate_PointPerHand, 1); } OnBar(ArrayRef<Integer> indexs) { Numeric barTime = data0.CurrentTime(); Numeric barHour = IntPart(barTime); Numeric barMinute = (barTime - barHour) * 100; // ========= 夜盘阶段初始化(15:00) ========= If(barHour == 15 And barMinute == 0 And asphaltClosePrice == 0 And isNightSession == 0) { asphaltClosePrice = data0.Close; // 记录沥青收盘价 crudeStartPrice = data1.Close; // 记录美原油起点价(15:00) nightCrudeBroken = 0; nightOrderPlaced = 0; isNightSession = 1; // 进入夜盘模式 Comment(\"【夜盘启动】沥青收盘=\" + Text(asphaltClosePrice) + \", 美原油起点=\" + Text(crudeStartPrice)); } // ========= 日盘阶段初始化(23:00) ========= If(barHour == 23 And barMinute == 0 And isNightSession == 1) { crudeStartPrice = data1.Close; // 记录美原油新起点(23:00) dayCrudeBroken = 0; dayOrderPlaced = 0; isNightSession = 0; // 切换到日盘模式 Comment(\"【日盘启动】美原油起点=\" + Text(crudeStartPrice)); } } OnTimer(Integer id, Integer intervalMillsecs) { // 获取当前时间 GetCurrentTime(currentHour, currentMinute, currentSecond); // ========= 一、夜盘申报逻辑 ========= If(asphaltClosePrice != 0 And isNightSession == 1 And nightOrderPlaced == 0) { // 检查美原油是否跌破(持续监控) If(IsCrudeBroken(crudeStartPrice)) nightCrudeBroken = 1; // 到达夜盘检查截止时间(20:49后)进行最终判断 If(currentHour == nightCheckEndHour And currentMinute >= nightCheckEndMinute) { If(nightCrudeBroken == 0) { Numeric orderPrice = GetOrderPrice(); PlaceAuctionOrder(orderPrice, 1); // 1表示夜盘 nightOrderPlaced = 1; } Else { Comment(\"【夜盘放弃】美原油已跌破起点 \" + Text(crudeStartPrice) + \",不参与交易\"); nightOrderPlaced = 1; // 标记已处理,避免重复判断 } } } // ========= 二、日盘申报逻辑 ========= If(asphaltClosePrice != 0 And isNightSession == 0 And dayOrderPlaced == 0) { // 检查美原油是否跌破(持续监控) If(IsCrudeBroken(crudeStartPrice)) dayCrudeBroken = 1; // 到达日盘检查截止时间(08:49后)进行最终判断 If(currentHour == dayCheckEndHour And currentMinute >= dayCheckEndMinute) { If(dayCrudeBroken == 0) { Numeric orderPrice = GetOrderPrice(); PlaceAuctionOrder(orderPrice, 2); // 2表示日盘 dayOrderPlaced = 1; } Else { Comment(\"【日盘放弃】美原油已跌破起点 \" + Text(crudeStartPrice) + \",不参与交易\"); dayOrderPlaced = 1; } } } // ========= 三、集合竞价未成交撤单逻辑 ========= If(orderStatus == 1) { // 根据委托所属时段确定开盘时间 Numeric auctionOpenHour = (orderPlacedSession == 1) ? 21 : 9; Numeric auctionOpenMinute = 0; // 判断是否已过开盘时间 + 延迟秒数 Bool isAfterOpen = False; If(currentHour > auctionOpenHour) isAfterOpen = True; Else If(currentHour == auctionOpenHour And currentMinute > auctionOpenMinute) isAfterOpen = True; Else If(currentHour == auctionOpenHour And currentMinute == auctionOpenMinute And currentSecond >= cancelDelaySeconds) isAfterOpen = True; If(isAfterOpen) { CancelOrder(); Comment(\"【未成交撤单】开盘后等待 \" + Text(cancelDelaySeconds) + \" 秒仍未成交,已撤销\"); } } } OnFill(FillRef ordFill) { // 成交时更新状态 If(ordFill.IsBuy And ordFill.OrderID == orderID) { orderStatus = 2; Comment(\"【成交确认】集合竞价委托已成交,委托号=\" + Text(orderID)); } } OnOrder(OrderRef ord) { // 委托被撤销时重置状态 If(ord.IsDeleted And ord.OrderID == orderID) { orderStatus = 0; Comment(\"【委托撤销确认】委托号=\" + Text(orderID)); } } OnExit() { // 策略退出时撤销所有未成交委托 If(orderStatus == 1) CancelOrder(); Comment(\"【策略退出】清理完毕\"); }//------------------------------------------------------------------------// 编译版本 2026/5/12// 版权所有 wangrenquan// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer策略修改和重写的权利//------------------------------------------------------------------------

请用TBQ3这个内容帮我编写一套完整的全自动交易模型美原油加权15点价格到20点49价格不跌破15点价格,内盘沥青期货15点收盘价为准到晚上20点55分自动提交集合竞价比15点收盘价低50个点申报挂单,要是美原油跌破了就不参与交易早上以是一样,美原油23点到早上8点49分不跌破沥青8点55分参与集合竞价申报跌破了就不参与交易要是集合竞价开盘后没有成交,就自动撤单。老师你说的对呀我还没有学会呀,我想用这个我自己的策略实现全自动交易。这个模型怎么写呀、老师帮帮忙呗

回复:社区置顶帖里有收费代写服务的说明,根据说明操作

什么乱七八糟AI写的玩意,狗屁不通