//------------------------------------------------------------------------
// 简称: TripleMA_ATR_Strategy
// 名称: 三周期均线+ATR过滤策略
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------
Params
Numeric MA_Period(60); // 均线周期
Numeric ATR_Period(14); // ATR周期
Numeric StopLossPct(1); // 止损百分比(1%)
Numeric TrailMultiplier(2.0); // ATR移动止盈倍数
Numeric ATR_Filter(1.5); // ATR波动过滤阈值
Vars
//----- 多周期数据声明 -----
Series<Numeric> MA_H1; // 1小时均线
Series<Numeric> MA_M15; // 15分钟均线
Series<Numeric> MA_M3; // 3分钟均线
//----- 过滤指标 -----
Series<Numeric> ATR_Val; // ATR值
//----- 交易信号 -----
Numeric BuyPrice; // 入场价格
Numeric TrailStop; // 跟踪止损价
Series<Numeric> HighSinceEntry; // 入场后最高价
Series<Bool> SignalFlag; // 信号触发标志(新增调试标志)
Events
OnBar(ArrayRef<Integer> indexs)
{
//====== 多周期数据调用 ======
// 确保主图周期为3分钟,并加载1小时、15分钟数据
MA_H1 = AverageFC(CloseD(1), MA_Period); // 1小时均线
MA_M15 = AverageFC(CloseD(2), MA_Period); // 15分钟均线
MA_M3 = AverageFC(Close, MA_Period); // 3分钟均线
//====== 指标计算 ======
ATR_Val = AvgTrueRange(ATR_Period); // ATR计算
//====== 信号生成 ======
Bool MA_Bull =
MA_H1[0] > MA_H1[1] && // 1小时均线上涨
MA_M15[0] > MA_M15[1] && // 15分钟均线上涨
MA_M3[0] > MA_M3[1]; // 3分钟均线上涨
//====== 交易逻辑 ======
If(MarketPosition == 0 && MA_Bull && ATR_Val > ATR_Filter && BarStatus == 2)
{
Buy(1, Open);
BuyPrice = Open;
TrailStop = BuyPrice * (1 - StopLossPct * 0.01); // 初始止损
HighSinceEntry = High; // 初始化入场后最高价
SignalFlag = True; // 标记信号已触发
Commentary("三周期多头入场 [价格=" + Text(Open) +
", ATR=" + Text(ATR_Val) +
", MA_H1=" + Text(MA_H1[0]) + "]");
}
//====== 移动止盈 ======
If(MarketPosition == 1)
{
// 动态更新入场后最高价
If(High > HighSinceEntry)
{
HighSinceEntry = High;
Commentary("更新最高价: " + Text(HighSinceEntry));
}
// 计算跟踪止损价:最高价回撤 TrailMultiplier×ATR
TrailStop = Max(TrailStop, HighSinceEntry - TrailMultiplier * ATR_Val);
没有开平信号说明你的开平条件有问题,自己计算一下数值设置的对不对