MA和EMA的数学表达式

 

1、MA(X,N),求X的N日移动平均值。算法是:
(X1+X2+X3+…..+Xn)/N
例如:MA(C,20)表示20日的平均收盘价。C表示CLOSE。

2、EMA(X,N)求X的N日指数平滑移动平均。算法是:
若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。
EMA引用函数在计算机上使用递归算法很容易实现,但不容易理解。例举分析说明EMA函数。

X是变量,每天的X值都不同,从远到近地标记,它们分别记为X1,X2,X3,….,Xn
如果N=1,则EMA(X,1)=[2*X1+(1-1)*Y’]
/(1+1)=X1
如果N=2,则EMA(X,2)=[2*X2+(2-1)*Y’]
/(2+1)=(2/3)*X2+(1/3)X1
如果N=3,则EMA(X,3)=[2*X3+(3-1)*Y’]/(3+1)=[2*X3+2*((2/3)*X2+(1/3)*X1)]
/4=(1/2)*X3+(1/3)*X2+(1/6)*X1
如果N=4,则EMA(X,4)=[2*X4+(4-1)*Y’]
/(4+1)=2/5*X4+3/5*((1/2)*X3+(1/3)*X2+(1/6)*X1)
=2/5*X4+3/10*X3+3/15*X2+3/30*X1
如果N=5,则EMA(X,
5)=2/(5+1)*X5+(5-1)/(5+1)(2/5*X4+3/10*X3+3/15*X2+3/30*X1)
=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1
…………循环下去吧:)

 

整理一下更容易看清楚

X1

(2/3)*X2+(1/3)X1

(1/2)*X3+(1/3)*X2+(1/6)*X1

2/5*X4+3/10*X3+3/15*X2+3/30*X1

(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1

 

任何时候系数之和恒为1。如果X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N).

使用总结:

从以上的例举分析中,我们可以看到时间周期越近的X值它的权重越大,说明EMA函数对近期的X值加强了权重比,更能及时反映近期X值的波动情况。

     所以EMA比Ma更具参考价值,而ema业不容易出现死叉和金叉,所以一旦出现要立即作出反映!

     对周线处理,ema就更加稳定了。

 

这里要说一句话:就是往往好多人都不相形各自形态指标,因为各种指标都可以被庄家做假,的确这是事实。但是我们要理性的认识这一点,留在交易记录上的各种形态组合,是市场交易的语言,是市场传递给外界的信息,无论是庄家和小散都必须通过这种语言与市场对话。而庄家业必须、只能利用这种语言来“引诱和欺骗”我们小散!知道了这一点,我们就需要拨雾看花,去伪存真,用唯物主义世界观结合这种市场语言的特殊性去分析,借力打力。坐轿还是抬轿就看个人的水平了!

``` {==== 量化择时系统V2.2优化版 ====} {--优化参数系统--} MACD_SLOW:=21; MACD_FAST:=8; MACD_SIGNAL:=6; KDJ_SHORT:=5; RSI_CYCLE:=11; BOLL_PER:=18; MOM_DAYS:=3; MK_CAP_MIN:=15000000000; VOL_LIMIT:=15; {--增强核心指标--} DIF:=EMA(CLOSE,MACD_FAST)-EMA(CLOSE,MACD_SLOW); DEA:=EMA(DIF,MACD_SIGNAL); MACD:=2*(DIF-DEA); MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); MA60:=EMA(CLOSE,60); VOL5:=MA(VOL,5); VOL60:=EMA(VOL,60); VOL_RATIO:=VOL/REF(VOL,1); {--重构KDJ公式--} RSV:=(CLOSE-LLV(LOW,KDJ_SHORT))/(HHV(HIGH,KDJ_SHORT)-LLV(LOW,KDJ_SHORT)+0.0001)*100; K:=SMA(RSV,3,1); D:=SMA(K,3,1); J:=2.5*K-1.5*D; {--改进布林带系统--} UPPER:=MA(CLOSE,BOLL_PER)+2.2*STD(CLOSE,BOLL_PER); LOWER:=MA(CLOSE,BOLL_PER)-1.8*STD(CLOSE,BOLL_PER); BWIDTH:=(UPPER-LOWER)/MA(CLOSE,BOLL_PER)*100; {--动量系统升级--} MOM:=EMA(CLOSE,3)/EMA(CLOSE,15)-1; DAY_CHG:=(CLOSE-OPEN)/OPEN*100; {--强化估值因子--} PE_RATIO:=IF(FINANCE(33)>0, FINANCE(33)/FINANCE(4), 1000); PB_RATIO:=IF(FINANCE(5)>0, FINANCE(33)/FINANCE(5), 1000); VOLATILITY:=STD(CLOSE,60)/MA(CLOSE,60); {--修正后的行业动量--} EMA_RATIO:=EMA(CLOSE/REF(CLOSE,20),5); {修正CLOSE引用} IND_RANK:=RANK(EMA_RATIO/120, 120); {关键修正:移除多余括号} {--信号体系重构--} COND1:=MA5>MA10 AND MA10>MA20 AND MA20>MA60; COND2:=CROSS(DIF,DEA) AND MACD>REF(MACD,1) AND MACD>0.05; COND3:=CROSS(K,D) AND D<20 AND J<80; COND4:=VOL>VOL5*2.2 AND VOL>VOL60*3.0 AND CLOSE>HHV(HIGH,20)*0.99; COND5:=CLOSE>OPEN*1.01 AND BETWEEN(DAY_CHG,-0.5,2.8); COND6:=BWIDTH<=VOL_LIMIT AND FINANCE(33)>=MK_CAP_MIN; COND7:=MOM>0.15 AND MOM<0.25; COND8:=WR(10,6)<-90; COND9:=VOL_RATIO>3.0 AND MA(VOL,5)>MA(VOL,10); COND10:=PE_RATIO<25 AND PB_RATIO<3.8; COND11:=VOLATILITY<0.12 AND IND_RANK<=30; {--动态仓位系统--} 波动系数:=STD(CLOSE,20)/MA(CLOSE,20); 仓位控制:=IF(波动系数<0.1, 0.95, IF(波动系数<0.15,0.8, IF(波动系数<0.2,0.6,0.4))); {--信号合成优化--} 预警信号:=CROSS(DIF,DEA) AND VOL>REF(VOL,1)*2.8 AND CLOSE>UPPER*0.97 AND BETWEEN(TIME,093500,144500); 选股:FILTEREX( COND1 AND COND2 AND COND3 AND COND4 AND COND5 AND COND6 AND COND7 AND COND8 AND COND9 AND COND10 AND COND11, VOL,5,3) AND TREND_CONFIRM AND RISK_FILTER; {--强化风控模块--} 动态止损:=MAX(MA20*0.92, LLV(LOW,5)*0.97); 动态止盈:=MIN(HHV(HIGH,20)*1.22, MA60*1.35);```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析解答。我的问题是【我正在编辑【通达信选股】代码,遇到了 【错误句 : {修正CLOSE引用} IND_RANK:=RANK(EMA_RATIO/120, 120) 详细信息 : 您在括号前写的不是函数、公式等, 且缺少必要的运算符! 错误起始位置 : 1128 ; 长度: 3】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。
03-18
``` {—————————————— 系统参数模块 ——————————————} {——估值体系优化——} DYNPETTM:=IF(FINANCE(33)>0, CLOSE/(FINANCE(33)/FINANCE(1)+0.0001), 1000); PB_RATE:=IF(FINANCE(5)>0, CLOSE/FINANCE(5), 1000); PEG_VAL:=DYNPETTM/MAX(FINANCE(54)/FINANCE(34)*100,0.0001); {——行业轮动因子——} IND_RANK:=RANK(EMA(C,60)/REF(EMA(C,60),20)) * 0.3 + RANK(VOL/MA(VOL,20)) * 0.2 + RANK(FINANCE(54)/FINANCE(34)) * 0.5; {——波动率自适应——} VOLATILITY:=STD(CLOSE,20)/MA(CLOSE,20); VAR_PERIOD:=IF(VOLATILITY<0.06,60,IF(VOLATILITY<0.12,34,21)); {参数优化} FAST_LEN:=MAX(CEILING(VAR_PERIOD*0.382),5); SLOW_LEN:=MIN(FLOOR(VAR_PERIOD*1.618),55); {限制最大周期} SGNL_LEN:=IF(VAR_PERIOD<=21,7,9); {——多周期参数——} KDJ_N:=IF(VOLATILITY<0.08,14,9); {参数优化} RSI_N:=IF(VOLATILITY<0.12,14,7); {参数优化} MOM_N:=IF(VOLATILITY<0.08,12,5); {—————————————— 核心指标模块 ——————————————} {——MACD增强——} DIF:=EMA(CLOSE,FAST_LEN) - EMA(CLOSE,SLOW_LEN); DEA:=EMA(DIF,SGNL_LEN); MACD:=2*(DIF-DEA); MACD_ANGLE:=ATAN((DIF-REF(DIF,1))/0.1)*180/3.1416; {——三维均线系统——} MA20M:=EMA(CLOSE,20*21); {月线} MA5W:=EMA(CLOSE,5*5); {周线} MA5D:=EMA(CLOSE,5); {日线} TREND_3D:=MA5D>MA5W AND MA5W>MA20M AND MA20M>REF(MA20M,3); {——量能优化——} VOL_MA5:=MA(VOL,5); VOL_MA20:=EMA(VOL,20); VOL_SIG:=VOL>VOL_MA20*1.8 AND VOL>REF(HHV(VOL,5),1)*1.5; {强化量能条件} {——动量确认——} MOMENTUM:=EMA(C,5)/REF(EMA(C,MOM_N),5)-1; WEEK_CHG:=(C-REF(C,5))/REF(C,5)*100; MOM_CONF:=EMA(C,5)>EMA(C,13) AND C>HHV(C*0.8,34); {调整突破阈值} {——周期协同MACD——} MACD_MONTH:=EMA(C,12*21)-EMA(C,26*21); MACD_WEEK:=EMA(C,12*5)-EMA(C,26*5); MACD_SYNC:=MACD_MONTH>0 AND MACD_WEEK>0 AND DIF>0; {—————————————— 信号合成模块 ——————————————} VALUATION:=DYNPETTM<30 AND PB_RATE<3.8 AND PEG_VAL<0.9; {提高标准} TREND_SIG:=TREND_3D AND C>MA20M*1.08 AND C<MA20M*1.2; {限定波动区间} MOM_SIG:=CROSS(DIF,DEA) AND MACD>REF(MACD,1) AND MACD_ANGLE>15; {增加角度过滤} {——风险过滤——} BETA_COEF:=SLOPE(C/INDEXC,60)*STD(C,60)/STD(INDEXC,60); RISK_FLT:=BETA_COEF>=0.85 AND BETA_COEF<=1.15 AND FINANCE(42)/FINANCE(1)<0.55 AND FINANCE(10)/FINANCE(1)>0.35; {——60分钟信号——} HOUR_C:=DYNAINFO(11); {最新60分钟收盘价} HOUR_MA:=MA(HOUR_C,20); HOUR_BREAK:=HOUR_C>HHV(REF(HOUR_C,6),12) AND RSI(HOUR_C,14)>60; {——最终信号——} SCAN_SIG:VALUATION AND RISK_FLT AND MACD_SYNC AND TREND_SIG AND VOL_SIG AND HOUR_BREAK AND IND_RANK>=0.7 AND COUNT(MOM_SIG,3)>=1; FINAL_SIGNAL:FILTER(SCAN_SIG,5),COLORGREEN;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析解答。我的问题是【我正在编辑【通达信量化择时选股】代码,我的选股逻辑是什么?用2018-2024年全A股回测验证选股逻辑的准确性,回测胜率率达到100%。并提出优化建议方案,优化选股逻辑所有参数计算关系信号触发条件,选到股票市场情绪启动,即将启动主升浪的盘中异动股票,日线盘中预警选股盘后选股,行业轮动因子进一步增强效果,优化选股条件,去除冗余选股条件,月胜率提高至85%以上,有效信号准确率90%以上。】请帮我检查并补全正确代码,生成修正后完整代码。
03-25
我正在编辑【通达信条件选股】代码,遇到了 【{计算63日指数平滑动量} INDUSTRY_MOM := (RANK(EMA_CMOM, 250) + 0.0) / COUNT(EMA_CMOM > 0, 250) 详细信息 : 您在括号前写的不是函数、公式等, 且缺少必要的运算符! 错误起始位置 : 232 ; 长度: 3】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。原有选股逻辑完整保留。我的原始代码如下:【{动态估值体系优化} DYNPETTM := IF(FINANCE(33)/FINANCE(1) > 0.0001, CLOSE/(FINANCE(33)/FINANCE(1)), 1000); {计算动态市盈率} PEG_VAL := DYNPETTM/MAX(FINANCE(54)/FINANCE(34)*100, 0.0001); {计算PEG估值} {行业动量优化} EMA_CMOM := EMA(C/REF(C,21), 63); {计算63日指数平滑动量} INDUSTRY_MOM := (RANK(EMA_CMOM, 250) + 0.0) / COUNT(EMA_CMOM > 0, 250); {修正RANK参数为RANK(数据,周期)} INDUSTRY_MOM_FILTER := INDUSTRY_MOM > 0.9; {筛选行业动量前10%的股票} {资金流模型强化} CASH_RATIO := SUM(L2_MAIN_BUY_SUM,5)/SUM(L2_MAIN_SELL_SUM,5); {计算主力资金流入流出比} INDUSTRY_CASH := (RANK(CASH_RATIO, 250) + 0.0) / COUNT(CASH_RATIO > 0, 250); {同步修正RANK参数} INDUSTRY_CASH_FILTER := INDUSTRY_CASH > 0.95; {筛选资金流前5%的股票} {波动率自适应优化} VIX := STD(INDEXC,63)/MA(INDEXC,63); {计算市场波动率} VAR_PERIOD := CEILING(21 * POW(1 + VIX/REF(MA(VIX,240),1), 1.5)); FAST_LEN := CEILING(VAR_PERIOD*0.5); {快速均线周期} SLOW_LEN := FLOOR(VAR_PERIOD*2.0); {慢速均线周期} {市场情绪复合指标} MARKET_SENTI := EMA(ADVANCE/DECLINE,5)*0.5 + EMA(SUM(IF(C=ZTPRICE(REF(C,1),0.1),VOL,0),63)/MA(VOL,63),13)*0.3 + EMA((L2_MAIN_BUY - L2_MAIN_SELL)/CAPITAL,5)*0.2; {月线趋势优化} MONTH_MA := DEMA(C, VAR_PERIOD); {双指数移动平均} MONTH_TREND := C > MONTH_MA*1.02 AND SLOPE(MONTH_MA,5) > 0.5 AND INDUSTRY_MOM_FILTER; {周线动量增强} WEEK_DIF := EMA(C,84) - EMA(C,168); WEEK_DEA := EMA(WEEK_DIF,63); WEEK_MACD := 2*(WEEK_DIF - WEEK_DEA); WEEK_VOL := EMA(VOL,5) > EMA(VOL,21)*2.0 AND VOL > REF(MA(VOL,5),1)*3 AND INDUSTRY_CASH_FILTER; {主力波段优化} MAIN_WAVE := COUNT(C>MA(C,21),5)=5 AND EVERY(VOL>MA(VOL,63)*2.0,3) AND SLOPE(EMA(VWAP,89),5) > 1.2; DAY_BREAK := C > HHV(H,63) AND VOL > MA(VOL,42)*3 AND (L2_MAIN_BUY - L2_MAIN_SELL) > VOL*0.5; DAY_RSI := RSI(C,13) > 65 AND RSI(C,21) > RSI(C,34) + 10; {分钟周期优化} MIN60_BREAK := CROSS("#MIN60.C", "#MIN60.HHV(H,63)") AND "#MIN60.VOL" > MA("#MIN60.VOL",42)*2.5 AND "#MIN60.L2_MAIN_BUY" > "#MIN60.L2_MAIN_SELL"*1.8; {最终信号合成} BUY_SIGNAL := MONTH_TREND AND WEEK_VOL AND MAIN_WAVE AND (DAY_BREAK OR MIN60_BREAK) AND MARKET_SENTI > REF(MARKET_SENTI,3)*1.1 AND PEG_VAL < 0.8;】
03-27
``` {==== 量化择时系统V2.1 ====} //--参数系统-- MACD_SLOW:=22; MACD_FAST:=11; MACD_SIGNAL:=7; KDJ_SHORT:=7; RSI_CYCLE:=13; BOLL_PER:=18; MOM_DAYS:=4; MK_CAP_MIN:=8000000000; VOL_LIMIT:=15; // 修正为整数百分比值 //--核心指标-- DIF:EMA(C,MACD_FAST)-EMA(C,MACD_SLOW); DEA:EMA(DIF,MACD_SIGNAL); MACD:=2*(DIF-DEA); MA5:MA(C,5); MA10:MA(C,10); MA20:MA(C,20); MA60:MA(C,60); VOL5:MA(V,5); VOL60:MA(V,60); VOL_RATIO:V/REF(V,1); RSV:=(C-LLV(L,KDJ_SHORT))/(HHV(H,KDJ_SHORT)-LLV(L,KDJ_SHORT))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D; UPPER:MA(C,BOLL_PER)+2*STD(C,BOLL_PER); LOWER:MA(C,BOLL_PER)-2*STD(C,BOLL_PER); BWIDTH:=(UPPER-LOWER)/MA(C,BOLL_PER)*100; MOM:EMA(C,5)/EMA(C,20)-1; DAY_CHG:=(C-O)/O*100; //--补充缺失指标-- VOL_TREND:=MA(V,5)>MA(V,10); // 新增成交量趋势 TREND_CONFIRM:=C>MA(C,60); // 新增趋势确认 RISK_FILTER:=FINANCE(40)>1.5; // 新增风险过滤 //--信号体系-- COND1:=MA5>MA10 AND MA10>MA20 AND MA20>MA60; COND2:=CROSS(DIF,DEA) AND MACD>REF(MACD,1) AND MACD>0; COND3:=CROSS(K,D) AND D<25 AND J<85; COND4:=V>VOL5*2.0 AND V>VOL60*2.5 AND C>HHV(H,20)*0.99; COND5:=C>O AND BETWEEN(DAY_CHG,-0.8,3.2); COND6:=BWIDTH<=VOL_LIMIT AND FINANCE(33)>=MK_CAP_MIN; COND7:=MOM>0.12 AND MOM<0.28; COND8:=WR(10,6)<-88; COND9:=VOL_RATIO>2.8 AND VOL_TREND; //--信号合成-- 选股:FILTER( COND1 AND COND2 AND COND3 AND COND4 AND COND5 AND COND6 AND COND7 AND COND8 AND COND9, 3) AND TREND_CONFIRM AND RISK_FILTER;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析解答。我的问题是【我正在编辑【通达信选股】代码,遇到了 【错误句 : {==== 量化择时系统V2.1 ====} //--参数系统-- MACD_SLOW:=22 详细信息 : 在变量 MACD_SLOW 前又错误的定义一次变量! 错误起始位置 : 46 ; 长度: 9】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值