// ---------- 信号生成(本K线未交易时执行)---------
IF TradedThisBar = 0 THEN BEGIN
// 多空突破信号(加入成交量过滤)
VolFilter := VOL > MA(VOL, 20) * 1.5;
开多信号 := VolFilter AND C > HC30 AND CROSS(H, UPPER);
开空信号 := VolFilter AND C < LC30 AND CROSS(LOWER, L);
// 动态止损价(基于持仓最高/低价)
IF Position = 1 THEN StopLossLong := HIGHEST(H, D) - 1.5 * ATR;
IF Position = -1 THEN StopLossShort := LOWEST(L, D) + 1.5 * ATR;
// ===== 指令执行 =====
// 1. 先处理平仓
IF 平多信号 AND Position = 1 THEN BEGIN
TSELL(1, 0, LMT, StopLossLong - MINDIFF*2); // 滑点补偿
Position := 0;
TradedThisBar := 1;
END
ELSE IF 平空信号 AND Position = -1 THEN BEGIN
TSELLSHORT(1, 0, LMT, StopLossShort + MINDIFF*2);
Position := 0;
TradedThisBar := 1;
END
// 2. 再处理开仓(平仓后若未交易则开仓)
IF TradedThisBar = 0 THEN BEGIN
IF 开多信号 AND Position <> 1 THEN BEGIN
EntryPrice := MAX(O, UPPER) + MINDIFF*2; // 突破价+滑点
TBUY(1, UnitSize, LMT, EntryPrice);
Position := 1;
HighestEntry := EntryPrice; // 记录入场价
TradedThisBar := 1;
END
ELSE IF 开空信号 AND Position <> -1 THEN BEGIN
EntryPrice := MIN(O, LOWER) - MINDIFF*2;
TBUYSHORT(1, UnitSize, LMT, EntryPrice);
Position := -1;
LowestEntry := EntryPrice;
TradedThisBar := 1;
END
END
END