论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:1254回复:0
草龙
注册时间2004-12-17
[MT4指标]布林AMA趋势指标
楼主发表于:2014-01-23 21:52只看该作者倒序浏览
1楼 电梯直达
电梯直达
将AMA指标和布林线做结合,能够判断到市场是趋势还是震荡市场 主图指标 mt4指标类型:趋势指标 是否能用在mt4手机版上:否 是否含有未来函数:否 //+------------------------------------------------------------------+ //| AMA_Bands.mq4 | //| Copyright ? 2006, Alexandre | //| mailto: [email protected] | //+------------------------------------------------------------------+ //---- general properties #property copyright "Copyright ? 2006, Alexandre" #property link "mailto: [email protected]" //---- indicator properties #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 DarkViolet // 'line' (main) #property indicator_color2 DodgerBlue // 'arrow' (up) #property indicator_color3 OrangeRed // 'arrow' (down) #property indicator_color4 Silver // 'arrow' (stop-symbol) #property indicator_color5 Aqua // 'line' (inner BB upper band) #property indicator_color6 Aqua // 'line' (inner BB lower band) #property indicator_color7 Magenta // 'line' (outer BB upper band) #property indicator_color8 Magenta // 'line' (outer BB lower band) //---- defines //---- input parameters extern int Range = 9; extern int SlowAMA = 30; extern int FastAMA = 2; extern double P_G = 2.0; extern double K_F = 2.0; extern bool InnerBandsOn = true; extern double BandsDevInn = 1.0; extern bool OuterBandsOn = true; extern double BandsDevOut = 2.0; extern bool LastBarOnly = false; //---- common buffers //---- indicator buffers double AMA_Buffer; double AMA_UpSig; double AMA_DwSig; double AMA_NlSig; double AMA_UppBufferL; double AMA_LowBufferL; double AMA_UppBufferH; double AMA_LowBufferH; //---- variables double A = 0.45; // quotation coefficient - value close to optimal //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0, DRAW_LINE); SetIndexLabel(0, "Main Line"); SetIndexBuffer(0, AMA_Buffer); // main line SetIndexDrawBegin(0, Range); // SetIndexStyle(1, DRAW_ARROW); SetIndexLabel(1, "Signal Up"); SetIndexArrow(1, 225); // small arrow up SetIndexBuffer(1, AMA_UpSig); SetIndexDrawBegin(1, Range); // SetIndexStyle(2, DRAW_ARROW); SetIndexLabel(2, "Signal Down"); SetIndexArrow(2, 226); // small arrow down SetIndexBuffer(2, AMA_DwSig); SetIndexDrawBegin(2, Range); // SetIndexStyle(3, DRAW_ARROW); SetIndexLabel(3, "Signal Stop"); SetIndexArrow(3, 251); // small stop-symbol SetIndexBuffer(3, AMA_NlSig); SetIndexDrawBegin(3, Range); // if (InnerBandsOn == true) { SetIndexStyle(4, DRAW_LINE); SetIndexLabel(4, "Inner BB Upper Line"); SetIndexBuffer(4, AMA_UppBufferL); // inner BB upper line SetIndexDrawBegin(4, Range); // SetIndexStyle(5, DRAW_LINE); SetIndexLabel(5, "Inner BB Lower Line"); SetIndexBuffer(5, AMA_LowBufferL); // inner BB lower line SetIndexDrawBegin(5, Range); } // if (OuterBandsOn == true) { SetIndexStyle(6, DRAW_LINE); SetIndexLabel(6, "Outer BB Upper Line"); SetIndexBuffer(6, AMA_UppBufferH); // outer BB upper line SetIndexDrawBegin(6, Range); // SetIndexStyle(7, DRAW_LINE); SetIndexLabel(7, "Outer BB Lower Line"); SetIndexBuffer(7, AMA_LowBufferH); // outer BB lower line SetIndexDrawBegin(7, Range); } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- // //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); int Limit; int i, j, k; double d_f, old_val, new_val, sum, std_dev; static double v_prev, v_curr, ER_Low, ER_Upp; //---- if (counted_bars < 0) { return(-1); } Limit = Bars - counted_bars; // if (Limit > Range) // run once when getting started { k = Limit - Range; v_prev = Close[Limit-Range]; ER_Low = 2.0 / (SlowAMA + 1); // lower Efficiency Ratio threshold ER_Upp = 2.0 / (FastAMA + 1); // upper Efficiency Ratio threshold } else // run elsewhere { if (LastBarOnly == false) { k = Limit; v_prev = AMA_Buffer[Limit+1]; } else { k = 0; v_prev = AMA_Buffer[1]; } } // for (i=k; i>=0; i--) { v_curr = GetAMAOneStep(v_prev, i, Range, ER_Low, ER_Upp, P_G, A); d_f = v_curr - v_prev; v_prev = v_curr; AMA_Buffer = v_curr; // line // signals - 1st derivative if ((MathAbs(d_f) > (K_F * Point)) && (d_f > 0.0)) // signal up { AMA_UpSig = AMA_Buffer; AMA_DwSig = EMPTY_VALUE; AMA_NlSig = EMPTY_VALUE; } else if ((MathAbs(d_f) > (K_F * Point)) && (d_f < 0.0)) // signal down { AMA_UpSig = EMPTY_VALUE; AMA_DwSig = AMA_Buffer; AMA_NlSig = EMPTY_VALUE; } else // signal stop { AMA_UpSig = EMPTY_VALUE; AMA_DwSig = EMPTY_VALUE; AMA_NlSig = AMA_Buffer; } } if ((InnerBandsOn == true) || (OuterBandsOn == true)) { // calculate standard deviation i = Bars - Range; if (counted_bars > (Range - 1)) { i = Bars - counted_bars - 1; } while (i >= 0) { sum = 0.0; k = i + Range - 1; old_val = AMA_Buffer; while (k >= i) { new_val = Close[k] - old_val; sum += new_val * new_val; k--; } std_dev = MathSqrt(sum / Range); // complete BB's buffers if (InnerBandsOn == true) { AMA_UppBufferL = old_val + BandsDevInn * std_dev; AMA_LowBufferL = old_val - BandsDevInn * std_dev; } if (OuterBandsOn == true) { AMA_UppBufferH = old_val + BandsDevOut * std_dev; AMA_LowBufferH = old_val - BandsDevOut * std_dev; } i--; } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Close Prices Adaptive Smoothing - AMA One Step | //+------------------------------------------------------------------+ double GetAMAOneStep(double v_prev, int n_bar, int range, double er_low, double er_upp, double pow, double a) { double v_curr, noise, er, ssc; //---- // calculate efficiency ratio & ssc noise = 0.000000001; for (int i=n_bar+range-1; i>=n_bar; i--) { noise += MathAbs(Close - Close[i+1]); } er = MathAbs(Close[n_bar] - Close[n_bar+range]) / noise; ssc = er * er_upp + er_low; ssc = MathPow(ssc, pow); // calculate AMA one step, using explicit/implicit Euler Schema v_curr = (v_prev + ssc * (a * (Close[n_bar+1] - v_prev) + (1.0 - a) * Close[n_bar])) / (1.0 + (1.0 - a) * ssc); //---- return(v_curr); } AMA_Bands.jpgAMA_Bands.jpg
TK29帖子1楼右侧xm竖版广告90-240
个性签名

阅尽天下指标
搬砖开始,始于2014

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]