.

Re: How to add alerts to your indicators

#11
It takes a fair amount of time to learn the intricacies of coding. Something that will take time to learn. For those of you that are wanting to add alerts to some of your indicators , I have found a tool that could possibly help you do so. I am not affiliated with EABuilder.com in any way , shape or form. So I am not really trying to promote anything. I have just recently found the site while searching for ways to add alerts to indicators and find it could be useful to those of us without coding experience. It seems to be something for simpler tasks. Not sure how complex you can get. So...If you have an indicator that you would like to add some simple alerts to , check out EABuilder.com

PS - Not sure what Admin is going to think about this post but , I'm just trying to help people with the same problems I have had.


Re: How to add alerts to your indicators

#12
Here is the code for a Historical Volatility Alert that I created. I need to play around with it a bit more but , it was fairly easy to do. Feel free to change it around for your personal use.

//+------------------------------------------------------------------+
//| Indicator: HV.mq4 |
//| Created with EABuilder.com |
//| http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link "http://eabuilder.com"
#property version "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 1

#property indicator_type1 DRAW_ARROW
#property indicator_width1 1
#property indicator_color1 0xFFAA00
#property indicator_label1 "Buy"

//--- indicator buffers
double Buffer1[];

datetime time_alert; //used when sending alert
double myPoint; //initialized in OnInit

void myAlert(string type, string message)
{
if(type == "print")
Print(message);
else if(type == "error")
{
Print(type+" | HV @ "+Symbol()+","+Period()+" | "+message);
}
else if(type == "order")
{
}
else if(type == "modify")
{
}
else if(type == "indicator")
{
Print(type+" | HV @ "+Symbol()+","+Period()+" | "+message);
}
}

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
IndicatorBuffers(1);
SetIndexBuffer(0, Buffer1);
SetIndexEmptyValue(0, 0);
SetIndexArrow(0, 241);
//initialize myPoint
myPoint = Point();
if(Digits() == 5 || Digits() == 3)
{
myPoint *= 10;
}
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
int limit = rates_total - prev_calculated;
//--- counting from 0 to rates_total
ArraySetAsSeries(Buffer1, true);
//--- initial zero
if(prev_calculated < 1)
{
ArrayInitialize(Buffer1, 0);
}
else
limit++;

//--- main loop
for(int i = limit-1; i >= 0; i--)
{
if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation
//Indicator Buffer 1
if(iCustom(NULL, PERIOD_CURRENT, "HistVolatility6", 8, 365, true, 0, 1000, 1, 0, i) > 18 //HistVolatility6 > fixed value
)
{
Buffer1 = Open[1+i] - iATR(NULL, PERIOD_CURRENT, 14, i); //Set indicator value at Candlestick Open - Average True Range
if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "Buy"); time_alert = Time[0]; } //Instant alert, only once per bar
}
else
{
Buffer1 = 0;
}
}
return(rates_total);
}
//+------------------------------------------------------------------+


Who is online

Users browsing this forum: Bing [Bot], Google [Bot], mrtools, Pava and 20 guests