
等级: 新手上路
- 注册:
- 2025-3-12
- 曾用名:
|
//@version=1
INPUT: MA240周期(240), MA20周期(20), MA60周期(60), 手数(6,1,100,1), 移动止损点数(50);
// 均线系统
MA240:=MA(CLOSE,MA240周期);
MA20:=MA(CLOSE,MA20周期);
MA60:=MA(CLOSE,MA60周期);
// 方向判断模块
多空方向 := IFF(CLOSE >= MA240, 1, -1); // 1为多头方向,-1为空头方向
// 交易信号模块
金叉条件 := CROSS(MA20, MA60) AND CLOSE >= MA60;
死叉条件 := CROSS(MA60, MA20) AND CLOSE <= MA60;
// 止损模块(使用全局变量记录止损位)
EXTGBDATA('止损位'); // 初始化全局变量
IF HOLDING <> 0 THEN BEGIN
// 多头仓位处理
IF HOLDING > 0 THEN BEGIN
IF (CLOSE - AVGENTERPRICE) >= 移动止损点数*MINDIFF THEN BEGIN
EXTGBDATASET('止损位', AVGENTERPRICE); // 移动止损至成本价(保本)
END ELSE BEGIN
EXTGBDATASET('止损位', AVGENTERPRICE - 移动止损点数*MINDIFF); // 初始止损
END
END
// 空头仓位处理(新增部分)
ELSE BEGIN
IF (AVGENTERPRICE - CLOSE) >= 移动止损点数*MINDIFF THEN BEGIN
EXTGBDATASET('止损位', AVGENTERPRICE); // 移动止损至成本价(保本)
END ELSE BEGIN
EXTGBDATASET('止损位', AVGENTERPRICE + 移动止损点数*MINDIFF); // 初始止损
END
END
END
// 主交易系统
IF HOLDING = 0 THEN BEGIN
// 开多条件(需同时满足方向和多头信号)
IF 多空方向 = 1 AND 金叉条件 THEN BEGIN
BUY(1, 手数, MARKET);
EXTGBDATASET('止损位', CLOSE - 移动止损点数*MINDIFF); // 设置初始止损
END
// 开空条件(需同时满足方向和空头信号)
IF 多空方向 = -1 AND 死叉条件 THEN BEGIN
BUYSHORT(1, 手数, MARKET);
EXTGBDATASET('止损位', CLOSE + 移动止损点数*MINDIFF); // 设置初始止损
END
END ELSE BEGIN
// 平仓条件
IF (HOLDING > 0 AND (死叉条件 OR CLOSE <= EXTGBDATA('止损位'))) OR
(HOLDING < 0 AND (金叉条件 OR CLOSE >= EXTGBDATA('止损位'))) THEN BEGIN
SELL(1, ABS(HOLDING), MARKET);
SELLSHORT(1, ABS(HOLDING), MARKET);
END
END
// 仓位管理模块
IF HOLDING > 手数 THEN BEGIN
SELL(1, HOLDING - 手数, MARKET); // 强制保持最大持仓
END
IF HOLDING < -手数 THEN BEGIN
SELLSHORT(1, ABS(HOLDING) - 手数, MARKET);
END
// 状态监控
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
止损价位:EXTGBDATA('止损位'),COLORRED;
|
-
|