论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:768回复:1
草龙
注册时间2004-12-17
[MT4指标]DM+指标
楼主发表于:2014-08-04 03:12只看该作者倒序浏览
1楼 电梯直达
电梯直达
主图指标 mt4指标类型:趋势指标 是否能用在mt4手机版上:否 是否含有未来函数:无 //+------------------------------------------------------------------+ //| DMI.mq4 | //| Copyright ? 2006, Fernando Gomes. | //| http://www.ciavox.com/~fgomes | //+------------------------------------------------------------------+ #property copyright \"Copyright ? 2006, Fernando Gomes.\" #property link \"http://www.ciavox.com/~fgomes\" //---- indicator settings #property indicator_separate_window #property indicator_buffers 5 #property indicator_color1 DodgerBlue #property indicator_color2 Magenta #property indicator_color3 Yellow #property indicator_color4 DeepSkyBlue #property indicator_color5 Blue #property indicator_minimum 0 #property indicator_level1 20 #property indicator_level2 25 #property indicator_maximum 60 //---- indicator parameters extern int Smooth = 14; extern bool Hide_DI_Plus = False; extern bool Hide_DI_Minus = False; extern bool Hide_DX = true; extern bool Hide_ADX = true; extern bool Hide_ADXR = true; //---- indicator buffers double b_di_p; // buffer +DI double b_di_m; // buffer -DI double b_dmi; // buffer DMI double b_adx; // buffer Average Directional indeX double b_adxr; // buffer Average Directional indeX Rate //---- non-indicator buffers //---- NOTICE that these arrays must be included in ArraySetAsSeries() double dm_p_avg; double dm_m_avg; double tr_avg; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator buffers mapping IndicatorBuffers(8); if ( !SetIndexBuffer(0,b_di_p) && !SetIndexBuffer(1,b_di_m) && !SetIndexBuffer(2,b_dmi) && !SetIndexBuffer(3,b_adx) && !SetIndexBuffer(4,b_adxr) && !SetIndexBuffer(5,dm_p_avg) && !SetIndexBuffer(6,dm_m_avg) && !SetIndexBuffer(7,tr_avg) ) { Print(\"cannot set indicator buffers!\"); return(-1); } //---- name for DataWindow and indicator subwindow label IndicatorShortName(\"DMI(\"+Smooth+\")\"); SetIndexLabel(0,\"+DI\"); SetIndexLabel(1,\"-DI\"); SetIndexLabel(2,\"DX\"); SetIndexLabel(3,\"ADX\"); SetIndexLabel(4,\"ADXR\"); //---- SetIndexStyle(0, DRAW_LINE+Hide_DI_Plus*DRAW_NONE, STYLE_SOLID, 1, indicator_color1); SetIndexStyle(1, DRAW_LINE+Hide_DI_Minus*DRAW_NONE, STYLE_SOLID, 1, indicator_color2); SetIndexStyle(2, DRAW_LINE+Hide_DX*DRAW_NONE, STYLE_SOLID, 1, indicator_color3); SetIndexStyle(3, DRAW_LINE+Hide_ADX*DRAW_NONE, STYLE_SOLID, 1, indicator_color4); SetIndexStyle(4, DRAW_LINE+Hide_ADXR*DRAW_NONE, STYLE_SOLID, 1, indicator_color5); //---- SetIndexDrawBegin(0,Smooth); SetIndexDrawBegin(1,Smooth); SetIndexDrawBegin(2,Smooth); SetIndexDrawBegin(3,2*Smooth); SetIndexDrawBegin(4,3*Smooth); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if (counted_bars<0) return(-1); if (Bars < 2) return(-1); if (Smooth < 2) return(-1); int limit=Bars-1-counted_bars; double smooth = 1.0 / (Smooth * 1.0); int firstDMI = Bars-1-Smooth; int firstADX = Bars-1-(2*Smooth); int firstADXR = Bars-1-(3*Smooth); for (int i=limit; i>=0; i--) { double high; double low; double dm_p; double dm_m; if (i low) && (high > 0.0)) dm_p = high; else if ((low > high) && (low > 0.0)) dm_m = low; // calculate averages (cumulative formula) dm_p_avg = dm_p_avg[i+1] - ( smooth * dm_p_avg[i+1] ) + dm_p; dm_m_avg = dm_m_avg[i+1] - ( smooth * dm_m_avg[i+1] ) + dm_m; tr_avg = tr_avg[i+1] - ( smooth * tr_avg[i+1] ) + calcTR(i); } else if (i==firstDMI) { double sum_dm_p = 0.0; double sum_dm_m = 0.0; double sum_tr = 0.0; for (int j=i; j low) && (high > 0.0)) dm_p = high; else if ((low > high) && (low > 0.0)) dm_m = low; sum_dm_p = sum_dm_p + dm_p; sum_dm_m = sum_dm_m + dm_m; sum_tr = sum_tr + calcTR(j); } // define current values dm_p_avg = sum_dm_p * smooth; dm_m_avg = sum_dm_m * smooth; tr_avg = sum_tr * smooth; } else { tr_avg = 0.0; } // Calculate +DI and -DI if (tr_avg > 0.0) { b_di_p = 100.0 * dm_p_avg / tr_avg; b_di_m = 100.0 * dm_m_avg / tr_avg; } else { b_di_p = 0.0; b_di_m = 0.0; } // calcule DMI double sum = b_di_p + b_di_m; double diff = MathAbs( b_di_p - b_di_m ); if (sum > 0.0) { b_dmi = 100.0 * diff / sum; } else { b_dmi = 0.0 ; } // Calculate ADX if (ii; k--) { sum_dmi = sum_dmi + b_dmi[k]; } b_adx = smooth * sum_dmi; } else { b_adx = 0.0; } // Calculate ADXR if (i<=firstADXR) { b_adxr = (b_adx + b_adx[i+Smooth]) / 2; } else { b_adxr = 0.0; } } // for return(0); } double calcTR(int bar) { double a = High[bar] - Low[bar]; // A = Today\'s High -Today\'s Low double b = MathAbs(Close[bar+1] - High[bar]); // B = Yesterday\'s Close - Today\'s High double c = MathAbs(Close[bar+1] - Low[bar]); // C = Yesterday\'s Close - Today\'s Low return(MathMax(MathMax(a,b),c)); } //+------------------------------------------------------------------+
TK29帖子1楼右侧xm竖版广告90-240
个性签名

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

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
tanqingyuye
注册时间2015-04-02
发表于:2015-05-26 09:30只看该作者
2楼
看看再说
个性签名

韬客社区www.talkfx.co

广告
论坛谏言--外汇交易不应是你投资的全部,交易外汇也不应是你生活的全部

本站免责声明:

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

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

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

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

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

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