请各位大神帮看一下我的代码策略,现在的问题是没有出现交易信号,请帮看一下问题所在,万分感激!
代码如下:arams
Numeric LookBackPeriod(20); // 通道周期
Numeric TakeProfitPoints(30); // 止盈点数
Numeric FilterPoints(1); // 突破过滤点数
Vars
// 通道变量
Series<Numeric> ChannelHigh;
Series<Numeric> ChannelLow;
// 信号变量
Bool CrossBelowLower;
Bool CrossAboveUpper;
// 交易管理
Numeric EntryPrice;
Numeric PostEntryHigh; // 多单持仓最高价
Numeric PostEntryLow; // 空单持仓最低价
// 趋势状态
Bool LongTrend;
Bool ShortTrend;
// 通用变量
Numeric MinPoint; // 最小变动值
Numeric FilterValue; // 过滤阈值
Events
OnInit()
{
MinPoint = MinMove * PriceScale;
FilterValue = FilterPoints * MinPoint;
LongTrend = False;
ShortTrend = False;
}
OnBar(ArrayRef<Integer> indexs)
{
// 数据不足时返回
If (CurrentBar < LookBackPeriod) Return;
// 计算价格通道(修正偏移)
ChannelHigh = Highest(High, LookBackPeriod);
ChannelLow = Lowest(Low, LookBackPeriod);
// === 信号检测(实时计算)===
// 使用Close价检测突破,避免盘中假信号[1](@ref)[5](@ref)
CrossBelowLower = low < (ChannelLow[1] - FilterValue);
CrossAboveUpper = High > (ChannelHigh[1] + FilterValue);
// === 初始开仓 ===
If (MarketPosition == 0)
{
If (CrossAboveUpper)
{
Buy(1, Open);
EntryPrice = Open;
PostEntryHigh = High;
LongTrend = True;
ShortTrend = False;
Commentary("初始开多仓 @" + Text(Open));
}
Else If (CrossBelowLower)
{
SellShort(1, Open);
EntryPrice = Open;
PostEntryLow = Low;
ShortTrend = True;
LongTrend = False;
Commentary("初始开空仓 @" + Text(Open));
}
Return;
}
// === 持仓管理 ===
If (MarketPosition != 0)
{
// 更新持仓极值[3](@ref)
If (MarketPosition == 1) {
PostEntryHigh = Max(PostEntryHigh, High);
} Else {
PostEntryLow = Min(PostEntryLow, Low);
}
// === 止盈检查 ===
If (MarketPosition == 1)
{
If (High >= EntryPrice + TakeProfitPoints*MinPoint) {
Sell(0, Max(Open, EntryPrice + TakeProfitPoints*MinPoint));
//ResetTrendState();
Commentary("多单止盈触发 @" + Text(Max(Open, EntryPrice + TakeProfitPoints*MinPoint)));
Return;
}
}
Else If (MarketPosition == -1)
{
If (Low <= EntryPrice - TakeProfitPoints*MinPoint) {
BuyToCover(0, Min(Open, EntryPrice - TakeProfitPoints*MinPoint));
//ResetTrendState();
Commentary("空单止盈触发 @" + Text(Min(Open, EntryPrice - TakeProfitPoints*MinPoint)));
Return;
}
}
// === 反转信号处理 ===
// 多转空(原子操作)[6](@ref)[8](@ref)
If (CrossBelowLower && LongTrend)
{
Sell(0, Open); // 平多仓
SellShort(1, Open); // 开空仓
EntryPrice = Open;
PostEntryLow = Low;
LongTrend = False;
ShortTrend = True;
Commentary("多转空 @" + Text(Open));
Return;
}
// 空转多(原子操作)
If (CrossAboveUpper && ShortTrend)
{
BuyToCover(0, Open); // 平空仓
Buy(1, Open); // 开多仓
EntryPrice = Open;
PostEntryHigh = High;
ShortTrend = False;
LongTrend = True;
Commentary("空转多 @" + Text(Open));
Return;
}
}
// === 可视化 ===
PlotNumeric("通道上轨", ChannelHigh);
PlotNumeric("通道下轨", ChannelLow);
}
// 重置趋势状态函数
//Void ResetTrendState()
哪家ai写的
很简单的逻辑错误
我不可能比我自己高
我也不可能比我自己低
😂
帮改一改可以吗?

这里的high和low 后面都加上[1]回溯一根
至于改完之后是不是你要的效果,不能保证
谢谢,这个我已经改过了。但是还是有其它的问题
不是没信号,你把时间拉到图表最前面,是有信号的。
但是开了空以后,就平不了空,导致后面就出不了信号了
你应该研究一下为什么触发不了平空条件