 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
INPUT: 手数(1,1,100,1), 趋势周期(50,10,100,5), 波段周期(20,5,50,5),
止损比例(0.01,0.005,0.03,0.001), 止盈比例(0.02,0.01,0.05,0.005),
移动止盈比例(0.005,0.001,0.02,0.001), ADX阈值(25,20,40,1);
VARIABLE: 多头入场价:=0, 空头入场价:=0, 最高盈利:=0, 最低盈利:=0,
多头止损价:=0, 空头止损价:=0, 多头止盈价:=0, 空头止盈价:=0,
多头移动止盈价:=0, 空头移动止盈价:=0, 趋势确认:=0, 波段信号:=0;
INPUT:m(14); // 定义周期参数 m,通常ADX使用14周期
// 计算真实波幅(True Range,TR)及其相关指标
TR1 := SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), m); // 计算m周期真实波幅总和
// 计算正向动量(+DM)和负向动量(-DM)
HD := HIGH - REF(HIGH, 1); // 当日最高价与前一天最高价之差
LD := REF(LOW, 1) - LOW; // 前一天最低价与当日最低价之差
PDM := SUM(IF(HD > 0 AND HD > LD, HD, 0), m); // 计算m周期正向动量(+DM)
MDM := SUM(IF(LD > 0 AND LD > HD, LD, 0), m); // 计算m周期负向动量(-DM)
// 计算方向指标(DI)
PDI := PDM * 100 / TR1; // 正向动向指数(+DI)
MDI := MDM * 100 / TR1; // 负向动向指数(-DI)
// 计算动向指数(DX)和平均趋向指数(ADX)
DX := ABS(PDI - MDI) / (PDI + MDI) * 100; // 动向指数
ADX : =MA(DX, m); // 平均趋向指数
// 计算趋势指标
MA趋势线:MA(CLOSE,趋势周期);
ADX趋势强度:MA(DX, m);
趋势方向:IF(MA趋势线>REF(MA趋势线,1),1,IF(MA趋势线<REF(MA趋势线,1),-1,0));
// 计算波段指标
布林中轨:MA(CLOSE,波段周期);
布林上轨:布林中轨 + 2*STD(CLOSE,波段周期);
布林下轨:布林中轨 - 2*STD(CLOSE,波段周期);
波段信号:=CROSS(CLOSE,布林上轨) - CROSS(布林下轨,CLOSE);
// 过滤震荡行情 - ADX高于阈值才确认趋势有效
趋势确认:=ADX趋势强度 > ADX阈值;
// 交易逻辑
IF TIME>=093000 AND TIME<145000 THEN BEGIN
// 多头入场条件:上升趋势确认 + 价格突破布林上轨
IF 趋势方向=1 AND 趋势确认 AND 波段信号=1 AND HOLDING=0 THEN BEGIN
BUY(1,手数,MARKET);
多头入场价: = ENTERPRICE;
多头止损价: = 多头入场价 * (1 - 止损比例);
多头止盈价: = 多头入场价 * (1 + 止盈比例);
多头移动止盈价: = 多头入场价 * (1 + 移动止盈比例);
最高盈利: = 0;
END
// 空头入场条件:下降趋势确认 + 价格跌破布林下轨
IF 趋势方向=-1 AND 趋势确认 AND 波段信号=-1 AND HOLDING=0 THEN BEGIN
BUYSHORT(1,手数,MARKET);
空头入场价: = ENTERPRICE;
空头止损价: = 空头入场价 * (1 + 止损比例);
空头止盈价: = 空头入场价 * (1 - 止盈比例);
空头移动止盈价: = 空头入场价 * (1 - 移动止盈比例);
最低盈利: = 0;
END
// 多头持仓管理
IF HOLDING>0 THEN BEGIN
// 动态跟踪最高盈利
IF (CLOSE - 多头入场价) > 最高盈利 THEN 最高盈利: = CLOSE - 多头入场价;
// 移动止盈:当盈利超过移动止盈比例后,启动跟踪止盈
IF CLOSE > 多头移动止盈价 THEN BEGIN
多头移动止盈价: = MAX(多头移动止盈价, CLOSE * (1 - 移动止盈比例));
END;
// 止损条件
IF CLOSE <= 多头止损价 THEN SELL(1,手数,MARKET);
// 止盈条件:固定止盈或移动止盈触发
IF CLOSE >= 多头止盈价 OR CLOSE <= 多头移动止盈价 THEN SELL(1,手数,MARKET);
END
// 空头持仓管理
IF HOLDING<0 THEN BEGIN
// 动态跟踪最低盈利
IF (空头入场价 - CLOSE) > 最低盈利 THEN 最低盈利: = 空头入场价 - CLOSE;
// 移动止盈:当盈利超过移动止盈比例后,启动跟踪止盈
IF CLOSE < 空头移动止盈价 THEN BEGIN
空头移动止盈价: = MIN(空头移动止盈价, CLOSE * (1 + 移动止盈比例));
END;
// 止损条件
IF CLOSE >= 空头止损价 THEN SELLSHORT(1,手数,MARKET);
// 止盈条件:固定止盈或移动止盈触发
IF CLOSE <= 空头止盈价 OR CLOSE >= 空头移动止盈价 THEN SELLSHORT(1,手数,MARKET);
END
END
// 收盘前平仓
IF TIME>=145000 THEN BEGIN
IF HOLDING>0 THEN SELL(1,手数,MARKET);
IF HOLDING<0 THEN SELLSHORT(1,手数,MARKET);
// 重置所有变量
多头入场价: = 0;
空头入场价: = 0;
最高盈利: = 0;
最低盈利: = 0;
趋势确认: = False;
END
// 绘制指标
a1:布林上轨;
a2:布林中轨;
a3:布林下轨;
a4:MA趋势线;
a5:ADX趋势强度;
|
|