Code:
#property copyright "©2007-2021 SHARK_MACD_CLASSIC_V.21. Alle Rechte vorbehalten "
//#property strict
#property description "*~~* SHARK_MACD_CLASSIC_V.21 *~~*"
#property description " "
#property description " The MACD Indicator With Alert "
#property description " "
#property description "WARNING : You use this software at your own risk."
#property description "The creator of these plugins cannot be held responsible for damage or loss."
#property description " "
//#property icon "\\Files\\Shark.ico"
#include <stdlib.mqh>
#include <stderror.mqh>
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 C'64,121,246' // Dunkelblau
#property indicator_color2 C'248,86,13' // Orange
#property indicator_color3 clrSnow
#property indicator_color4 clrFireBrick
#property indicator_color5 clrForestGreen // Grün
#property indicator_level1 0;
#property indicator_levelcolor clrLightSlateGray
#property indicator_levelstyle DRAW_ZIGZAG
//+------------------------------------------------------------------+
//| SIGNALMENÜ |
//+------------------------------------------------------------------+
enum ENUM_MACD_ALERT
{
OFF = 0,
ON = 1,
};
bool initFinished=false;
extern string aSHARK_Administration ="~~* MACD_Administration *~~";
extern int FAST_EMA = 12;
extern int SLOW_EMA = 26;
extern int MACD_SMA = 9;
extern ENUM_APPLIED_PRICE USE_ON = PRICE_CLOSE;
//extern ENUM_MA_METHOD MA_Method = MODE_SMA; // MA Method
//extern ENUM_STO_PRICE Price_Field = 0; // Price Field 0 = Low/High or 1 = Close/Close)
extern string bSHARK_Administration ="~~* MACD_Arrows *~~"; //RSI_Settings
extern ENUM_MACD_ALERT PopupAlerts = true;
extern ENUM_MACD_ALERT PushNotificationAlerts = false;
extern ENUM_MACD_ALERT SoundAlerts = false;
//extern string SoundFileLong = "alert.wav";
//extern string SoundFileShort = "alert2.wav";
//extern bool EmailAlerts = false;
datetime time_alert; //used when sending alert
double SHARK_BUFFER_M[],SHARK_BUFFER_S[],SHARK_BUFFER_T[],SHARK_BUFFER_DN[],SHARK_BUFFER_UP[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
IndicatorDigits(Digits+1);//max. 2
SetIndexBuffer(0,SHARK_BUFFER_M,INDICATOR_DATA);
SetIndexStyle(0,DRAW_LINE,EMPTY,1);
SetIndexDrawBegin(0,FAST_EMA+SLOW_EMA);
SetIndexLabel(0,"MAIN");
SetIndexBuffer(1,SHARK_BUFFER_S,INDICATOR_DATA);
SetIndexStyle(1,DRAW_LINE,EMPTY,1);
//SetIndexDrawBegin(1,MACD_SMA);
SetIndexLabel(1,"SIGNAL");
SetIndexBuffer(2,SHARK_BUFFER_T,INDICATOR_DATA);
SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY_VALUE,3);
SetIndexLabel(2,NULL);
SetIndexBuffer(3,SHARK_BUFFER_DN,INDICATOR_DATA);
SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,3);
SetIndexLabel(3,NULL);
SetIndexBuffer(4,SHARK_BUFFER_UP,INDICATOR_DATA);
SetIndexStyle(4,DRAW_HISTOGRAM,EMPTY,3);
SetIndexLabel(4,NULL);
IndicatorShortName("SHARK_MACD_CLASSIC_V.21"+"("+FAST_EMA+","+SLOW_EMA+","+MACD_SMA+","+PriceTypeToString(USE_ON)+","+_Periods_of_Time(IntegerToString(Period()))+")");
if(FAST_EMA < 0)
{
Print("Incorrect value for input variable InpPeriod = ",FAST_EMA);
return(INIT_FAILED);
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
ObjectsDeleteAll();
//deleteArrows();
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//_OVERLINIEN();
int counted_bars=IndicatorCounted(),limit,i;
if(counted_bars<0)
return(-1);
if(counted_bars>0)
counted_bars--;
limit=MathMin(Bars-counted_bars,Bars-1);
for(i = limit; i >= 0 && !IsStopped(); i--)
{
//+------------------------------------------------------------------+
SHARK_BUFFER_M[i] = iMA(Symbol(),Period(),12,0,MODE_EMA,PRICE_CLOSE,i)- iMA(Symbol(),Period(),26,0,MODE_EMA,PRICE_CLOSE,i);
SHARK_BUFFER_S[i] = iMAOnArray(SHARK_BUFFER_M,0,9,0,MODE_SMA,i);
SHARK_BUFFER_T[i] = (SHARK_BUFFER_M[i] - SHARK_BUFFER_S[i]);
//+------------------------------------------------------------------+
//| TRENDBESTIMMUNG |
//+------------------------------------------------------------------+
if((SHARK_BUFFER_T[i+2] < 0 && SHARK_BUFFER_T[i] > 0))
{SHARK_BUFFER_UP[i+1] = SHARK_BUFFER_T[i+1];}
if((SHARK_BUFFER_T[i+2]> 0 && SHARK_BUFFER_T[i] < 0 ))
{SHARK_BUFFER_DN[i+1] = SHARK_BUFFER_T[i+1];}
//+------------------------------------------------------------------+
//| ALERTSIGNALE |
//+------------------------------------------------------------------+
if((SHARK_BUFFER_T[i+2] < 0 && SHARK_BUFFER_T[i] > 0))
{
if(i == 0 && Time[0] != time_alert)
{
myAlert("Indicator", "LONG");
time_alert = Time[0];
}
}
if((SHARK_BUFFER_T[i+2]> 0 && SHARK_BUFFER_T[i] < 0 ))
{
if(i == 0 && Time[0] != time_alert)
{
myAlert("indicator", "SHORT");
time_alert = Time[0];
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string PriceTypeToString(int pt)
{
string answer;
switch(pt)
{
case 0:
answer = "Close" ;
break;
case 1:
answer = "Open" ;
break;
case 2:
answer = "High" ;
break;
case 3:
answer = "Low" ;
break;
case 4:
answer = "Median" ;
break;
case 5:
answer = "Typical" ;
break;
case 6:
answer = "Wighted" ;
break;
default:
answer = "Invalid price field requested";
Alert(answer);
}
return(answer);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Time_Periods |
//+------------------------------------------------------------------+
string _Periods_of_Time(int pot)
{
string Timetemp;
switch(pot)
{
case 1 :
Timetemp = "M1";
break;
case 5 :
Timetemp = "M5";
break;
case 15 :
Timetemp = "M15";
break;
case 30 :
Timetemp = "M30";
break;
case 60 :
Timetemp = "H1";
break;
case 240 :
Timetemp = "H4";
break;
case 1440 :
Timetemp = "D1";
break;
case 10080 :
Timetemp = "W1";
break;
case 43200 :
Timetemp = "MN";
break;
default:
Timetemp = "Invalid time field requested";
Alert(Timetemp);
}
return(Timetemp);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void myAlert(string type, string message)
{
string Temp_Message = type+" | SHARK_MACD_CLASSIC_V.21"+" | Timechart.: "+_Periods_of_Time(IntegerToString(Period()))+" | Symbol.: "+Symbol()+" | Signal.: "+ message;
if(type == "print")
Print(message);
else
if(type == "error")
{
Print(type+" | MACD @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
}
else
if(type == "Indicator")
{
if(PopupAlerts)
Alert(Temp_Message); //type+" |SHARK_MACD_CLASSIC_V.21 @ "+Symbol()+","+_Periods_of_Time(IntegerToString(Period()))+" | "+message);
//if(EmailAlerts) SendMail("SHARK_MACD_CLASSIC_V.21"+AccountNumber()+", "+WindowExpertName()+" - Alert on "+Symbol()+", period ","SHARK_MACD_CLASSIC_V.21"+Symbol()+", period ");
if(SoundAlerts)
PlaySound("alert.wav");
if(PushNotificationAlerts)
SendNotification(Temp_Message);//"SHARK_MACD_CLASSIC_V.21"+AccountNumber()+", "+WindowExpertName()+message);
}
}