ATRVal = AvgTrueRange(ATRLength);编译时显示无法识别字符串ATRVal。请文怎么改?
我建议先系统学习一下语法。
请发完整代码
// 文华8麦语言趋势策略(最终修正版)
// 2024.04更新(兼容WH8 V8.2+)
// 修正内容:调整平仓信号写法,移除手数参数
//============== 参数输入区 ==============//
INPUT:
// MACD参数
SHORT(12,5,50), // MACD短期EMA
LONG(26,20,100), // MACD长期EMA
M(9,5,20), // DEA周期
X(3,2,5), // MACD连续确认周期
// ADX参数
ADX_PERIOD(14,10,20), // ADX周期
ADX_THRESHOLD(25,20,30),// ADX趋势阈值
// 时间过滤
TRADE_START(930,0,2359),// 交易开始时间
TRADE_END(1455,0,2359), // 交易结束时间
// 仓位管理参数
RISK_RATIO(0.02,0.01,0.05), // 单笔风险比例(1%-5%)
MAX_POS(3,1,10), // 最大持仓手数
// 止损参数
ATR_PERIOD(14,10,20), // ATR计算周期
ATR_MULTIPLE(2,1,3), // ATR止损倍数
TRAILING_STOP(1,0,1); // 是否启用移动止损(0:否,1:是)
//============== 指标计算区 ==============//
// 基础指标
DIFF := EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA := EMA(DIFF,M);
MACD := 2*(DIFF-DEA);
// 趋势强度指标
DI_PLUS := DIPLUS(ADX_PERIOD);
DI_MINUS := DIMINUS(ADX_PERIOD);
ADX_VAL := ADX(ADX_PERIOD);
// 波动率指标
TR := MAX(MAX(HIGH-LOW,ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR := MA(TR,ATR_PERIOD);
// 多时间框架确认(引用日线趋势)
DAY_TREND_UP := STKINDI('','MACD.DIFF',0,26,12,9) > STKINDI('','MACD.DEA',0,26,12,9);
DAY_TREND_DOWN := STKINDI('','MACD.DIFF',0,26,12,9) < STKINDI('','MACD.DEA',0,26,12,9);
//============== 仓位计算区 ==============//
// 动态仓位计算(基于ATR和风险比例)
CAPITAL := 1000000; // 假设初始资金100万
UNIT_SIZE := INTPART((CAPITAL*RISK_RATIO)/(ATR*MULTIPLIER/10));
POS_SIZE := MIN(UNIT_SIZE,MAX_POS);
//============== 信号过滤条件 ==============//
TRADE_TIME := TIME >= TRADE_START AND TIME < TRADE_END; // 时段过滤
TREND_UP := ADX_VAL > ADX_THRESHOLD AND DI_PLUS > DI_MINUS AND DAY_TREND_UP; // 上升趋势(多时间框架)
TREND_DOWN := ADX_VAL > ADX_THRESHOLD AND DI_MINUS > DI_PLUS AND DAY_TREND_DOWN; // 下降趋势(多时间框架)
MACD_UP := COUNT(MACD>REF(MACD,1),X)=X; // 连续X周期上涨
MACD_DOWN := COUNT(MACD<REF(MACD,1),X)=X; // 连续X周期下跌
NO_HOLDING := BKVOL + SKVOL = 0; // 无持仓状态
//============== 止损计算 ==============//
// 初始止损价
LONG_STOP_PRICE := ENTERP
你这个不是我们软件的代码,无法在我们的软件上使用
更不用说你的代码里面根本没有这一行 ATRVal = AvgTrueRange(ATRLength)
Params
Numeric ATRLength(14); // ATR计算周期
Numeric VolRatioThreshold(2); // 量能放大阈值
Numeric MinATR(5); // 最小ATR值过滤
Numeric StopLossFactor(1.5); // 止损ATR倍数
Numeric TakeProfitFactor(2); // 止盈ATR倍数
Numeric PatternConfirmBars(3);// 形态确认K线数
Vars
NumericSeries ATRVal(0); // ATR值
NumericSeries VolRatio(0); // 当前成交量/平均成交量
BoolSeries IsVolumeSpike(False); // 是否放量
BoolSeries IsReversalSignal(False); // 反转信号
NumericSeries HH(0); // 最近高点
NumericSeries LL(0); // 最近低点
BoolSeries IsTopPattern(False); // 顶部形态
BoolSeries IsBottomPattern(False); // 底部形态
Numeric myEntryPrice(0); // 入场价格
Numeric myStopLoss(0); // 止损位
Numeric myTakeProfit(0); // 止盈位
// 计算ATR指标
ATRVal = AverageTrueRange(ATRLength);
// 计算量能比率(当前成交量/过去20周期平均成交量)
VolRatio = Volume / Average(Volume, 20);
IsVolumeSpike = VolRatio >= VolRatioThreshold;
// 识别高低点(用于形态判断)
HH = Highest(High, 5);
LL = Lowest(Low, 5);
// 简单顶部形态判断(三顶或双顶)
IsTopPattern = (High[1] == HH[1]) And (High[2] < High[1]) And (High[3] < High[2])
And (Close < Open) And (Close[1] < Open[1]);
// 简单底部形态判断(三底或双底)
IsBottomPattern = (Low[1] == LL[1]) And (Low[2] > Low[1]) And (Low[3] > Low[2])
And (Close > Open) And (Close[1] > Open[1]);
// 反转信号条件(量能配合ATR)
IsReversalSignal = IsVolumeSpike And (ATRVal >= MinATR) And
((IsTopPattern And (Close < Low[1])) Or
(IsBottomPattern And (Close > High[1])));
// 交易逻辑
If IsReversalSignal Then
// 多头反转信号
If IsBottomPattern And MarketPosition <> 1 Then
myEntryPrice = Close;
myStopLoss = Low[1] - StopLossFactor * ATRVal;
myTakeProfit = myEntryPrice + TakeProfitFactor * ATRVal;
Buy(1, myEntryPrice);
Commentary("多头入场 价格:" + Text(myEntryPrice) +
" 止损:" + Text(myStopLoss) +
" 止盈:" + Text(myTakeProfit));
SetStopLoss(myStopLoss);
SetTakeProfit(myTakeProfit);
EndIf
// 空头反转信号
If IsTopPattern And MarketPosition <> -1 Then
myEntryPrice = Close;
myStopLoss = High[1] + StopLossFactor * ATRVal;
myTakeProfit = myEntryPrice - TakeProfitFactor * ATRVal;
SellShort(1, myEntryPrice);
Commentary("空头入场 价格:" + Text(myEntryPrice) +
" 止损:" + Text(myStopLoss) +
" 止盈:" + Text(myTakeProfit));
SetStopLoss(myStopLoss);
SetTakeProfit(myTakeProfit);
EndIf
EndIf
// 放量止盈逻辑
If MarketPosition <> 0 Then
// 多头持仓放量止盈
If MarketPosition > 0 And IsVolumeSpike And Close < Open Then
Sell(0, Close);
Commentary("多头放量止盈 价格:" + Text(Close));
EndIf
// 空头持仓放量止盈
If MarketPosition < 0 And IsVolumeSpike And Close > Open Then
BuyToCover(0, Close);
Commentary("空头放量止盈 价格:" + Text(Close));
EndIf
// 形态突破止盈(针对持续形态)
If BarsSinceEntry >= PatternConfirmBars Then
// 多头持仓出现顶部形态
If MarketPosition > 0 And IsTopPattern Then
Sell(0, Close);
Commentary("多头形态止盈 价格:" + Text(Close));
EndIf
// 空头持仓出现底部形态
If MarketPosition < 0 And IsBottomPattern Then
BuyToCover(0, Close);
Commentary("空头形态止盈 价格:" + Text(Close));
EndIf
EndIf
EndIf
这个是 ,不好意思,发错一个时文华的,麻烦您了
这个代码也不是我们软件的代码,无法在我们软件上使用