编码帮助 - 页 253 1...246247248249250251252253254255256257258259260...786 新评论 aminhakim 2014.04.02 21:57 #2521 指示器的修改帮助 大家好 这个MA交叉指标在每个tick 上都会产生警报。有没有人可以纠正这个问题,或者至少教我怎么做。 #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red double g_ibuf_76[]; double g_ibuf_80[]; int g_period_84 = 5; int g_period_88 = 34; extern bool Alerts = TRUE; extern bool PopAlerts = TRUE; extern bool PushAlerts = TRUE; extern bool EmailAlerts = TRUE; extern bool SoundAlerts = TRUE; extern string SoundFileUp = "UP.wav"; extern string SoundFileDn = "DN.wav"; int gi_96 = 0; int gi_100 = 0; int init() { SetIndexStyle(0, DRAW_ARROW, EMPTY); SetIndexArrow(0, 233); SetIndexBuffer(0, g_ibuf_76); SetIndexStyle(1, DRAW_ARROW, EMPTY); SetIndexArrow(1, 234); SetIndexBuffer(1, g_ibuf_80); return (0); } int deinit() { return (0); } int start() { int li_20; double l_ima_24; double l_ima_32; double l_ima_40; double l_ima_48; double l_ima_56; double l_ima_64; double ld_72; double ld_80; int li_88 = IndicatorCounted(); if (li_88 < 0) return (-1); if (li_88 > 0) li_88--; int li_12 = Bars - li_88; for (int li_16 = 0; li_16 <= li_12; li_16++) { li_20 = li_16; ld_72 = 0; ld_80 = 0; for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]); ld_72 = ld_80 / 10.0; l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16); l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1); l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1); l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16); l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1); l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1); if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) { g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0; if (li_16 <= 2 && Alerts && !gi_100) { if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY "); if (PushAlerts) SendNotification(Symbol() + " PRE-BUY "); if (SoundAlerts) PlaySound(SoundFileUp); if (EmailAlerts) SendMail(Symbol() , " PRE-BUY "); gi_96 = TRUE; gi_100 = FALSE; } } else { if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) { g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0; if (li_16 <= 2 && Alerts && !gi_100) { if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL "); if (PushAlerts) SendNotification(Symbol() + " PRE-SELL "); if (SoundAlerts) PlaySound(SoundFileUp); if (EmailAlerts) SendMail(Symbol() , " PRE-SELL "); gi_100 = TRUE; gi_96 = FALSE; } } } } return (0); } 请注意 阿明 Coding help 求大神忙EMA144,169 288,338,带箭头金叉死叉。完善代码 请指教,帮我看看源码什么地方错了 Mladen Rakic 2014.04.03 21:14 #2522 aminhakim: 大家好这个MA交叉指标在每一个刻度上都会产生警报。有没有人可以纠正这个问题,或者至少教我怎么做。 #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red double g_ibuf_76[]; double g_ibuf_80[]; int g_period_84 = 5; int g_period_88 = 34; extern bool Alerts = TRUE; extern bool PopAlerts = TRUE; extern bool PushAlerts = TRUE; extern bool EmailAlerts = TRUE; extern bool SoundAlerts = TRUE; extern string SoundFileUp = "UP.wav"; extern string SoundFileDn = "DN.wav"; int gi_96 = 0; int gi_100 = 0; int init() { SetIndexStyle(0, DRAW_ARROW, EMPTY); SetIndexArrow(0, 233); SetIndexBuffer(0, g_ibuf_76); SetIndexStyle(1, DRAW_ARROW, EMPTY); SetIndexArrow(1, 234); SetIndexBuffer(1, g_ibuf_80); return (0); } int deinit() { return (0); } int start() { int li_20; double l_ima_24; double l_ima_32; double l_ima_40; double l_ima_48; double l_ima_56; double l_ima_64; double ld_72; double ld_80; int li_88 = IndicatorCounted(); if (li_88 < 0) return (-1); if (li_88 > 0) li_88--; int li_12 = Bars - li_88; for (int li_16 = 0; li_16 <= li_12; li_16++) { li_20 = li_16; ld_72 = 0; ld_80 = 0; for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]); ld_72 = ld_80 / 10.0; l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16); l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1); l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1); l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16); l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1); l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1); if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) { g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0; if (li_16 <= 2 && Alerts && !gi_100) { if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY "); if (PushAlerts) SendNotification(Symbol() + " PRE-BUY "); if (SoundAlerts) PlaySound(SoundFileUp); if (EmailAlerts) SendMail(Symbol() , " PRE-BUY "); gi_96 = TRUE; gi_100 = FALSE; } } else { if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) { g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0; if (li_16 <= 2 && Alerts && !gi_100) { if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL "); if (PushAlerts) SendNotification(Symbol() + " PRE-SELL "); if (SoundAlerts) PlaySound(SoundFileUp); if (EmailAlerts) SendMail(Symbol() , " PRE-SELL "); gi_100 = TRUE; gi_96 = FALSE; } } } } return (0); } 谢谢 阿明 阿明,这是一个反编译版本的重绘指标,你已经注意到了问题。请使用这个帖子中的指标:https://www.mql5.com/en/forum/173574/page447 Boej 2014.04.03 21:59 #2523 亲爱的程序员们,你们好! 是否有可能在这个指标中添加警报选项,当它改变颜色的时候? 最重要的是要尽快发出警报(它总是发生在蜡烛的开端)。 选项1:电子邮件。 (TRUE/FALSE) 选项2:盒子。 (TRUE/FALSE) 在电子邮件或盒子的主题中显示的文本。[PAIR]打开TF[TF]。 由于我尊重你的时间,我自己先尝试了一下编码,但没有任何运气。 希望有人能帮助我。 谢谢你的帮助! hama.mq4 附加的文件: hama.mq4 4 kb Fausto Nunziante Del Gaudio 2014.04.04 11:00 #2524 嗨,程序员们,我正试图创建一个指标,通过stepMA平均公式绘制价格条。由于它是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中没有原始公式的痕迹,因为我使用iCustom函数 创建了该指标的MTF版本。 编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区上做了一些手脚。你能帮助我吗? 预先感谢。 以下是我的代码。 //------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 DarkGreen #property indicator_width1 1 #property indicator_color2 FireBrick #property indicator_width2 1 #property indicator_color3 LimeGreen #property indicator_width3 2 #property indicator_color4 Orange #property indicator_width4 2 // // // extern int TimeFrame = 0; // Timeframe extern int MaLength = 10; // Ma Length extern int MaMethod = 18; // Ma method extern double Sensitivity = 3; // Sensivity Factor extern double StepSize = 3; // Constant Step Size extern int Shift = 0; // OShify extern bool HighLow = false; // High/Low Mode Switch (more sensitive) extern color WickBuyColor = DarkGreen; extern color WickSellColor = FireBrick; extern color BodyBuyColor = LimeGreen; extern color BodySellColor = Orange; extern int WickWidth = 1; extern int BodyWidth = 2; extern bool alertsOn = false; extern bool alertsOnCurrent = false; extern bool alertsMessage = false; extern bool alertsNotification = false; extern bool alertsSound = false; extern bool alertsEmail = false; extern string MaMethods = ""; extern string __0 = "SMA"; extern string __1 = "EMA"; extern string __2 = "Double smoothed EMA"; extern string __3 = "Double EMA (DEMA)"; extern string __4 = "Triple EMA (TEMA)"; extern string __5 = "Smoothed MA"; extern string __6 = "Linear weighted MA"; extern string __7 = "Parabolic weighted MA"; extern string __8 = "Alexander MA"; extern string __9 = "Volume weghted MA"; extern string __10 = "Hull MA"; extern string __11 = "Triangular MA"; extern string __12 = "Sine weighted MA"; extern string __13 = "Linear regression"; extern string __14 = "IE/2"; extern string __15 = "NonLag MA"; extern string __16 = "Zero lag EMA"; extern string __17 = "Leader EMA"; extern string __18 = "Super smoother"; extern string __19 = "Smoother"; // // // double MABuffer[]; double UpBuffer[]; double DnBuffer[]; double UpbBuffer[]; double DnbBuffer[]; double slope[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(6); SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor); SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor); SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor); SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor); SetIndexBuffer(4,MABuffer); SetIndexBuffer(5,slope); IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")"); MaLength = MathMax(MaLength,1); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF function | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1); for(i=0,y=0;i<limit;i++) { if (Time<TimeArray[y]) y++; /********************************************************************************************************* Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom. Rule 1: Add extern inputs above for all neccesary values Rule 2: Use 'TimeFrame' for the indicator time frame Rule 3: Use 'y' for your indicator's shift value ********************************************************************************************************/ MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y); slope = slope; if (MABuffer>MABuffer) slope = 1; if (MABuffer<MABuffer) slope = -1; if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); } if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); } } return(0); } //+------------------------------------------------------------------+ Coding help 多时间框架指标 精英指标 :) Mladen Rakic 2014.04.04 11:19 #2525 thefxpros: 嗨,程序员,我想创建一个指标,通过stepMA平均公式绘制价格条。由于它是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中没有原始公式的痕迹,因为我使用iCustom函数创建了该指标的MTF版本。编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区方面有些混乱。你能帮助我吗? 预先感谢。 以下是我的代码。 //------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 DarkGreen #property indicator_width1 1 #property indicator_color2 FireBrick #property indicator_width2 1 #property indicator_color3 LimeGreen #property indicator_width3 2 #property indicator_color4 Orange #property indicator_width4 2 // // // extern int TimeFrame = 0; // Timeframe extern int MaLength = 10; // Ma Length extern int MaMethod = 18; // Ma method extern double Sensitivity = 3; // Sensivity Factor extern double StepSize = 3; // Constant Step Size extern int Shift = 0; // OShify extern bool HighLow = false; // High/Low Mode Switch (more sensitive) extern color WickBuyColor = DarkGreen; extern color WickSellColor = FireBrick; extern color BodyBuyColor = LimeGreen; extern color BodySellColor = Orange; extern int WickWidth = 1; extern int BodyWidth = 2; extern bool alertsOn = false; extern bool alertsOnCurrent = false; extern bool alertsMessage = false; extern bool alertsNotification = false; extern bool alertsSound = false; extern bool alertsEmail = false; extern string MaMethods = ""; extern string __0 = "SMA"; extern string __1 = "EMA"; extern string __2 = "Double smoothed EMA"; extern string __3 = "Double EMA (DEMA)"; extern string __4 = "Triple EMA (TEMA)"; extern string __5 = "Smoothed MA"; extern string __6 = "Linear weighted MA"; extern string __7 = "Parabolic weighted MA"; extern string __8 = "Alexander MA"; extern string __9 = "Volume weghted MA"; extern string __10 = "Hull MA"; extern string __11 = "Triangular MA"; extern string __12 = "Sine weighted MA"; extern string __13 = "Linear regression"; extern string __14 = "IE/2"; extern string __15 = "NonLag MA"; extern string __16 = "Zero lag EMA"; extern string __17 = "Leader EMA"; extern string __18 = "Super smoother"; extern string __19 = "Smoother"; // // // double MABuffer[]; double UpBuffer[]; double DnBuffer[]; double UpbBuffer[]; double DnbBuffer[]; double slope[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(6); SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor); SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor); SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor); SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor); SetIndexBuffer(4,MABuffer); SetIndexBuffer(5,slope); IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")"); MaLength = MathMax(MaLength,1); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF function | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1); for(i=0,y=0;i<limit;i++) { if (Time<TimeArray[y]) y++; /********************************************************************************************************* Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom. Rule 1: Add extern inputs above for all neccesary values Rule 2: Use 'TimeFrame' for the indicator time frame Rule 3: Use 'y' for your indicator's shift value ********************************************************************************************************/ MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y); slope = slope; if (MABuffer>MABuffer) slope = 1; if (MABuffer<MABuffer) slope = -1; if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); } if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); } } return(0); } //+------------------------------------------------------------------+ thefxpros 你所需要的只是对斜率缓冲区的调用(其余的你可以忽略不计) 如果返回的斜率为1,则是一个上升趋势 如果返回的斜率为-1,则为下降趋势。 Mladen Rakic 2014.04.04 11:34 #2526 thefxpros: 嗨,程序员,我试图创建一个指标,通过stepMA平均公式绘制价格条。由于这是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中,没有原始公式的痕迹,因为我使用iCustom函数创建了该指标的MTF版本。 编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区方面有些混乱。你能帮助我吗?预先感谢。 像这样。 //------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 DarkGreen #property indicator_width1 1 #property indicator_color2 FireBrick #property indicator_width2 1 #property indicator_color3 LimeGreen #property indicator_width3 2 #property indicator_color4 Orange #property indicator_width4 2 // // // extern int TimeFrame = 0; // Timeframe extern int MaLength = 10; // Ma Length extern int MaMethod = 18; // Ma method extern double Sensitivity = 3; // Sensivity Factor extern double StepSize = 3; // Constant Step Size extern int Shift = 0; // OShify extern bool HighLow = false; // High/Low Mode Switch (more sensitive) extern color WickBuyColor = DarkGreen; extern color WickSellColor = FireBrick; extern color BodyBuyColor = LimeGreen; extern color BodySellColor = Orange; extern int WickWidth = 1; extern int BodyWidth = 2; extern bool alertsOn = false; extern bool alertsOnCurrent = false; extern bool alertsMessage = false; extern bool alertsNotification = false; extern bool alertsSound = false; extern bool alertsEmail = false; extern string MaMethods = ""; extern string __0 = "SMA"; extern string __1 = "EMA"; extern string __2 = "Double smoothed EMA"; extern string __3 = "Double EMA (DEMA)"; extern string __4 = "Triple EMA (TEMA)"; extern string __5 = "Smoothed MA"; extern string __6 = "Linear weighted MA"; extern string __7 = "Parabolic weighted MA"; extern string __8 = "Alexander MA"; extern string __9 = "Volume weghted MA"; extern string __10 = "Hull MA"; extern string __11 = "Triangular MA"; extern string __12 = "Sine weighted MA"; extern string __13 = "Linear regression"; extern string __14 = "IE/2"; extern string __15 = "NonLag MA"; extern string __16 = "Zero lag EMA"; extern string __17 = "Leader EMA"; extern string __18 = "Super smoother"; extern string __19 = "Smoother"; // // // double UpBuffer[]; double DnBuffer[]; double UpbBuffer[]; double DnbBuffer[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor); SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor); SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor); SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor); IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")"); MaLength = MathMax(MaLength,1); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1); for(int i=limit;i>=0;i--) { int y = iBarShift(NULL,TimeFrame,Time); int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y); if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); } if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); } } return(0); } //+------------------------------------------------------------------+ 然后用相同的参数,它们将是相同的。 附加的文件: step_ma_bars.gif 77 kb Coding help 精英指标 :) Elite indicators :) Fausto Nunziante Del Gaudio 2014.04.04 12:21 #2527 mladen: 像这样://------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 DarkGreen #property indicator_width1 1 #property indicator_color2 FireBrick #property indicator_width2 1 #property indicator_color3 LimeGreen #property indicator_width3 2 #property indicator_color4 Orange #property indicator_width4 2 // // // extern int TimeFrame = 0; // Timeframe extern int MaLength = 10; // Ma Length extern int MaMethod = 18; // Ma method extern double Sensitivity = 3; // Sensivity Factor extern double StepSize = 3; // Constant Step Size extern int Shift = 0; // OShify extern bool HighLow = false; // High/Low Mode Switch (more sensitive) extern color WickBuyColor = DarkGreen; extern color WickSellColor = FireBrick; extern color BodyBuyColor = LimeGreen; extern color BodySellColor = Orange; extern int WickWidth = 1; extern int BodyWidth = 2; extern bool alertsOn = false; extern bool alertsOnCurrent = false; extern bool alertsMessage = false; extern bool alertsNotification = false; extern bool alertsSound = false; extern bool alertsEmail = false; extern string MaMethods = ""; extern string __0 = "SMA"; extern string __1 = "EMA"; extern string __2 = "Double smoothed EMA"; extern string __3 = "Double EMA (DEMA)"; extern string __4 = "Triple EMA (TEMA)"; extern string __5 = "Smoothed MA"; extern string __6 = "Linear weighted MA"; extern string __7 = "Parabolic weighted MA"; extern string __8 = "Alexander MA"; extern string __9 = "Volume weghted MA"; extern string __10 = "Hull MA"; extern string __11 = "Triangular MA"; extern string __12 = "Sine weighted MA"; extern string __13 = "Linear regression"; extern string __14 = "IE/2"; extern string __15 = "NonLag MA"; extern string __16 = "Zero lag EMA"; extern string __17 = "Leader EMA"; extern string __18 = "Super smoother"; extern string __19 = "Smoother"; // // // double UpBuffer[]; double DnBuffer[]; double UpbBuffer[]; double DnbBuffer[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor); SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor); SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor); SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor); IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")"); MaLength = MathMax(MaLength,1); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1); for(int i=limit;i>=0;i--) { int y = iBarShift(NULL,TimeFrame,Time); int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y); if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); } if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); } } return(0); } //+------------------------------------------------------------------+ [/PHP] And then with same parameters they are going to be the same : 好的,谢谢你。 Mladen,你知道我在哪里可以得到一些材料,以便认真学习这门语言,请问? 只是关于这种类型的代码的一个问题。 [PHP]如果(MABuffer>MABuffer)斜率=1。 它的意思是:如果(MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar])的斜率[of current bar]等于1。 正确吗? Mladen Rakic 2014.04.04 12:27 #2528 thefxpros: 好的,谢谢你。Mladen,你知道我在哪里可以得到一些材料,以便认真学习这种语言,请? 只是关于这种类型的代码的一个问题。 if (MABuffer>MABuffer) slope = 1; 它的意思是:如果(MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar]的斜率[of current bar]等于1。 对吗? 是的。也许只是稍微改一下说法:如果当前的MA>前一个MA,那么斜率=1 关于学习:我认为最好从这个帖子开始https://www.mql5.com/en/forum/172969/page2(当然也可以问。没有人不问就能学会)。 Dawns_mist 2014.04.04 12:51 #2529 请求! 我只是想要一个非常简单的EA。 - 一个EA只在2根蜡烛朝同一方向收盘时打开交易,并在同一蜡烛结束时关闭交易。 更多的解释...好吗?....,如果有2根蜡烛以绿色收盘,那么我将开出一个买入交易,这个我开出的交易将在同一根蜡烛结束时关闭,因此它也将在2根红色蜡烛关闭后开出卖出交易........,所以这只是一个简单的限制。 Fausto Nunziante Del Gaudio 2014.04.05 18:02 #2530 嗨。 我在使用icustom将一些指标转为MTF的时候很开心。该指标可以工作,但不能正确显示颜色和箭头,为什么? 请问错误在哪里? wilders_trailing_stop_mtf.mq4 wilders_trailing_stop.mq4 //------------------------------------------------------------------ #property copyright "thefxpros" #property link "thefxpros@katamail.com" //------------------------------------------------------------------ #property indicator_chart_window //#property indicator_color1 Orange //#property indicator_color2 LimeGreen //#property indicator_color3 LimeGreen //#property indicator_color4 Orange //#property indicator_width3 1 //#property indicator_width4 1 // // // extern int TimeFrame = 0; extern int Length = 2; extern double Coeff = 1.75; extern int LineWidth = 1; extern int ArrowWidth = 1; extern color UpLineClr = LimeGreen; extern color DnLineClr = Orange; extern color UpArrowClr = LimeGreen; extern color DnArrowClr = Orange; // double WTS[]; double WTSDn[]; double arrUp[]; double arrDn[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(4); SetIndexBuffer(0,WTS); SetIndexStyle(0,DRAW_LINE, EMPTY, LineWidth, DnLineClr); SetIndexBuffer(1,WTSDn); SetIndexStyle(1,DRAW_LINE, EMPTY, LineWidth, UpLineClr); SetIndexBuffer(2,arrUp); SetIndexStyle(2,DRAW_ARROW, EMPTY, ArrowWidth, UpArrowClr); SetIndexArrow(2,SYMBOL_ARROWUP); SetIndexBuffer(3,arrDn); SetIndexStyle(3,DRAW_ARROW, EMPTY, ArrowWidth, DnArrowClr); SetIndexArrow(3,SYMBOL_ARROWDOWN); IndicatorShortName("Wilders trailing stop MTF ("+Length+","+Coeff+")"); Length = MathMax(Length,1); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("Wilders trailing stop MTF ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF function | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1); for(i=0,y=0;i<limit;i++) { if (Time<TimeArray[y]) y++; /********************************************************************************************************* Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom. Rule 1: Add extern inputs above for all neccesary values Rule 2: Use 'TimeFrame' for the indicator time frame Rule 3: Use 'y' for your indicator's shift value ********************************************************************************************************/ WTS=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,0,y); WTSDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,1,y); arrUp=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,2,y); arrDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,3,y); } return(0); } //+------------------------------------------------------------------+ 附加的文件: wilders_trailing_stop_mtf.mq4 4 kb wilders_trailing_stop.mq4 3 kb Coding help 多时间框架指标 I need help on 1...246247248249250251252253254255256257258259260...786 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
指示器的修改帮助
大家好
这个MA交叉指标在每个tick 上都会产生警报。有没有人可以纠正这个问题,或者至少教我怎么做。
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double g_ibuf_76[];
double g_ibuf_80[];
int g_period_84 = 5;
int g_period_88 = 34;
extern bool Alerts = TRUE;
extern bool PopAlerts = TRUE;
extern bool PushAlerts = TRUE;
extern bool EmailAlerts = TRUE;
extern bool SoundAlerts = TRUE;
extern string SoundFileUp = "UP.wav";
extern string SoundFileDn = "DN.wav";
int gi_96 = 0;
int gi_100 = 0;
int init() {
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 233);
SetIndexBuffer(0, g_ibuf_76);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 234);
SetIndexBuffer(1, g_ibuf_80);
return (0);
}
int deinit() {
return (0);
}
int start() {
int li_20;
double l_ima_24;
double l_ima_32;
double l_ima_40;
double l_ima_48;
double l_ima_56;
double l_ima_64;
double ld_72;
double ld_80;
int li_88 = IndicatorCounted();
if (li_88 < 0) return (-1);
if (li_88 > 0) li_88--;
int li_12 = Bars - li_88;
for (int li_16 = 0; li_16 <= li_12; li_16++) {
li_20 = li_16;
ld_72 = 0;
ld_80 = 0;
for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);
ld_72 = ld_80 / 10.0;
l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);
l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);
l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);
l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);
l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);
l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);
if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {
g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;
if (li_16 <= 2 && Alerts && !gi_100) {
if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");
if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");
if (SoundAlerts) PlaySound(SoundFileUp);
if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");
gi_96 = TRUE;
gi_100 = FALSE;
}
} else {
if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {
g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;
if (li_16 <= 2 && Alerts && !gi_100) {
if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");
if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");
if (SoundAlerts) PlaySound(SoundFileUp);
if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");
gi_100 = TRUE;
gi_96 = FALSE;
}
}
}
}
return (0);
}
请注意
阿明
大家好
这个MA交叉指标在每一个刻度上都会产生警报。有没有人可以纠正这个问题,或者至少教我怎么做。
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double g_ibuf_76[];
double g_ibuf_80[];
int g_period_84 = 5;
int g_period_88 = 34;
extern bool Alerts = TRUE;
extern bool PopAlerts = TRUE;
extern bool PushAlerts = TRUE;
extern bool EmailAlerts = TRUE;
extern bool SoundAlerts = TRUE;
extern string SoundFileUp = "UP.wav";
extern string SoundFileDn = "DN.wav";
int gi_96 = 0;
int gi_100 = 0;
int init() {
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 233);
SetIndexBuffer(0, g_ibuf_76);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 234);
SetIndexBuffer(1, g_ibuf_80);
return (0);
}
int deinit() {
return (0);
}
int start() {
int li_20;
double l_ima_24;
double l_ima_32;
double l_ima_40;
double l_ima_48;
double l_ima_56;
double l_ima_64;
double ld_72;
double ld_80;
int li_88 = IndicatorCounted();
if (li_88 < 0) return (-1);
if (li_88 > 0) li_88--;
int li_12 = Bars - li_88;
for (int li_16 = 0; li_16 <= li_12; li_16++) {
li_20 = li_16;
ld_72 = 0;
ld_80 = 0;
for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);
ld_72 = ld_80 / 10.0;
l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);
l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);
l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);
l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);
l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);
l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);
if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {
g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;
if (li_16 <= 2 && Alerts && !gi_100) {
if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");
if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");
if (SoundAlerts) PlaySound(SoundFileUp);
if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");
gi_96 = TRUE;
gi_100 = FALSE;
}
} else {
if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {
g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;
if (li_16 <= 2 && Alerts && !gi_100) {
if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");
if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");
if (SoundAlerts) PlaySound(SoundFileUp);
if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");
gi_100 = TRUE;
gi_96 = FALSE;
}
}
}
}
return (0);
}
谢谢
阿明阿明,这是一个反编译版本的重绘指标,你已经注意到了问题。请使用这个帖子中的指标:https://www.mql5.com/en/forum/173574/page447
亲爱的程序员们,你们好!
是否有可能在这个指标中添加警报选项,当它改变颜色的时候?
最重要的是要尽快发出警报(它总是发生在蜡烛的开端)。
选项1:电子邮件。 (TRUE/FALSE)
选项2:盒子。 (TRUE/FALSE)
在电子邮件或盒子的主题中显示的文本。[PAIR]打开TF[TF]。
由于我尊重你的时间,我自己先尝试了一下编码,但没有任何运气。
希望有人能帮助我。
谢谢你的帮助!
hama.mq4
嗨,程序员们,我正试图创建一个指标,通过stepMA平均公式绘制价格条。由于它是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中没有原始公式的痕迹,因为我使用iCustom函数 创建了该指标的MTF版本。
编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区上做了一些手脚。你能帮助我吗?
预先感谢。
以下是我的代码。
#property copyright "mladen"
#property link "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_width1 1
#property indicator_color2 FireBrick
#property indicator_width2 1
#property indicator_color3 LimeGreen
#property indicator_width3 2
#property indicator_color4 Orange
#property indicator_width4 2
//
//
//
extern int TimeFrame = 0; // Timeframe
extern int MaLength = 10; // Ma Length
extern int MaMethod = 18; // Ma method
extern double Sensitivity = 3; // Sensivity Factor
extern double StepSize = 3; // Constant Step Size
extern int Shift = 0; // OShify
extern bool HighLow = false; // High/Low Mode Switch (more sensitive)
extern color WickBuyColor = DarkGreen;
extern color WickSellColor = FireBrick;
extern color BodyBuyColor = LimeGreen;
extern color BodySellColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
extern bool alertsOn = false;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = false;
extern bool alertsNotification = false;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern string MaMethods = "";
extern string __0 = "SMA";
extern string __1 = "EMA";
extern string __2 = "Double smoothed EMA";
extern string __3 = "Double EMA (DEMA)";
extern string __4 = "Triple EMA (TEMA)";
extern string __5 = "Smoothed MA";
extern string __6 = "Linear weighted MA";
extern string __7 = "Parabolic weighted MA";
extern string __8 = "Alexander MA";
extern string __9 = "Volume weghted MA";
extern string __10 = "Hull MA";
extern string __11 = "Triangular MA";
extern string __12 = "Sine weighted MA";
extern string __13 = "Linear regression";
extern string __14 = "IE/2";
extern string __15 = "NonLag MA";
extern string __16 = "Zero lag EMA";
extern string __17 = "Leader EMA";
extern string __18 = "Super smoother";
extern string __19 = "Smoother";
//
//
//
double MABuffer[];
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
double slope[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(6);
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);
SetIndexBuffer(4,MABuffer);
SetIndexBuffer(5,slope);
IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");
MaLength = MathMax(MaLength,1);
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined time frame on to current time frame
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);
for(i=0,y=0;i<limit;i++)
{
if (Time<TimeArray[y]) y++;
/*********************************************************************************************************
Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
********************************************************************************************************/
MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);
slope = slope;
if (MABuffer>MABuffer) slope = 1;
if (MABuffer<MABuffer) slope = -1;
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+嗨,程序员,我想创建一个指标,通过stepMA平均公式绘制价格条。由于它是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中没有原始公式的痕迹,因为我使用iCustom函数创建了该指标的MTF版本。
编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区方面有些混乱。你能帮助我吗?
预先感谢。
以下是我的代码。
#property copyright "mladen"
#property link "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_width1 1
#property indicator_color2 FireBrick
#property indicator_width2 1
#property indicator_color3 LimeGreen
#property indicator_width3 2
#property indicator_color4 Orange
#property indicator_width4 2
//
//
//
extern int TimeFrame = 0; // Timeframe
extern int MaLength = 10; // Ma Length
extern int MaMethod = 18; // Ma method
extern double Sensitivity = 3; // Sensivity Factor
extern double StepSize = 3; // Constant Step Size
extern int Shift = 0; // OShify
extern bool HighLow = false; // High/Low Mode Switch (more sensitive)
extern color WickBuyColor = DarkGreen;
extern color WickSellColor = FireBrick;
extern color BodyBuyColor = LimeGreen;
extern color BodySellColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
extern bool alertsOn = false;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = false;
extern bool alertsNotification = false;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern string MaMethods = "";
extern string __0 = "SMA";
extern string __1 = "EMA";
extern string __2 = "Double smoothed EMA";
extern string __3 = "Double EMA (DEMA)";
extern string __4 = "Triple EMA (TEMA)";
extern string __5 = "Smoothed MA";
extern string __6 = "Linear weighted MA";
extern string __7 = "Parabolic weighted MA";
extern string __8 = "Alexander MA";
extern string __9 = "Volume weghted MA";
extern string __10 = "Hull MA";
extern string __11 = "Triangular MA";
extern string __12 = "Sine weighted MA";
extern string __13 = "Linear regression";
extern string __14 = "IE/2";
extern string __15 = "NonLag MA";
extern string __16 = "Zero lag EMA";
extern string __17 = "Leader EMA";
extern string __18 = "Super smoother";
extern string __19 = "Smoother";
//
//
//
double MABuffer[];
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
double slope[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(6);
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);
SetIndexBuffer(4,MABuffer);
SetIndexBuffer(5,slope);
IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");
MaLength = MathMax(MaLength,1);
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined time frame on to current time frame
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);
for(i=0,y=0;i<limit;i++)
{
if (Time<TimeArray[y]) y++;
/*********************************************************************************************************
Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
********************************************************************************************************/
MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);
slope = slope;
if (MABuffer>MABuffer) slope = 1;
if (MABuffer<MABuffer) slope = -1;
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+thefxpros
你所需要的只是对斜率缓冲区的调用(其余的你可以忽略不计)
如果返回的斜率为1,则是一个上升趋势
如果返回的斜率为-1,则为下降趋势。
嗨,程序员,我试图创建一个指标,通过stepMA平均公式绘制价格条。由于这是一个精英指标,我不确定是否可以把它放在这里,但在我的代码中,没有原始公式的痕迹,因为我使用iCustom函数创建了该指标的MTF版本。
编译器完全没有给我错误,但指标却不能正常工作,我想我在缓冲区方面有些混乱。你能帮助我吗?
预先感谢。
像这样。
#property copyright "mladen"
#property link "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_width1 1
#property indicator_color2 FireBrick
#property indicator_width2 1
#property indicator_color3 LimeGreen
#property indicator_width3 2
#property indicator_color4 Orange
#property indicator_width4 2
//
//
//
extern int TimeFrame = 0; // Timeframe
extern int MaLength = 10; // Ma Length
extern int MaMethod = 18; // Ma method
extern double Sensitivity = 3; // Sensivity Factor
extern double StepSize = 3; // Constant Step Size
extern int Shift = 0; // OShify
extern bool HighLow = false; // High/Low Mode Switch (more sensitive)
extern color WickBuyColor = DarkGreen;
extern color WickSellColor = FireBrick;
extern color BodyBuyColor = LimeGreen;
extern color BodySellColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
extern bool alertsOn = false;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = false;
extern bool alertsNotification = false;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern string MaMethods = "";
extern string __0 = "SMA";
extern string __1 = "EMA";
extern string __2 = "Double smoothed EMA";
extern string __3 = "Double EMA (DEMA)";
extern string __4 = "Triple EMA (TEMA)";
extern string __5 = "Smoothed MA";
extern string __6 = "Linear weighted MA";
extern string __7 = "Parabolic weighted MA";
extern string __8 = "Alexander MA";
extern string __9 = "Volume weghted MA";
extern string __10 = "Hull MA";
extern string __11 = "Triangular MA";
extern string __12 = "Sine weighted MA";
extern string __13 = "Linear regression";
extern string __14 = "IE/2";
extern string __15 = "NonLag MA";
extern string __16 = "Zero lag EMA";
extern string __17 = "Leader EMA";
extern string __18 = "Super smoother";
extern string __19 = "Smoother";
//
//
//
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);
IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");
MaLength = MathMax(MaLength,1);
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);
for(int i=limit;i>=0;i--)
{
int y = iBarShift(NULL,TimeFrame,Time);
int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+
然后用相同的参数,它们将是相同的。
像这样:
#property copyright "mladen"
#property link "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_width1 1
#property indicator_color2 FireBrick
#property indicator_width2 1
#property indicator_color3 LimeGreen
#property indicator_width3 2
#property indicator_color4 Orange
#property indicator_width4 2
//
//
//
extern int TimeFrame = 0; // Timeframe
extern int MaLength = 10; // Ma Length
extern int MaMethod = 18; // Ma method
extern double Sensitivity = 3; // Sensivity Factor
extern double StepSize = 3; // Constant Step Size
extern int Shift = 0; // OShify
extern bool HighLow = false; // High/Low Mode Switch (more sensitive)
extern color WickBuyColor = DarkGreen;
extern color WickSellColor = FireBrick;
extern color BodyBuyColor = LimeGreen;
extern color BodySellColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
extern bool alertsOn = false;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = false;
extern bool alertsNotification = false;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern string MaMethods = "";
extern string __0 = "SMA";
extern string __1 = "EMA";
extern string __2 = "Double smoothed EMA";
extern string __3 = "Double EMA (DEMA)";
extern string __4 = "Triple EMA (TEMA)";
extern string __5 = "Smoothed MA";
extern string __6 = "Linear weighted MA";
extern string __7 = "Parabolic weighted MA";
extern string __8 = "Alexander MA";
extern string __9 = "Volume weghted MA";
extern string __10 = "Hull MA";
extern string __11 = "Triangular MA";
extern string __12 = "Sine weighted MA";
extern string __13 = "Linear regression";
extern string __14 = "IE/2";
extern string __15 = "NonLag MA";
extern string __16 = "Zero lag EMA";
extern string __17 = "Leader EMA";
extern string __18 = "Super smoother";
extern string __19 = "Smoother";
//
//
//
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);
IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");
MaLength = MathMax(MaLength,1);
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);
for(int i=limit;i>=0;i--)
{
int y = iBarShift(NULL,TimeFrame,Time);
int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+
[/PHP]
And then with same parameters they are going to be the same :好的,谢谢你。
Mladen,你知道我在哪里可以得到一些材料,以便认真学习这门语言,请问?
只是关于这种类型的代码的一个问题。
[PHP]如果(MABuffer>MABuffer)斜率=1。它的意思是:如果(MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar])的斜率[of current bar]等于1。
正确吗?
好的,谢谢你。
Mladen,你知道我在哪里可以得到一些材料,以便认真学习这种语言,请?
只是关于这种类型的代码的一个问题。
它的意思是:如果(MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar]的斜率[of current bar]等于1。
对吗?是的。也许只是稍微改一下说法:如果当前的MA>前一个MA,那么斜率=1
关于学习:我认为最好从这个帖子开始https://www.mql5.com/en/forum/172969/page2(当然也可以问。没有人不问就能学会)。
请求!
我只是想要一个非常简单的EA。
- 一个EA只在2根蜡烛朝同一方向收盘时打开交易,并在同一蜡烛结束时关闭交易。
更多的解释...好吗?....,如果有2根蜡烛以绿色收盘,那么我将开出一个买入交易,这个我开出的交易将在同一根蜡烛结束时关闭,因此它也将在2根红色蜡烛关闭后开出卖出交易........,所以这只是一个简单的限制。
嗨。
我在使用icustom将一些指标转为MTF的时候很开心。该指标可以工作,但不能正确显示颜色和箭头,为什么?
请问错误在哪里?
wilders_trailing_stop_mtf.mq4
wilders_trailing_stop.mq4
#property copyright "thefxpros"
#property link "thefxpros@katamail.com"
//------------------------------------------------------------------
#property indicator_chart_window
//#property indicator_color1 Orange
//#property indicator_color2 LimeGreen
//#property indicator_color3 LimeGreen
//#property indicator_color4 Orange
//#property indicator_width3 1
//#property indicator_width4 1
//
//
//
extern int TimeFrame = 0;
extern int Length = 2;
extern double Coeff = 1.75;
extern int LineWidth = 1;
extern int ArrowWidth = 1;
extern color UpLineClr = LimeGreen;
extern color DnLineClr = Orange;
extern color UpArrowClr = LimeGreen;
extern color DnArrowClr = Orange;
//
double WTS[];
double WTSDn[];
double arrUp[];
double arrDn[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(4);
SetIndexBuffer(0,WTS); SetIndexStyle(0,DRAW_LINE, EMPTY, LineWidth, DnLineClr);
SetIndexBuffer(1,WTSDn); SetIndexStyle(1,DRAW_LINE, EMPTY, LineWidth, UpLineClr);
SetIndexBuffer(2,arrUp); SetIndexStyle(2,DRAW_ARROW, EMPTY, ArrowWidth, UpArrowClr); SetIndexArrow(2,SYMBOL_ARROWUP);
SetIndexBuffer(3,arrDn); SetIndexStyle(3,DRAW_ARROW, EMPTY, ArrowWidth, DnArrowClr); SetIndexArrow(3,SYMBOL_ARROWDOWN);
IndicatorShortName("Wilders trailing stop MTF ("+Length+","+Coeff+")");
Length = MathMax(Length,1);
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("Wilders trailing stop MTF ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined time frame on to current time frame
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);
for(i=0,y=0;i<limit;i++)
{
if (Time<TimeArray[y]) y++;
/*********************************************************************************************************
Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
********************************************************************************************************/
WTS=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,0,y);
WTSDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,1,y);
arrUp=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,2,y);
arrDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,3,y);
}
return(0);
}
//+------------------------------------------------------------------+