 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
INPUT:TICK_THRESHOLD(5,1,20,1); // 与支撑/压力位的tick阈值
INPUT:STOP_LOSS_TICKS(15,1,100,1); // 止损tick数
INPUT:LOTS(1,1,100,1); // 开仓手数
TICK_SIZE:=MINDIFF;// 最小变动价位
INPUT:LEVEL_LOOKBACK(20,5,100,1); // 回溯周期数
SUPPORT_A := LLV(LOW,LEVEL_LOOKBACK);// 支撑位A
RESISTANCE_B := HHV(HIGH,LEVEL_LOOKBACK);// 压力位B
// ========== 多空信号条件 ==========
// 计算当前价格与支撑压力位的距离(以tick为单位)
DIST_TO_SUPPORT := (CLOSE - SUPPORT_A) / TICK_SIZE;
DIST_TO_RESISTANCE := (RESISTANCE_B - CLOSE) / TICK_SIZE;
// 多头信号条件
// 连续三根K线中第三根收盘价低于第一根,且接近支撑位,且第四根为阳线
MULTI_COND := REF(CLOSE,2) > CLOSE AND
ABS(DIST_TO_SUPPORT) <= TICK_THRESHOLD AND
CLOSE > OPEN;
// 空头信号条件
// 连续三根K线中第三根收盘价高于第一根,且接近压力位,且第四根为阴线
SHORT_COND := REF(CLOSE,2) < CLOSE AND
ABS(DIST_TO_RESISTANCE) <= TICK_THRESHOLD AND
CLOSE < OPEN;
// 更保守的空头信号(可选)
CONSERVATIVE_SHORT := SHORT_COND AND REF(CLOSE,1) < CLOSE;
// ========== 交易执行 ==========
// 开多仓
IF MULTI_COND AND HOLDING = 0 THEN BEGIN
BUY(1, LOTS, MARKET);
// 设置初始止损
STOP_LOSS_PRICE := SUPPORT_A - STOP_LOSS_TICKS * TICK_SIZE;
// 初始止盈位为压力与支撑差的一半
TAKE_PROFIT_PRICE := SUPPORT_A + (RESISTANCE_B - SUPPORT_A)/2;
END;
// 开空仓
IF (SHORT_COND OR CONSERVATIVE_SHORT) AND HOLDING = 0 THEN BEGIN
BUYSHORT(1, LOTS, MARKET);
// 设置初始止损
STOP_LOSS_PRICE := RESISTANCE_B + STOP_LOSS_TICKS * TICK_SIZE;
// 初始止盈位为压力与支撑差的一半
TAKE_PROFIT_PRICE := RESISTANCE_B - (RESISTANCE_B - SUPPORT_A)/2;
END;
// ========== 动态止盈管理 ==========
// 多头持仓管理
IF HOLDING > 0 THEN BEGIN
// 止损执行
IF LOW <= STOP_LOSS_PRICE THEN
SELL(1, HOLDING, MARKET);
// 动态止盈:当接近新压力位时调整止盈位
IF (RESISTANCE_B - HIGH)/TICK_SIZE <= 3 THEN BEGIN
NEW_RESISTANCE := RESISTANCE_B + (RESISTANCE_B - SUPPORT_A);
TAKE_PROFIT_PRICE := RESISTANCE_B;
RESISTANCE_B := NEW_RESISTANCE; // 更新压力位
END;
// 止盈执行
IF CLOSE <= TAKE_PROFIT_PRICE THEN
SELL(1, HOLDING, MARKET);
END;
// 空头持仓管理
IF HOLDING < 0 THEN BEGIN
// 止损执行
IF HIGH >= STOP_LOSS_PRICE THEN
SELLSHORT(1, HOLDING, MARKET);
// 动态止盈:当接近新支撑位时调整止盈位
IF (LOW - SUPPORT_A)/TICK_SIZE <= 3 THEN BEGIN
NEW_SUPPORT := SUPPORT_A - (RESISTANCE_B - SUPPORT_A);
TAKE_PROFIT_PRICE := SUPPORT_A;
SUPPORT_A := NEW_SUPPORT; // 更新支撑位
END;
// 止盈执行
IF CLOSE >= TAKE_PROFIT_PRICE THEN
SELLSHORT(1, HOLDING, MARKET);
END;
|
|