
等级: 新手上路
- 注册:
- 2025-3-3
- 曾用名:
|

楼主 |
发表于 2025-3-4 11:57
|
显示全部楼层
//======= 核心参数 =======//
INPUT:
TrendPeriod(14,5,30), // 趋势判断周期
OscThreshold(0.3,0.1,0.5),// 震荡阈值
ATRMult(2.5,1,5), // ATR通道乘数
RSIPeriod(14,5,30); // RSI震荡参数
//======= 市场状态判断模块 =======//
// ADX趋势强度指标
TR := SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))), TrendPeriod);
PlusDM := SUM(IF(HIGH-REF(HIGH,1) > REF(LOW,1)-LOW, MAX(HIGH-REF(HIGH,1),0),0), TrendPeriod);
MinusDM := SUM(IF(REF(LOW,1)-LOW > HIGH-REF(HIGH,1), MAX(REF(LOW,1)-LOW,0),0), TrendPeriod);
DIplus := PlusDM / TR * 100;
DIminus := MinusDM / TR * 100;
ADX := MA(ABS(DIplus - DIminus) / (DIplus + DIminus) * 100, TrendPeriod);
// 波动率收缩检测(布林带宽)
BBWidth := (BBANDS(CLOSE,20,2).UpperBand - BBANDS(CLOSE,20,2).LowerBand) / MA(CLOSE,20);
IsOscMarket := ADX < 20 AND BBWidth < OscThreshold; // 震荡市场条件
IsTrendMarket := ADX > 25 AND BBWidth > OscThreshold*1.5; // 趋势市场条件
//======= 双模式信号系统 =======//
// 趋势跟踪信号(当确认趋势时)
TrendEntry := C > VALUEWHEN(IsTrendMarket, HHV(HIGH,5)) AND
VOLUME > MA(VOLUME,20) * 1.5;
TrendExit := C < LLV(LOW,10) OR
(CLOSE < MA(CLOSE,50) AND VOLUME < MA(VOLUME,20)*0.8);
// 震荡反转信号(当市场震荡时)
RSIValue := RSI(CLOSE, RSIPeriod);
OscBuySignal := CROSS(RSIValue,30) AND IsOscMarket AND
CLOSE < BBANDS(CLOSE,20,2).LowerBand * 1.02;
OscSellSignal := CROSS(70,RSIValue) AND IsOscMarket AND
CLOSE > BBANDS(CLOSE,20,2).UpperBand * 0.98;
//======= 自适应交易系统 =======//
// 动态仓位调整(趋势行情加仓)
RiskRatio := IF(IsTrendMarket, 0.04, 0.02); // 趋势市场风险提高
PosSize := INTPART(TACCOUNT(4)*RiskRatio / (ATR(14)*2));
// 混合信号生成
FinalBuySignal := (IsTrendMarket AND TrendEntry) OR
(IsOscMarket AND OscBuySignal);
FinalSellSignal := (IsTrendMarket AND TrendExit) OR
(IsOscMarket AND OscSellSignal);
//======= 执行系统 =======//
IF FinalBuySignal THEN BEGIN
SELLSHORT(HOLDING<0,0,MARKET);
BUY(HOLDING=0,PosSize,MARKET);
// 趋势行情采用移动止损
IF IsTrendMarket THEN
SELL(C < LOWEST(LOW,3),HOLDING,MARKET);
END
IF FinalSellSignal THEN BEGIN
SELL(HOLDING>0,0,MARKET);
BUYSHORT(HOLDING=0,PosSize,MARKET);
// 震荡行情固定止盈
IF IsOscMarket THEN
BUYTOCOVER(C < ENTRYPRICE*0.98,HOLDING,MARKET);
END
//======= 可视化增强 =======//
FILLRGN(IsOscMarket,0,COLORRGB(100,100,200,30)); // 蓝色背景标记震荡
FILLRGN(IsTrendMarket,0,COLORRGB(200,100,100,30));// 红色背景标记趋势
DRAWICON(FinalBuySignal,LOW*0.98,1);
DRAWICON(FinalSellSignal,HIGH*1.02,2); |
|