论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:593回复:0
草龙
注册时间2004-12-17
[MT4指标]ClearMethod信号
楼主发表于:2014-02-26 09:35只看该作者倒序浏览
1楼 电梯直达
电梯直达
主图指标 mt4指标类型:趋势指标 是否能用在mt4手机版上:否 是否含有未来函数:无 // This indicator is based on the article: Getting Clear With Short-Term Swings by Ron Black // // http://www.traders.com/Documentation/FEEDbk_docs/2010/09/Black.html // http://www.traders.com/Documentation/FEEDbk_docs/2010/09/TradersTips.html // // Clear signal: breaking Clear Line // Move signal: Clear Line moves again after flat // Alert: after a closed bar signal (at the first tick of next bar) // Copy the ClearMethod.mq4 file to the Indicator directory, it will be used by iCustom() #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Green #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Red int MaxHistoryBarsToCount = 5000; extern bool IsDrawClearSignals = true; extern bool IsDrawMoveSignals = true; bool IsDrawAsPullbackSignals = false; // true: for pullback trading (Important! This is an extremely dangerous trading style!) extern bool IsAlertClearUpSignals = true; extern bool IsAlertClearDownSignals = true; extern bool IsAlertMoveUpSignals = true; extern bool IsAlertMoveDownSignals = true; double SignalClearUpBuffer; double SignalClearDownBuffer; double SignalMoveUpBuffer; double SignalMoveDownBuffer; bool IsClearUpSignal = false; bool IsClearDownSignal = false; bool IsMoveUpSignal = false; bool IsMoveDownSignal = false; datetime AlertsCheckedLastTime = 0; int init() { SetIndexBuffer(0, SignalClearUpBuffer); SetIndexBuffer(1, SignalClearDownBuffer); SetIndexBuffer(2, SignalMoveUpBuffer); SetIndexBuffer(3, SignalMoveDownBuffer); if (IsDrawClearSignals) { SetIndexStyle(0, DRAW_ARROW, EMPTY, 1, Green); SetIndexArrow(0, 251); SetIndexStyle(1, DRAW_ARROW, EMPTY, 1, Red); SetIndexArrow(1, 251); if (IsDrawAsPullbackSignals) { SetIndexStyle(0, DRAW_ARROW, EMPTY, EMPTY, Red); SetIndexStyle(1, DRAW_ARROW, EMPTY, EMPTY, Green); } } else { SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_NONE); } if (IsDrawMoveSignals) { SetIndexStyle(2, DRAW_ARROW, EMPTY, 1, Green); SetIndexArrow(2, 200); SetIndexStyle(3, DRAW_ARROW, EMPTY, 1, Red); SetIndexArrow(3, 202); if (IsDrawAsPullbackSignals) { SetIndexStyle(2, DRAW_ARROW, EMPTY, EMPTY, Red); SetIndexStyle(3, DRAW_ARROW, EMPTY, EMPTY, Green); } } else { SetIndexStyle(2, DRAW_NONE); SetIndexStyle(3, DRAW_NONE); } SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexEmptyValue(3, 0.0); return(0); } int start() { int countedBars = IndicatorCounted(); int emptyLength = MathMin(Bars, 50); int countFrom = MathMin(Bars - MathMax(countedBars, emptyLength) - 1, MaxHistoryBarsToCount); checkAlerts(); switchOffPrevTickSignals(); if (countFrom >= 0 && countFrom < Bars) { if (countedBars < 1) { fillFirstValuesWithEmpty(emptyLength); } countIndicator(countFrom); } return(0); } void countIndicator(int countFrom) { int i; bool isUpSwing; bool isUpSwingPrevBar; bool isUpSwingPrevPrevBar; bool isFlat; bool isFlatPrevBar; for (i = countFrom; i >= 0; i--) { isUpSwing = (iCustom(NULL, 0, "ClearMethod", 0, i) > 0); isUpSwingPrevBar = (iCustom(NULL, 0, "ClearMethod", 0, i + 1) > 0); isUpSwingPrevPrevBar = (iCustom(NULL, 0, "ClearMethod", 0, i + 2) > 0); isFlat = true; if (isUpSwing && isUpSwingPrevBar) { isFlat = (MathAbs(iCustom(NULL, 0, "ClearMethod", 1, i) - iCustom(NULL, 0, "ClearMethod", 1, i + 1)) < Point / 10000.0); } else if (!isUpSwing && !isUpSwingPrevBar) { isFlat = (MathAbs(iCustom(NULL, 0, "ClearMethod", 2, i) - iCustom(NULL, 0, "ClearMethod", 2, i + 1)) < Point / 10000.0); } isFlatPrevBar = false; if (isUpSwing && isUpSwingPrevBar) { isFlatPrevBar = (MathAbs(iCustom(NULL, 0, "ClearMethod", 1, i + 1) - iCustom(NULL, 0, "ClearMethod", 1, i + 2)) < Point / 10000.0); } else if (!isUpSwing && !isUpSwingPrevBar) { isFlatPrevBar = (MathAbs(iCustom(NULL, 0, "ClearMethod", 2, i + 1) - iCustom(NULL, 0, "ClearMethod", 2, i + 2)) < Point / 10000.0); } IsClearUpSignal = (isUpSwing && !isUpSwingPrevBar); IsClearDownSignal = (!isUpSwing && isUpSwingPrevBar); IsMoveUpSignal = (isUpSwing && !isFlat && isFlatPrevBar); IsMoveDownSignal = (!isUpSwing && !isFlat && isFlatPrevBar); if (IsClearUpSignal) { SignalClearUpBuffer = Low - getArrowShiftingPixelsInPoints(i); if (IsDrawAsPullbackSignals) { SignalClearUpBuffer = High + getArrowShiftingPixelsInPoints(i) * 0.7; } } else { SignalClearUpBuffer = 0.0; } if (IsClearDownSignal) { SignalClearDownBuffer = High + getArrowShiftingPixelsInPoints(i); if (IsDrawAsPullbackSignals) { SignalClearDownBuffer = Low - getArrowShiftingPixelsInPoints(i) * 0.7; } } else { SignalClearDownBuffer = 0.0; } if (IsMoveUpSignal) { SignalMoveUpBuffer = Low - getArrowShiftingPixelsInPoints(i); if (IsDrawAsPullbackSignals) { SignalMoveUpBuffer = High + getArrowShiftingPixelsInPoints(i) * 0.7; } } else { SignalMoveUpBuffer = 0.0; } if (IsMoveDownSignal) { SignalMoveDownBuffer = High + getArrowShiftingPixelsInPoints(i); if (IsDrawAsPullbackSignals) { SignalMoveDownBuffer = Low - getArrowShiftingPixelsInPoints(i) * 0.7; } } else { SignalMoveDownBuffer = 0.0; } } return; } void checkAlerts() { if (AlertsCheckedLastTime == Time[1]) { if (IsClearUpSignal && IsAlertClearUpSignals) { Alert("Clear Method (" + Symbol() + ", " + getPeriodsText() + ") - Clear Up signal."); } if (IsClearDownSignal && IsAlertClearDownSignals) { Alert("Clear Method (" + Symbol() + ", " + getPeriodsText() + ") - Clear Down signal."); } if (IsMoveUpSignal && IsAlertMoveUpSignals) { Alert("Clear Method (" + Symbol() + ", " + getPeriodsText() + ") - Move Up signal."); } if (IsMoveDownSignal && IsAlertMoveDownSignals) { Alert("Clear Method (" + Symbol() + ", " + getPeriodsText() + ") - Move Down signal."); } } AlertsCheckedLastTime = Time[0]; return; } void switchOffPrevTickSignals() { IsClearUpSignal = false; IsClearDownSignal = false; IsMoveUpSignal = false; IsMoveDownSignal = false; return; } double getArrowShiftingPixelsInPoints(int barIndex) { int i; double sum = 0.0; for (i = barIndex; i < barIndex + 50; i++) { sum += High - Low; } return(sum / 100.0); } string getPeriodsText() { string periodsText = ""; int periodsInMinutes = Period(); if (periodsInMinutes == PERIOD_M1) { periodsText = "M1"; } else if (periodsInMinutes == PERIOD_M5) { periodsText = "M5"; } else if (periodsInMinutes == PERIOD_M15) { periodsText = "M15"; } else if (periodsInMinutes == PERIOD_M30) { periodsText = "M30"; } else if (periodsInMinutes == PERIOD_H1) { periodsText = "H1"; } else if (periodsInMinutes == PERIOD_H4) { periodsText = "H4"; } else if (periodsInMinutes == PERIOD_D1) { periodsText = "D1"; } else if (periodsInMinutes == PERIOD_W1) { periodsText = "W1"; } else if (periodsInMinutes == PERIOD_MN1) { periodsText = "MN1"; } return(periodsText); } void fillFirstValuesWithEmpty(int emptyLength) { int i; int index; for (i = 0; i < emptyLength; i++) { index = Bars - i - 1; SignalClearUpBuffer[index] = 0.0; SignalClearDownBuffer[index] = 0.0; SignalMoveUpBuffer[index] = 0.0; SignalMoveDownBuffer[index] = 0.0; } return; } ClearMethodSignals.jpgClearMethodSignals.jpg
TK29帖子1楼右侧xm竖版广告90-240
个性签名

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

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

本站免责声明:

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

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

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

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

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

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