//------------------------------------------------------------------------
// 简称: EnhancedDualMA_Strategy
// 类型: 多周期复合策略
//------------------------------------------------------------------------
Params
// 基础参数
Numeric Capital(20000); // 初始资金
Numeric RiskPerTrade(0.01); // 单笔风险比例
// 三重滤网参数
Numeric TrendPeriod(50); // 趋势确认EMA周期(周线)
Numeric EntryFastLength(5); // 入场快线周期(日线)
Numeric EntrySlowLength(20); // 入场慢线周期(日线)
Numeric RSI_Period(14); // RSI周期
Numeric ATR_Period(14); // 波动率周期
Vars
// 多周期变量
Series<Numeric> WeeklyEMA; // 周线趋势
Series<Numeric> DailyMA_Fast; // 日线快线
Series<Numeric> DailyMA_Slow; // 日线慢线
Series<Numeric> RSI; // 震荡指标
Series<Numeric> ATRValue; // 波动率
// 交易管理
Numeric ContractSize; // 合约乘数
Numeric MaxLots; // 最大仓位
Numeric StopDistance; // 动态止损
Numeric TargetDistance; // 动态止盈
BoolSeries TrendConfirmed; // 趋势确认标志
Begin
//==== 多周期数据获取 ====//
// 周线EMA趋势判断(通过日线数据模拟)
If(Date != Date[1]) {
WeeklyEMA = XAverage(C, TrendPeriod);
}
// 日线双均线(通过5分钟数据模拟)
DailyMA_Fast = AverageFC(C, EntryFastLength*48); // 5分钟->日线换算
DailyMA_Slow = AverageFC(C, EntrySlowLength*48);
//==== 指标计算 ====//
RSI = RSI_FC(C, RSI_Period);
ATRValue = AvgTrueRange(ATR_Period);
//==== 动态仓位计算 ====//
ContractSize = ContractUnit(ContractID);
StopDistance = 1.5 * ATRValue; // 1.5倍ATR止损
TargetDistance = 3 * ATRValue; // 3倍ATR止盈
MaxLots = IntPart((Capital * RiskPerTrade) / (StopDistance * ContractSize));
MaxLots = Max(MaxLots, 1); // 至少1手
//==== 三重滤网逻辑 ====//
// 第一层滤网 - 趋势方向
TrendConfirmed = (C > WeeklyEMA) && (DailyMA_Fast > DailyMA_Slow);
//==== 交易信号生成 ====//
If(TrendConfirmed) { // 多头趋势
// 第二层滤网 - RSI过滤
If(RSI < 70 && CrossOver(C, DailyMA_Fast)) {
// 第三层滤网 - 价格突破
If(C > Highest(H, 3)) {
Buy(MaxLots, C);
SetStopLoss(C - StopDistance);
SetProfitTarget(C + TargetDistance);
}
}
}
Else { // 空头趋势
If(RSI > 30 && CrossUnder(C, DailyMA_Fast)) {
If(C < Lowest(L, 3)) {
SellShort(MaxLots, C);
SetStopLoss(C + StopDistance);
SetProfitTarget(C - TargetDistance);
}
}
}
//==== 风险管理 ====//
// 日内强制平仓
If(Time >= 0.1455) {
Sell(0, C);
BuyToCover(0, C);
}
// 单日最大亏损控制
If(NumericProfitLoss < -Capital*0.03) {
Sell(0, C);
BuyToCover(0, C);
}
End
//------------------------------------------------------------------------
// 配套函数库
//------------------------------------------------------------------------
// 合约乘数查询函数
Function Numeric ContractUnit(String ContractID)
Begin
Switch(ContractID)
Case "rb": Return 10; // 螺纹钢
Case "TA": Return 5; // PTA
Case "m": Return 10; // 豆粕
Default: Return 1;
EndSwitch
End
// 多品种参数适配
Function SetParameters(String ContractID)
Begin
Switch(ContractID)
Case "rb": // 螺纹钢
EntryFastLength = 5;
EntrySlowLength = 25;
RSI_Period = 14;
Break;
Case "TA": // PTA
EntryFastLength = 8;
EntrySlowLength = 40;
RSI_Period = 10;
Break;
Case "m": // 豆粕
EntryFastLength = 6;
EntrySlowLength = 30;
RSI_Period = 12;
Break;
EndSwitch
End
社区置顶有付费编写服务。
老师们不看AI写的代码
不用ai更不会了