Miscellaneous
0
Views
0
Downloads
0
Favorites
iMAXalert2
/*+-------------------------------------------------------------------+
| iMAXalert.mq4 |
| |
| "Modified Optimum Elliptic Filter" |
| Source of calculations: |
| Stocks & Commodities vol 18:7 p20-29 |
| Optimal Detrending by John F. Ehlers |
| |
| Crafted by Wylie |
| dazzle.html@live.com |
+-------------------------------------------------------------------+*/
#property copyright "Wylie"
#property link "dazzle.html@live.com"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
/*+-------------------------------------------------------------------+
| iMAXalert Parameters |
+-------------------------------------------------------------------+*/
extern int Ph2shiftRed = 1;
extern bool EnableAlerts = true;
extern string a_ = "Stop Alerts from sounding more than";
extern string b_ = "once every ? seconds (+ 1 tick time).";
extern int AlertStopTime = 20;
int buffers = 2,
Threshold, // Pips above crossing up, or pips below crossing down.
// Change the values in the init() function if you need to.
MinBars,c;
double ExtMapBuffer0[],
ExtMapBuffer1[];
string Chart;
static datetime AlertX[2];
/*+-------------------------------------------------------------------+
| iMAXalert Initialization |
+-------------------------------------------------------------------+*/
int init()
{
IndicatorBuffers(2);
// Index Buffer 0
SetIndexBuffer(0,ExtMapBuffer0);
SetIndexShift(0,0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Aqua);
// Index Buffer 1
SetIndexBuffer(1,ExtMapBuffer1);
SetIndexShift(1,0);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Red);
IndicatorShortName("iMAX");
MinBars = 20;
switch(Period())
{case 1: Chart = "M1"; Threshold = 1;break;
case 2: Chart = "M5"; Threshold = 1;break;
case 3: Chart = "M15"; Threshold = 2;break;
case 4: Chart = "M30"; Threshold = 2;break;
case 5: Chart = "H1"; Threshold = 5;break;
case 6: Chart = "H4"; Threshold = 10;break;
case 7: Chart = "D1"; Threshold = 10;break;
case 8: Chart = "W5"; Threshold = 30;break;
case 9: Chart = "MN"; Threshold = 30;break;}
return (0);
} // int init()
/*+-------------------------------------------------------------------+
| iMAXalert Main cycle |
+-------------------------------------------------------------------+*/
int start()
{
if(Bars <= MinBars){return (0);}
double b0 = ExtMapBuffer0[0],
b1 = ExtMapBuffer0[1],
r0 = ExtMapBuffer1[0],
r1 = ExtMapBuffer1[1];
int countedBars = IndicatorCounted();
if(countedBars < 0){return (-1);}
if(countedBars > 0){countedBars--;}
int c,limit = Bars - countedBars - 1;
double x = 0.5;
for(c = limit;c >= 0;c--)
{ExtMapBuffer0[c] = (0.13785 * (2 * ((High[c] + Low[c]) * x) - ((High[c+1] + Low[c+1]) * x)))
+ (0.0007 * (2 * ((High[c+1] + Low[c+1]) * x) - ((High[c+2] + Low[c+2]) * x)))
+ (0.13785 * (2 * ((High[c+2] + Low[c+2]) * x) - ((High[c+3] + Low[c+3]) * x)))
+ (1.2103 * ExtMapBuffer0[c + 1] - 0.4867 * ExtMapBuffer0[c + 2]);
ExtMapBuffer1[c] = ExtMapBuffer0[c+Ph2shiftRed];
} // for(c = limit;c >= 0;c--)
if(EnableAlerts)
{if(b0 > r0 + (Threshold * Point) && b1 < r1 + (Threshold * Point))
{sendAlert(0,(getDateTime()+" "+Symbol()+" "+Chart+" iMAX signals up trend crossing."));}
if(b0 < r0 - (Threshold * Point) && b1 > r1 - (Threshold * Point))
{sendAlert(1,(getDateTime()+" "+Symbol()+" "+Chart+" iMAX signals down trend crossing."));}}
return (0);
} // int start()
/*+-------------------------------------------------------------------+
| End iMAXalert Main cycle |
+-------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------+
| iMAXalert support functions |
+-------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------+
| *** Alert processing function |
+-------------------------------------------------------------------+*/
void sendAlert(int AlertNum,string AlertText)
{
if(TimeCurrent() > AlertX[AlertNum] + AlertStopTime)
{AlertX[AlertNum] = TimeCurrent();
/* Add a sound file here if you want another form of alert...
The sound file must be located in the MT4 "sounds" file folder
and must be a .wav format file. */
// PlaySound("alert.wav");
Alert(AlertText);}
return(0);
} //
/*+-------------------------------------------------------------------+
| *** Date/Time display function |
+-------------------------------------------------------------------+*/
string getDateTime()
{
string dsplyDateTime = TimeToStr(TimeCurrent(),TIME_DATE|TIME_DATE)+" "+
TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
return(dsplyDateTime);
} // datetime getTime()
/*+-------------------------------------------------------------------+
| End iMAXalert support functions |
+-------------------------------------------------------------------+*/
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---