请教老师,我写一个MACD的背离买入法,为什么软件一直识别不出
// 定义参数Params Numeric FastLength(12); // 快速EMA周期 Numeric SlowLength(26); // 慢速EMA周期 Numeric SignalLength(9); // 信号线周期 Numeric BuyLots(1); // 买入手数 Numeric SellLots(1); // 卖出手数 Numeric StopLossPercent(2); // 止损百分比End// 定义变量Vars NumericSeries MACDValue; // MACD值 NumericSeries SignalLine; // 信号线 NumericSeries MACDDiff; // MACD与信号线的差值 NumericSeries PriceLowest; // 最低价 NumericSeries PriceHighest;// 最高价 NumericSeries MACDLowest; // MACD最低值 NumericSeries MACDHighest; // MACD最高值 Numeric DivergenceCountBuy(0); // 底背离计数器(用于买入) Numeric DivergenceCountSell(0); // 顶背离计数器(用于卖出) Bool BuyCondition; // 买入条件 Bool SellCondition; // 卖出条件 Numeric StopLossPrice; // 止损价格End// 计算MACD和信号线MACDValue = MACD(Close, FastLength, SlowLength);SignalLine = EMA(MACDValue, SignalLength);MACDDiff = MACDValue - SignalLine;// 计算最低价、最高价和MACD最低值、最高值PriceLowest = Lowest(Close, SlowLength);PriceHighest = Highest(Close, SlowLength);MACDLowest = Lowest(MACDValue, SlowLength);MACDHighest = Highest(MACDValue, SlowLength);// 判断MACD底背离条件(买入条件)BuyCondition = Close < PriceLowest[1] AND MACDValue > MACDLowest[1];// 判断MACD顶背离条件(卖出条件)SellCondition = Close > PriceHighest[1] AND MACDValue < MACDHighest[1];// 底背离计数器(用于买入)If (BuyCondition) Then DivergenceCountBuy = DivergenceCountBuy + 1;// 顶背离计数器(用于卖出)If (SellCondition) Then DivergenceCountSell = DivergenceCountSell + 1;// 在第二次底背离时执行买入操作If (DivergenceCountBuy == 2 AND MarketPosition <> 1) ThenBegin Buy(BuyLots, Open); StopLossPrice = EntryPrice * (1 - StopLossPercent / 100); // 设置买入后的止损价格 DivergenceCountBuy = 0; // 重置计数器End// 在第一次顶背离时执行平多操作If (DivergenceCountSell == 1 AND MarketPosition == 1) ThenBegin Sell(BuyLots, Open); DivergenceCountSell = 0; // 重置计数器End// 在第二次顶背离时执行卖出操作If (DivergenceCountSell == 2 AND MarketPosition <> -1) ThenBegin SellShort(SellLots, Open); StopLossPrice = EntryPrice * (1 + StopLossPercent / 100); // 设置卖出后的止损价格 DivergenceCountSell = 0; // 重置计数器End// 在第一次底背离时执行平空操作If (DivergenceCountBuy == 1 AND MarketPosition == -1) ThenBegin BuyToCover(SellLots, Open); DivergenceCountBuy = 0; // 重置计数器End
tb没有这种语法。一般来说,谁写的代码,就问谁。ai写的,那你应该问ai这写的什么东西,为什么不能用。社区回答问题主要是回答学习过程中遇到不懂的地方。像这种完全不知所谓的问题全是瞎写的没法回答啊。
Params Numeric FastLength(12); // 快速EMA周期 Numeric SlowLength(26); // 慢速EMA周期 Numeric SignalLength(9); // 信号线周期 Numeric BuyLots(1); // 买入手数 Numeric SellLots(1); // 卖出手数 Numeric StopLossPercent(2); // 止损百分比// 定义变量Vars NumericSeries MACDValue; // MACD值 NumericSeries SignalLine; // 信号线 NumericSeries MACDDiff; // MACD与信号线的差值 NumericSeries PriceLowest; // 最低价 NumericSeries PriceHighest;// 最高价 NumericSeries MACDLowest; // MACD最低值 NumericSeries MACDHighest; // MACD最高值 Numeric DivergenceCountBuy(0); // 底背离计数器(用于买入) Numeric DivergenceCountSell(0); // 顶背离计数器(用于卖出) Bool BuyCondition; // 买入条件 Bool SellCondition; // 卖出条件 Numeric StopLossPrice; // 止损价格Events OnBar(ArrayRef<Integer> indexs){// 计算MACD和信号线MACDValue = MACD(Close, FastLength, SlowLength);SignalLine = EMA(MACDValue, SignalLength);MACDDiff = MACDValue - SignalLine;// 计算最低价、最高价和MACD最低值、最高值PriceLowest = Lowest(Close, SlowLength);PriceHighest = Highest(Close, SlowLength);MACDLowest = Lowest(MACDValue, SlowLength);MACDHighest = Highest(MACDValue, SlowLength);// 判断MACD底背离条件(买入条件)BuyCondition = Close < PriceLowest[1] AND MACDValue > MACDLowest[1];// 判断MACD顶背离条件(卖出条件)SellCondition = Close > PriceHighest[1] AND MACDValue < MACDHighest[1];// 底背离计数器(用于买入)If (BuyCondition) { DivergenceCountBuy = DivergenceCountBuy + 1;}// 顶背离计数器(用于卖出)If (SellCondition) { DivergenceCountSell = DivergenceCountSell + 1;}// 在第二次底背离时执行买入操作If (DivergenceCountBuy == 2 AND MarketPosition <> 1) { Buy(BuyLots, Open); StopLossPrice = EntryPrice * (1 - StopLossPercent / 100); // 设置买入后的止损价格 DivergenceCountBuy = 0; // 重置计数器}// 在第一次顶背离时执行平多操作If (DivergenceCountSell == 1 AND MarketPosition == 1) { Sell(BuyLots, Open); DivergenceCountSell = 0; // 重置计数器}// 在第二次顶背离时执行卖出操作If (DivergenceCountSell == 2 AND MarketPosition <> -1) { SellShort(SellLots, Open); StopLossPrice = EntryPrice * (1 + StopLossPercent / 100); // 设置卖出后的止损价格 DivergenceCountSell = 0; // 重置计数器}// 在第一次底背离时执行平空操作If (DivergenceCountBuy == 1 AND MarketPosition == -1) { BuyToCover(SellLots, Open); DivergenceCountBuy = 0; // 重置计数器}这样修改应该能识别 如果还是无法识别 NumericSeries 就用TBquant升级代码
看样子是AI写的代码我也用ai写,解决方法是代码里不要用begin End 用Events OnBar(ArrayRef<Integer> indexs)代替 。但是TB平台很变态,信号闪烁问题超多,影响心态
怎么最近个把月全是这类代码洋洋洒洒一大堆甩脸上逻辑上没大问题但是又不符合tbq基本机制是被坑买来的?大概率是deepseek给的
回复:begin end一大堆 就是DS的