[PEL] 复制代码 { 多头策略:K线收盘价大于均线且MACD快线高于零轴时开多
止损规则:
1. 初始止损:1倍ATR
2. 浮盈1倍ATR后:止损移到保本点
3. 浮盈3倍ATR后:2倍ATR跟踪止损
4. 浮盈5倍ATR后:3倍ATR跟踪止损
}
// 参数设置
INPUT:MA_PERIOD(20,1,100,1); // 均线周期
INPUT:ATR_PERIOD(14,1,100,1); // ATR周期
INPUT:LOTS(1,1,10,1); // 开仓手数
// 指标计算
MA_LINE : MA(CLOSE,MA_PERIOD);
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26); // MACD快线
DEA := EMA(DIFF,9);
MACD := (DIFF-DEA)*2;
ATR_VALUE := MA(TR,ATR_PERIOD); // ATR值
// 全局变量记录止损位
VARIABLE:STOP_LOSS_PRICE := 0;
VARIABLE:MAX_PROFIT := 0; // 记录最大浮动盈利(ATR倍数)
// 全局变量记录DIFF状态
VARIABLE:DIFF_CROSS_FLAG := 0; // 0:初始状态 1:已小于0
// 更新DIFF状态标志
IF DIFF < 0 THEN DIFF_CROSS_FLAG := 1; // 记录DIFF已小于0
// 开仓条件
// K线脱离均线(收盘价大于均线+1倍ATR)且MACD快线高于零轴
BUY_COND := CLOSE > MA_LINE + ATR_VALUE AND DIFF > 0 AND DIFF_CROSS_FLAG = 1;
// 开多仓
IF BUY_COND AND HOLDING = 0 THEN BEGIN
BUY(1, LOTS, MARKET);
STOP_LOSS_PRICE := ENTERPRICE - ATR_VALUE; // 初始止损位
MAX_PROFIT := 0;
END;
if CLOSE < MA_LINE - ATR_VALUE AND DIFF < 0 then
begin
SELL(1, HOLDING, MARKET);
DIFF_CROSS_FLAG := 0;
end
// 移动止损逻辑
IF HOLDING > 0 THEN BEGIN
// 计算当前浮动盈利(ATR倍数)
CURRENT_PROFIT := (CLOSE - ENTERPRICE) / ATR_VALUE;
// 更新最大浮动盈利
IF CURRENT_PROFIT > MAX_PROFIT THEN
MAX_PROFIT := CURRENT_PROFIT;
// 第二阶段:浮盈3倍ATR后,2倍ATR跟踪止损
IF MAX_PROFIT >= 3 THEN
STOP_LOSS_PRICE := MAX(STOP_LOSS_PRICE, CLOSE - 2*ATR_VALUE);
// 第三阶段:浮盈5倍ATR后,3倍ATR跟踪止损
IF MAX_PROFIT >= 5 THEN
STOP_LOSS_PRICE := MAX(STOP_LOSS_PRICE, CLOSE - 3*ATR_VALUE);
// 止损执行
IF CLOSE <= STOP_LOSS_PRICE THEN
SELL(1, HOLDING, MARKET);
DIFF_CROSS_FLAG := 0;
END; |