
等级: 新手上路
- 注册:
- 2025-2-24
- 曾用名:
|
// 定义输入参数
INPUT:
N(9, 1, 100), // KD 指标参数
M1(3, 1, 10),
M2(3, 1, 10),
MA1(5, 1, 100), // 移动平均线参数
MA2(10, 1, 100),
StartTime(0900), // 交易开始时间
EndTime(1455), // 交易结束时间
// 定义期货品种及其权重
SYMBOL1('RB000'), WEIGHT1(0.3),
SYMBOL2('AG000'), WEIGHT2(0.2),
SYMBOL3('CU000'), WEIGHT3(0.2),
SYMBOL4('AU000'), WEIGHT4(0.1),
SYMBOL5('TA000'), WEIGHT5(0.2);
// 声明并初始化全局变量
VARIABLE:
kValue = 0,
dValue = 0,
maFast = 0,
maSlow = 0,
isIntraday = FALSE,
maCross = FALSE,
kdCross = FALSE,
IndexValue = 0, // 定义指数值变量
IndexMAFast = 0, // 指数的快速移动平均线
IndexMASlow = 0, // 指数的慢速移动平均线
IsLongPosition = FALSE; // 用于标记是否为多头持仓
// 计算各品种收盘价
VALUE1: CALLSTOCK(SYMBOL1, vtCLOSE, 0);
VALUE2: CALLSTOCK(SYMBOL2, vtCLOSE, 0);
VALUE3: CALLSTOCK(SYMBOL3, vtCLOSE, 0);
VALUE4: CALLSTOCK(SYMBOL4, vtCLOSE, 0);
VALUE5: CALLSTOCK(SYMBOL5, vtCLOSE, 0);
// 计算指数值
IndexValue = VALUE1 * WEIGHT1 + VALUE2 * WEIGHT2 + VALUE3 * WEIGHT3 + VALUE4 * WEIGHT4 + VALUE5 * WEIGHT5;
// 计算指数的移动平均线
IndexMAFast = MA(IndexValue, MA1);
IndexMASlow = MA(IndexValue, MA2);
// 计算交叉信号
maCross = CROSS(IndexMAFast, IndexMASlow);
// 交易逻辑
isIntraday = (TIME >= StartTime) AND (TIME < EndTime);
IF isIntraday THEN BEGIN
IF maCross THEN BEGIN
IF IndexMAFast > IndexMASlow THEN BEGIN
DEBUGOUT('开多仓条件满足'); // 修改1:使用单引号并规范参数
BUY(1, 1, 0); // 指数快速均线上穿慢速均线,开多仓
IsLongPosition = TRUE;
DRAWICON(1, CLOSE, 1, COLORRED, 0, '开多仓');
END
ELSE BEGIN
DEBUGOUT('开空仓条件满足'); // 修改2:使用单引号并规范参数
SELLSHORT(1, 1, 0); // 指数快速均线下穿慢速均线,开空仓
IsLongPosition = FALSE;
DRAWICON(1, CLOSE, 2, COLORGREEN, 0, '开空仓');
END
END;
END;
// 收盘平仓
IF TIME >= EndTime AND HOLDING <> 0 THEN BEGIN
IF IsLongPosition THEN BEGIN
DEBUGOUT('平多仓条件满足'); // 修改3:使用单引号并规范参数
SELL(1, 1, 0); // 平多仓
DRAWICON(1, CLOSE, 3, COLORYELLOW, 0, '平多仓');
END
ELSE BEGIN
DEBUGOUT('平空仓条件满足'); // 修改4:使用单引号并规范参数
SELL(1, 1, 0); // 平空仓
DRAWICON(1, CLOSE, 4, RGB(128, 0, 128), 0, '平空仓');
END
END;
// 绘制指标到分时图
DRAWLINE(1, IndexValue, COLORRED, 1, 1, 'Futures Index');
DRAWLINE(1, IndexMAFast, COLORBLUE, 1, 1, 'Index MA Fast');
DRAWLINE(1, IndexMASlow, COLORGREEN, 1, 1, 'Index MA Slow');
// 在最后一个周期输出调试信息
IF BARPOS = TOTALBARSCOUNT THEN BEGIN
IF NOT ISNaN(IndexValue) AND NOT ISINFINITE(IndexValue) THEN BEGIN
DEBUGOUT('最后一个周期的指数值为%.2f', IndexValue); // 保留格式化参数
END ELSE BEGIN
DEBUGOUT('最后一个周期的指数值无效'); // 修改5:移除多余的参数
END
END
|
|