// 定义参数
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) Then
Begin
Buy(BuyLots, Open);
StopLossPrice = EntryPrice * (1 - StopLossPercent / 100); // 设置买入后的止损价格
DivergenceCountBuy = 0; // 重置计数器
End
// 在第一次顶背离时执行平多操作
If (DivergenceCountSell == 1 AND MarketPosition == 1) Then
Begin
Sell(BuyLots, Open);
DivergenceCountSell = 0; // 重置计数器
End
// 在第二次顶背离时执行卖出操作
If (DivergenceCountSell == 2 AND MarketPosition <> -1) Then
Begin
SellShort(SellLots, Open);
StopLossPrice = EntryPrice * (1 + StopLossPercent / 100); // 设置卖出后的止损价格
DivergenceCountSell = 0; // 重置计数器
End
// 在第一次底背离时执行平空操作
If (DivergenceCountBuy == 1 AND MarketPosition == -1) Then
Begin
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的