
等级: 标准版
- 注册:
- 2021-5-20
- 曾用名:
|
INPUT:M(14,1,100,1), N(33,1,100,1), ss(1,1,100,10); // M和N为备用参数,ss为基本交易手数
// === 1. 数据预处理 ===
// 计算加权平均价格,综合开高低收四个价格
A := (3*C + L + O + H)/6;
// === 2. 自适应加权均线计算 ===
// 计算20周期加权移动平均
B1:=(20*A + 19*REF(A,1) + 18*REF(A,2) + 17*REF(A,3) + 16*REF(A,4) +
15*REF(A,5) + 14*REF(A,6) + 13*REF(A,7) + 12*REF(A,8) + 11*REF(A,9))/210;
// 对加权均线进行二次平滑处理
B11:=WMA(B1,55); // 55周期加权移动平均
B11_SMOOTH:=EMA(B11,3); // 3周期指数平滑
// === 3. 趋势强度判断(ADX指标计算)===
// 计算真实波幅(TR)
TRUERANGE:=MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1)));
// 计算正向运动(+DM)和负向运动(-DM)
DIRECTIONAL_PLUS:=IIF(HIGH-REF(HIGH,1)>REF(LOW,1)-LOW,MAX(HIGH-REF(HIGH,1),0),0);
DIRECTIONAL_MINUS:=IIF(REF(LOW,1)-LOW>HIGH-REF(HIGH,1),MAX(REF(LOW,1)-LOW,0),0);
// 对TR和DM进行14周期平滑
SMOOTHED_TR:=EMA(TRUERANGE,14);
SMOOTHED_DM_PLUS:=EMA(DIRECTIONAL_PLUS,14);
SMOOTHED_DM_MINUS:=EMA(DIRECTIONAL_MINUS,14);
// 计算方向指标(+DI和-DI)
DI_PLUS:=100*SMOOTHED_DM_PLUS/SMOOTHED_TR;
DI_MINUS:=100*SMOOTHED_DM_MINUS/SMOOTHED_TR;
// 计算ADX趋势强度指标(6周期平滑)
TREND_STRENGTH:=EMA(ABS(DI_PLUS-DI_MINUS)/(DI_PLUS+DI_MINUS)*100,6);
// === 4. 布林通道计算 ===
// 计算20周期布林通道上下轨
UPPER_BAND:=MA(C,20) + 2*STD(C,20); // 上轨:中轨+2倍标准差
LOWER_BAND:=MA(C,20) - 2*STD(C,20); // 下轨:中轨-2倍标准差
// === 5. 动态手数计算 ===
// 基于波动率调整交易手数
AVG_TRUE_RANGE:=EMA(TRUERANGE,14); // 14周期平均真实波幅
VOL_LEVEL:=AVG_TRUE_RANGE/MA(C,50); // 波动率相对于50日均线的比率
// 根据波动率动态调整手数
DYNAMIC_LOT:=IIF(VOL_LEVEL>0.03, ss*0.5, // 高波动减半
IIF(VOL_LEVEL<0.01, ss*1.5, // 低波动加50%
ss)); // 正常波动保持
LOT:=MAX(DYNAMIC_LOT,1); // 确保最小手数为1
// === 6. 交易信号生成 ===
COND1:=CROSS(B11_SMOOTH,REF(B11_SMOOTH,5)); // 均线上穿5周期前均线
COND2:=CROSS(REF(B11_SMOOTH,5),B11_SMOOTH); // 均线下穿5周期前均线
COND3:=TREND_STRENGTH>20; // 趋势强度大于20
COND4:=C>UPPER_BAND; // 价格突破布林上轨
COND5:=C<LOWER_BAND; // 价格跌破布林下轨
// === 7. 交易执行 ===
// 多头交易
开多:BUY(COND1 AND COND3 AND COND4,LOT,MARKET); // 满足条件时市价开多
平多:SELL(COND2,HOLDING,MARKET); // 均线下穿时平多仓
// 空头交易
开空:BUYSHORT(COND2 AND COND3 AND COND5,LOT,MARKET); // 满足条件时市价开空
平空:SELLSHORT(COND1,ABS(HOLDING),MARKET); // 均线上穿时平空仓
// === 8. 图形标记 ===
// 在K线图上标记买卖信号
DRAWICON(开多,L*0.98,1); // 在最低价下方标记买入信号
DRAWICON(开空,H*1.02,2); // 在最高价上方标记卖出信号
// 根据均线趋势着色
PARTLINE(B11_SMOOTH>REF(B11_SMOOTH,5),B11_SMOOTH,COLORRED); // 上升趋势显示红色
PARTLINE(B11_SMOOTH<=REF(B11_SMOOTH,5),B11_SMOOTH,COLORGREEN); // 下降趋势显示绿色
|
|