
等级: 新手上路
- 注册:
- 2024-6-4
- 曾用名:
|
// 系统参数声明
INPUT:
N(20,5,60), // 均线周期
ATRPeriod(14,5, 30), // TR A计算周期
RISK_PCT(2,1, 5), // 风险系数(总资金百分比)
MINS(5,1.30); // 尾盘提前分钟数
VAR:
MA1(A0),
ATR_VALUE(0),
TrendFilter(FALSE),
D(0),
ZYP(0),
KZYP(0),
KZZ(0),
SPSP0(0),
SS(1),
ZSBOOL(FALSE),
ZYS(0),
ZSS(0),
TimeFilter(FALSE),
KDBool(FALSE),
KKBool(FALSE),
DYNAMIC_X(0),
POS_SIZE(0),
DZSP(0),
KZSP(0),
DZYP(0);
// 初始化变量
MA1 := MA(C, N);
ATR_VALUE := ATR(ATRPeriod);
TrendFilter := C > HHV(REF(C, 1), 3);
// 参数计算动态
DYNAMIC_X := MAX(INTEGER(ATR_VALUE / POINT_VALUE), 2); // 最小2跳
POS_SIZE := INTEGER((CAPITAL * RISK_PCT / 100) / (ATR_VALUE * CONTRACT_UNIT));
// 交易控制时段
TimeFilter := TIME >= 0900 AND TIME <= (226000 - M * 100);
// 复合AND信号
KDBool := TimeFilter AND C > MA1 AND O > MA1 AND TrendFilter AND VOL > MA(VOL, 20) * 1.2 AND RSI(C, 14) > 50 AND HOLDING <= 0;
KKBool := TimeFilter AND C < MA1 AND O < MA1 AND C < LLV(REF(C, 1), 3) AND VOL > MA(VOL, 20) * 2 AND RSI(C, 14) < 50 AND HOLDING >= 0;
// 尾盘模块强平(限价单优化)
IF TIME >= (226000 - 2 * M * 100) AND TIME <= (226000 - M * 100) THEN BEGIN
IF HOLDING > 0 THEN SELL(POS_SIZE, LIMIT, C - DYNAMIC_X * MIN_DIFF);
IF HOLDING < 0 THEN BUYCOVER(POS_SIZE, LIMIT, C + DYNAMIC_X * MIN_DIFF);
END;
// 智能止损止盈体系
IF HOLDING <> 0 THEN BEGIN
// 动态止损:2倍ATR跟踪
DZSP := ENTER_PRICE - 2 * ATR_VALUE;
KZSP := ENTER_PRICE + 2 * ATR_VALUE;
// 动态止盈:1倍ATR突破
DZYP := ENTER_PRICE + ATR_VALUE;
KZYP := ENTER_PRICE - ATR_VALUE;
// 时间止损(持仓超过30根K线)
IF BARSIN(CLOSE, ENTER_TIME) >= 30 AND PROFIT < 0 THEN BEGIN
IF HOLDING > 0 THEN SELL(POS_SIZE, MARKET);
IF HOLDING < 0 THEN BUYCOVER(POS_SIZE, MARKET);
END;
END;
// 信号执行模块(带滑点控制)
BUY(KDBool, POS_SIZE, LIMIT, C + DYNAMIC_X * MIN_DIFF);
BUYSHORT(KKBool, POS_SIZE, LIMIT, C - DYNAMIC_X * MIN_DIFF);
// 强化止损逻辑(带资金曲线保护)
IF (C > KZSP AND HOLDING < 0) OR (C < DZSP AND HOLDING > 0) THEN BEGIN
ZSBOOL := TRUE;
ZSS := MIN(SS + 1, 3); // 仓位最大限制为3
END;
IF (C < KZYP AND HOLDING < 0) OR (C > DZYP AND HOLDING > 0) THEN BEGIN
ZYS := ZYS + 1;
END;
// 仓位动态调整(带回撤控制)
IF ZYS >= ZSS THEN BEGIN
SS := 1;
ZSBOOL := FALSE;
END;
// 实时监控模块
DRAWTEXT(0, 0, '动态ATR:' + NUMTOSTR(ATR_VALUE, 2));
DRAWTEXT(1, 10, '当前仓位:' + NUMTOSTR(HOLDING, 2));
DRAWTEXT(2, 40, '资金曲线:' + NUMTOSTR(EQUITY, 2));
|
|