 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
// 参数设置
INPUT:VOL_INCREASE(30,10,100,1); // 放量百分比阈值
INPUT:STOP_LOSS_PCT1(6,1,20,1); // 第一种策略止损百分比
INPUT:STOP_LOSS_PCT2(10,1,20,1); // 第二种策略止损百分比
INPUT:ADD_POSITION_PCT1(10,1,30,1); // 第一种补仓百分比
INPUT:ADD_POSITION_PCT2(15,1,30,1); // 第二种补仓百分比
// 跨周期调用日线数据
日线持仓量 := openint; // 日线持仓量
日线成交量 := vol; // 日线成交量
日线收盘价 := close; // 日线收盘价
// CCI指标计算
TYP := (HIGH + LOW + CLOSE)/3;
CCI := (TYP - MA(TYP,14))/(0.015 * AVEDEV(TYP,14));
// 条件1:持仓量放量30%以上
COND1 := ANY(日线持仓量/REF(日线持仓量,1) >= 1 + VOL_INCREASE/100, 5);
// 条件2:成交量放量30%以上
COND2 := ANY(日线成交量/REF(日线成交量,1) >= 1 + VOL_INCREASE/100, 5);
// 条件3:CCI多方增仓放量30%以上 (简化处理)
COND3 := ANY(CCI/REF(CCI,1) >= 1 + VOL_INCREASE/100, 5);
// 筛选条件
FILTER_COND := COND1 AND COND2 AND COND3;
// 布林带计算
MID := MA(日线收盘价,20);
UPPER := MID + 2*STD(日线收盘价,20);
LOWER := MID - 2*STD(日线收盘价,20);
// 第一种买入时机:价格在布林中轨下方
BUY_COND1 := FILTER_COND AND 日线收盘价 < MID;
// 第二种买入时机:价格站上5日线后回踩10日线
MA5 := MA(日线收盘价,5);
MA10 := MA(日线收盘价,10);
BUY_COND2 := FILTER_COND AND CROSS(日线收盘价,MA5) AND 日线收盘价 <= MA10;
// 卖出条件:连续两个交易日CCI显示空平信号 (简化处理)
SELL_COND := ALL(CCI > REF(CCI,1), 2);
// 仓位管理
VARIABLE:POSITION1 := 0; // 第一种策略仓位
VARIABLE:POSITION2 := 0; // 第二种策略仓位
// 第一种策略交易逻辑
IF BUY_COND1 THEN BEGIN
// 初始开仓2成
BUY(1, 20%, MARKET);
POSITION1 := 20;
// 下跌10%补仓3成
IF 日线收盘价/ENTERPRICE <= 1 - ADD_POSITION_PCT1/100 AND POSITION1 < 50 THEN BEGIN
BUY(1, 30%, MARKET);
POSITION1 := POSITION1 + 30;
END
// 5成仓位亏损10%补仓4成
IF POSITION1 >= 50 AND AVGENTERPRICE/日线收盘价 >= 1 + ADD_POSITION_PCT1/100 THEN BEGIN
BUY(1, 40%, MARKET);
POSITION1 := POSITION1 + 40;
END
// 止损逻辑
IF POSITION1 > 0 AND AVGENTERPRICE/日线收盘价 >= 1 + STOP_LOSS_PCT1/100 THEN BEGIN
SELL(1, 100%, MARKET);
POSITION1 := 0;
END
END
// 第二种策略交易逻辑
IF BUY_COND2 THEN BEGIN
// 初始开仓3成
BUY(1, 30%, MARKET);
POSITION2 := 30;
// 下跌15%补仓6成
IF 日线收盘价/ENTERPRICE <= 1 - ADD_POSITION_PCT2/100 AND POSITION2 < 60 THEN BEGIN
BUY(1, 60%, MARKET);
POSITION2 := POSITION2 + 60;
END
// 止损逻辑
IF POSITION2 > 0 AND AVGENTERPRICE/日线收盘价 >= 1 + STOP_LOSS_PCT2/100 THEN BEGIN
SELL(1, 100%, MARKET);
POSITION2 := 0;
END
END
// 平仓逻辑
IF SELL_COND AND (POSITION1 > 0 OR POSITION2 > 0) THEN BEGIN
SELL(1, 100%, MARKET);
POSITION1 := 0;
POSITION2 := 0;
END
|
|