为啥一直提示17行缺少分号??出bug了吗,明明有啊!

Params Numeric Length_day(30); // 日线MA周期 Numeric FastLength(12); // MACD快线周期 Numeric SlowLength(26); // MACD慢线周期 Numeric SignalLength(9); // MACD信号线周期 Vars Numeric ma_day; // 日线MA30 Numeric ma_day_prev; // 前一根日线MA30 Numeric ma_day_prev_prev; // 前两根日线MA30 Numeric macd_diff; // MACD快线 Numeric macd_dea; // MACD慢线 Numeric macd_diff_prev; // 前一根MACD快线 Numeric macd_dea_prev; // 前一根MACD慢线 Bool golden_cross; // 金叉信号 Bool death_cross; // 死叉信号 Numeric daily_bar_count = 0; // 日线数据计数器 Numeric ma_day_history[100]; // 静态数组存储历史值 Initialize() { SubscribeBar(Symbol, "5分钟", BeginDateTime); SubscribeBar(Symbol, "日线", BeginDateTime); // 初始化历史数组 For Numeric i = 0 To 99; // For循环行末加分号 { ma_day_history[i] = 0; }; // 代码块结束后加分号 return 0; } OnBar(ArrayRef<Integer> indexs) { // 计算日线MA30 ma_day = Data[1].AverageFC(Data[1].Close, Length_day); ma_day_prev_prev = ma_day_prev; ma_day_prev = ma_day_history[0]; // 仅在日线更新时保存MA30值 if (BarIndex(1) > 0); // 修正:条件语句后加分号(即使没有代码块) { // 移动历史数据 For Numeric i = 99 DownTo 1; // For循环行末加分号 { ma_day_history[i] = ma_day_history[i-1]; }; // 代码块结束后加分号 // 保存新值 ma_day_history[0] = ma_day; daily_bar_count++; }; // if代码块结束后加分号 // 计算5分钟MACD macd_diff_prev = macd_diff; macd_dea_prev = macd_dea; Numeric ema_fast = Data[0].EMA(Data[0].Close, FastLength); Numeric ema_slow = Data[0].EMA(Data[0].Close, SlowLength); macd_diff = ema_fast - ema_slow; macd_dea = Data[0].EMA(macd_diff, SignalLength); // 判断交叉信号 golden_cross = (macd_diff_prev <= macd_dea_prev) && (macd_diff > macd_dea); death_cross = (macd_diff_prev >= macd_dea_prev) && (macd_diff < macd_dea); // 交易逻辑 if (daily_bar_count >= 3); // 修正:条件语句后加分号 { // 上升趋势:日线MA30向上 if (ma_day_prev_prev < ma_day_prev); // 修正:条件语句后加分号 { // 金叉开多 if (golden_cross && MarketPosition <= 0); // 修正:条件语句后加分号 { // 平空仓 if (MarketPosition < 0); // 修正:条件语句后加分号 BuyToCover(Abs(MarketPosition), Close); // 开多仓 Buy(1, Close); Print("【开多】时间: " + DateTimeToString(CurrentTime) + ", 日线MA30: " + Text(ma_day)); }; // if代码块结束后加分号 // 死叉平多 if (death_cross && MarketPosition > 0); // 修正:条件语句后加分号 { Sell(MarketPosition, Close); Print("【平多】时间: " + DateTimeToString(CurrentTime)); }; // if代码块结束后加分号 }; // if代码块结束后加分号 // 下降趋势:日线MA30向下 else if (ma_day_prev_prev > ma_day_prev); // 修正:条件语句后加分号 { // 死叉开空 if (death_cross && MarketPosition >= 0); // 修正:条件语句后加分号 { // 平多仓 if (MarketPosition > 0); // 修正:条件语句后加分号 Sell(MarketPosition, Close); // 开空仓 SellShort(1, Close); Print("【开空】时间: " + DateTimeToString(CurrentTime) + ", 日线MA30: " + Text(ma_day)); }; // if代码块结束后加分号 // 金叉平空 if (golden_cross && MarketPosition < 0); // 修正:条件语句后加分号 { BuyToCover(Abs(MarketPosition), Close); Print("【平空】时间: " + DateTimeToString(CurrentTime)); }; // if代码块结束后加分号 }; // else if代码块结束后加分号 }; // if代码块结束后加分号 // 绘图 PlotNumeric("MACD_DIF", macd_diff); PlotNumeric("MACD_DEA", macd_dea); PlotNumeric("MA_Day", ma_day); }

定义方式不对Numeric daily_bar_count (0);

回复:现在TBQ3语法有变化了?一眼看上去好多问题我还在用TBQ实在学不会TBQ3😑

回复:quant也不能在vars域里这么定义啊!

回复:打好基础,再用AI

回复:只能说 Q3超级好用我大概刚弄好一个策略的时候转的Q3直接复制过来的,完全没有问题,语法一样的感觉设计更友好,更好上手来尝尝 包你真香

回复:👌

回复:dp里面经常这样定义,而且好像编译能通过。AI经常在代码主体里面定义变量而不在变量定义的区域定义,还有AI不会自己定义序列变量,只会定义普通变量。dp最明显的特征就是if语句,if和后面的()之间一定有空格。这位兄弟的代码我感觉99%的概率是AI写的。

回复:👍

回复:dp是这样定义的,因为很多计算机语言是这样写的但是tbl是用()来赋初值的