//+------------------------------------------------------------------+
//| Multi_Signal.mq4 |
//| ������ |
//| |
//+------------------------------------------------------------------+
#property copyright "������"
#property link ""
#property indicator_separate_window
//---- input parameters
extern int MA_Cl.period=4;
extern int MA_Op.period=16;
extern int HMA_Slow.period=180;
extern int HMA_Quick.period=15;
extern int timeframe=PERIOD_M15;
extern int ReminderBar=4;
extern int X=500;
extern int Y=15;
extern int window=1;
extern int font_size=10;
extern int IndicatorNumber=1;
extern string __________________="_____________________";
extern string Symbol.1="EURUSD";
extern color Color.1=C'193,225,193';
extern string Symbol.2="USDJPY";
extern color Color.2=C'193,225,193';
extern string Symbol.3="USDCHF";
extern color Color.3=C'193,225,193';
extern string Symbol.4="USDCAD";
extern color Color.4=C'193,225,193';
extern string Symbol.5="AUDUSD";
extern color Color.5=C'193,225,193';
extern string Symbol.6="NZDUSD";
extern color Color.6=C'193,225,193';
extern string Symbol.7="AUDJPY";
extern color Color.7=C'149,205,255';
extern string Symbol.8="CADJPY";
extern color Color.8=C'149,205,255';
extern string Symbol.9="CHFJPY";
extern color Color.9=C'149,205,255';
extern string Symbol.10="EURJPY";
extern color Color.10=C'149,205,255';
extern string Symbol.11="GBPJPY";
extern color Color.11=C'149,205,255';
extern string Symbol.12="NZDJPY";
extern color Color.12=C'149,205,255';
extern string Symbol.13="AUDCAD";
extern color Color.13=Orange;
extern string Symbol.14="AUDCHF";
extern color Color.14=Orange;
extern string Symbol.15="AUDNZD";
extern color Color.15=Orange;
extern string Symbol.16="CADCHF";
extern color Color.16=SeaGreen;
extern string Symbol.17="EURAUD";
extern color Color.17=Maroon;
extern string Symbol.18="EURCAD";
extern color Color.18=Maroon;
extern string Symbol.19="EURCHF";
extern color Color.19=Maroon;
extern string Symbol.20="EURGBP";
extern color Color.20=Maroon;
extern string Symbol.21="EURNZD";
extern color Color.21=Maroon;
extern string Symbol.22="GBPAUD";
extern color Color.22=MediumSpringGreen;
extern string Symbol.23="GBPCAD";
extern color Color.23=MediumSpringGreen;
extern string Symbol.24="GBPCHF";
extern color Color.24=MediumSpringGreen;
extern string Symbol.25="GBPNZD";
extern color Color.25=MediumSpringGreen;
extern string Symbol.26="NZDCAD";
extern color Color.26=Violet;
extern string Symbol.27="NZDCHF";
extern color Color.27=Violet;
extern string Symbol.28="USDDKK";
extern color Color.28=BlueViolet;
extern string Symbol.29="USDNOK";
extern color Color.29=BlueViolet;
extern string Symbol.30="USDSEK";
extern color Color.30=BlueViolet;
extern string Symbol.31="USDSGD";
extern color Color.31=BlueViolet;
extern string Symbol.32="USDZAR";
extern color Color.32=BlueViolet;
extern string Symbol.33="XAUUSD";
extern color Color.33=Aqua;
extern string Symbol.34="XAGUSD";
extern color Color.34=Aqua;
extern string Symbol.35="AUDLFX";
extern color Color.35=C'0,176,0';
extern string Symbol.36="CADLFX";
extern color Color.36=C'0,176,0';
extern string Symbol.37="CHFLFX";
extern color Color.37=C'0,176,0';
extern string Symbol.38="EURLFX";
extern color Color.38=C'0,176,0';
extern string Symbol.39="GBPLFX";
extern color Color.39=C'0,176,0';
extern string Symbol.40="LFXJPY";
extern color Color.40=C'0,176,0';
extern string Symbol.41="NZDLFX";
extern color Color.41=C'0,176,0';
//----
int Bar;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
ObjectCreate("����"+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet("����"+IndicatorNumber,OBJPROP_XDISTANCE,X+16*font_size);
ObjectSet("����"+IndicatorNumber,OBJPROP_YDISTANCE,Y);
ObjectSetText("����"+IndicatorNumber,"����",font_size-3,"Verdana",NavajoWhite);
ObjectSet("����"+IndicatorNumber,OBJPROP_CORNER,1);
ObjectCreate("������"+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet("������"+IndicatorNumber,OBJPROP_XDISTANCE,X+11.5*font_size);
ObjectSet("������"+IndicatorNumber,OBJPROP_YDISTANCE,Y+0.1*font_size);
ObjectSetText("������"+IndicatorNumber,"������",font_size-3,"�����",NavajoWhite);
ObjectSet("������"+IndicatorNumber,OBJPROP_CORNER,1);
ObjectCreate("���/���"+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet("���/���"+IndicatorNumber,OBJPROP_XDISTANCE,X+6.5*font_size);
ObjectSet("���/���"+IndicatorNumber,OBJPROP_YDISTANCE,Y);
ObjectSetText("���/���"+IndicatorNumber,"���/���",font_size-3,"Verdana",NavajoWhite);
ObjectSet("���/���"+IndicatorNumber,OBJPROP_CORNER,1);
Y=Y+1.5*font_size;
//----
CreateObject(Symbol.1,Y,Color.1);Y=Y+1.5*font_size;
CreateObject(Symbol.2,Y,Color.2);Y=Y+1.5*font_size;
CreateObject(Symbol.3,Y,Color.3);Y=Y+1.5*font_size;
CreateObject(Symbol.4,Y,Color.4);Y=Y+1.5*font_size;
CreateObject(Symbol.5,Y,Color.5);Y=Y+1.5*font_size;
CreateObject(Symbol.6,Y,Color.6);Y=Y+2*font_size;
CreateObject(Symbol.7,Y,Color.7);Y=Y+1.5*font_size;
CreateObject(Symbol.8,Y,Color.8);Y=Y+1.5*font_size;
CreateObject(Symbol.9,Y,Color.9);Y=Y+1.5*font_size;
CreateObject(Symbol.10,Y,Color.10);Y=Y+1.5*font_size;
CreateObject(Symbol.11,Y,Color.11);Y=Y+1.5*font_size;
CreateObject(Symbol.12,Y,Color.12);Y=Y+2*font_size;
CreateObject(Symbol.13,Y,Color.13);Y=Y+1.5*font_size;
CreateObject(Symbol.14,Y,Color.14);Y=Y+1.5*font_size;
CreateObject(Symbol.15,Y,Color.15);Y=Y+2*font_size;
CreateObject(Symbol.16,Y,Color.16);Y=Y+2*font_size;
CreateObject(Symbol.17,Y,Color.17);Y=Y+1.5*font_size;
CreateObject(Symbol.18,Y,Color.18);Y=Y+1.5*font_size;
CreateObject(Symbol.19,Y,Color.19);Y=Y+1.5*font_size;
CreateObject(Symbol.20,Y,Color.20);Y=Y+1.5*font_size;
CreateObject(Symbol.21,Y,Color.21);Y=Y+2*font_size;
CreateObject(Symbol.22,Y,Color.22);Y=Y+1.5*font_size;
CreateObject(Symbol.23,Y,Color.23);Y=Y+1.5*font_size;
CreateObject(Symbol.24,Y,Color.24);Y=Y+1.5*font_size;
CreateObject(Symbol.25,Y,Color.25);Y=Y+2*font_size;
CreateObject(Symbol.26,Y,Color.26);Y=Y+1.5*font_size;
CreateObject(Symbol.27,Y,Color.27);Y=Y+2*font_size;
CreateObject(Symbol.28,Y,Color.28);Y=Y+1.5*font_size;
CreateObject(Symbol.29,Y,Color.29);Y=Y+1.5*font_size;
CreateObject(Symbol.30,Y,Color.30);Y=Y+1.5*font_size;
CreateObject(Symbol.31,Y,Color.31);Y=Y+1.5*font_size;
CreateObject(Symbol.32,Y,Color.32);Y=Y+2*font_size;
CreateObject(Symbol.33,Y,Color.33);Y=Y+1.5*font_size;
CreateObject(Symbol.34,Y,Color.34);Y=Y+2*font_size;
CreateObject(Symbol.35,Y,Color.35);Y=Y+1.5*font_size;
CreateObject(Symbol.36,Y,Color.36);Y=Y+1.5*font_size;
CreateObject(Symbol.37,Y,Color.37);Y=Y+1.5*font_size;
CreateObject(Symbol.38,Y,Color.38);Y=Y+1.5*font_size;
CreateObject(Symbol.39,Y,Color.39);Y=Y+1.5*font_size;
CreateObject(Symbol.40,Y,Color.40);Y=Y+1.5*font_size;
CreateObject(Symbol.41,Y,Color.41);Y=Y+2*font_size;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("����"+IndicatorNumber);
ObjectDelete("������"+IndicatorNumber);
ObjectDelete("���/���"+IndicatorNumber);
DeleteObject(Symbol.1);
DeleteObject(Symbol.2);
DeleteObject(Symbol.3);
DeleteObject(Symbol.4);
DeleteObject(Symbol.5);
DeleteObject(Symbol.6);
DeleteObject(Symbol.7);
DeleteObject(Symbol.8);
DeleteObject(Symbol.9);
DeleteObject(Symbol.10);
DeleteObject(Symbol.11);
DeleteObject(Symbol.12);
DeleteObject(Symbol.13);
DeleteObject(Symbol.14);
DeleteObject(Symbol.15);
DeleteObject(Symbol.16);
DeleteObject(Symbol.17);
DeleteObject(Symbol.18);
DeleteObject(Symbol.19);
DeleteObject(Symbol.20);
DeleteObject(Symbol.21);
DeleteObject(Symbol.22);
DeleteObject(Symbol.23);
DeleteObject(Symbol.24);
DeleteObject(Symbol.25);
DeleteObject(Symbol.26);
DeleteObject(Symbol.27);
DeleteObject(Symbol.28);
DeleteObject(Symbol.29);
DeleteObject(Symbol.30);
DeleteObject(Symbol.31);
DeleteObject(Symbol.32);
DeleteObject(Symbol.33);
DeleteObject(Symbol.34);
DeleteObject(Symbol.35);
DeleteObject(Symbol.36);
DeleteObject(Symbol.37);
DeleteObject(Symbol.38);
DeleteObject(Symbol.39);
DeleteObject(Symbol.40);
DeleteObject(Symbol.41);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
if(Bar<iBars(Symbol(),timeframe))
{
Bar=iBars(Symbol(),timeframe);
Alert("Multi_Signal ����� ���!");
}
if(Symbol.1!="")Signal(Symbol.1);
if(Symbol.2!="")Signal(Symbol.2);
if(Symbol.3!="")Signal(Symbol.3);
if(Symbol.4!="")Signal(Symbol.4);
if(Symbol.5!="")Signal(Symbol.5);
if(Symbol.6!="")Signal(Symbol.6);
if(Symbol.7!="")Signal(Symbol.7);
if(Symbol.8!="")Signal(Symbol.8);
if(Symbol.9!="")Signal(Symbol.9);
if(Symbol.10!="")Signal(Symbol.10);
if(Symbol.11!="")Signal(Symbol.11);
if(Symbol.12!="")Signal(Symbol.12);
if(Symbol.13!="")Signal(Symbol.13);
if(Symbol.14!="")Signal(Symbol.14);
if(Symbol.15!="")Signal(Symbol.15);
if(Symbol.16!="")Signal(Symbol.16);
if(Symbol.17!="")Signal(Symbol.17);
if(Symbol.18!="")Signal(Symbol.18);
if(Symbol.19!="")Signal(Symbol.19);
if(Symbol.20!="")Signal(Symbol.20);
if(Symbol.21!="")Signal(Symbol.21);
if(Symbol.22!="")Signal(Symbol.22);
if(Symbol.23!="")Signal(Symbol.23);
if(Symbol.24!="")Signal(Symbol.24);
if(Symbol.25!="")Signal(Symbol.25);
if(Symbol.26!="")Signal(Symbol.26);
if(Symbol.27!="")Signal(Symbol.27);
if(Symbol.28!="")Signal(Symbol.28);
if(Symbol.29!="")Signal(Symbol.29);
if(Symbol.30!="")Signal(Symbol.30);
if(Symbol.31!="")Signal(Symbol.31);
if(Symbol.32!="")Signal(Symbol.32);
if(Symbol.33!="")Signal(Symbol.33);
if(Symbol.34!="")Signal(Symbol.34);
if(Symbol.35!="")Signal(Symbol.35);
if(Symbol.36!="")Signal(Symbol.36);
if(Symbol.37!="")Signal(Symbol.37);
if(Symbol.38!="")Signal(Symbol.38);
if(Symbol.39!="")Signal(Symbol.39);
if(Symbol.40!="")Signal(Symbol.40);
if(Symbol.41!="")Signal(Symbol.41);
//----
return(0);
}
//+------------------------------------------------------------------+
void CreateObject(string symbol,int y,color Color)
{
ObjectCreate(symbol+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet(symbol+IndicatorNumber,OBJPROP_XDISTANCE,X+15*font_size);
ObjectSet(symbol+IndicatorNumber,OBJPROP_YDISTANCE,y);
ObjectSetText(symbol+IndicatorNumber,symbol,font_size,"Verdana",Color);
ObjectSet(symbol+IndicatorNumber,OBJPROP_CORNER,1);
ObjectCreate(symbol+"Signal"+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet(symbol+"Signal"+IndicatorNumber,OBJPROP_XDISTANCE,X+12*font_size);
ObjectSet(symbol+"Signal"+IndicatorNumber,OBJPROP_YDISTANCE,y+0.1*font_size);
ObjectSet(symbol+"Signal"+IndicatorNumber,OBJPROP_CORNER,1);
ObjectCreate(symbol+"lot/type"+IndicatorNumber,OBJ_LABEL,window,0,0,0,0,0,0);
ObjectSet(symbol+"lot/type"+IndicatorNumber,OBJPROP_XDISTANCE,X+7.5*font_size);
ObjectSet(symbol+"lot/type"+IndicatorNumber,OBJPROP_YDISTANCE,y);
ObjectSet(symbol+"lot/type"+IndicatorNumber,OBJPROP_CORNER,1);
}
//+------------------------------------------------------------------+
void DeleteObject(string symbol)
{
ObjectDelete(symbol+IndicatorNumber);
ObjectDelete(symbol+"Signal"+IndicatorNumber);
ObjectDelete(symbol+"lot/type"+IndicatorNumber);
}
//+------------------------------------------------------------------+
int Signal(string symbol)
{
//----�������� �� �������� �� �����������
if(MarketInfo(symbol,MODE_TRADEALLOWED)==false)
{
Alert("������ �� ",symbol," � ��� ���� � MarketInfo");return(0);
}
//----
int i=0;
while(i<ReminderBar)
{
ObjectSetText(symbol+"Signal"+IndicatorNumber,"",font_size+1,"�����",CLR_NONE);
double MA_Cl.0=iMA(symbol,timeframe,MA_Cl.period,0,MODE_SMMA,PRICE_CLOSE,i);
double MA_Cl.1=iMA(symbol,timeframe,MA_Cl.period,0,MODE_SMMA,PRICE_CLOSE,i+1);
double MA_Cl.2=iMA(symbol,timeframe,MA_Cl.period,0,MODE_SMMA,PRICE_CLOSE,i+2);
double MA_Op.0=iMA(symbol,timeframe,MA_Op.period,0,MODE_SMMA,PRICE_OPEN,i);
double MA_Op.1=iMA(symbol,timeframe,MA_Op.period,0,MODE_SMMA,PRICE_OPEN,i+1);
double MA_Op.2=iMA(symbol,timeframe,MA_Op.period,0,MODE_SMMA,PRICE_OPEN,i+2);
double HMA.Slow=iCustom(symbol,timeframe,"Index_HMA",HMA_Slow.period,0,i);
double ASK=MarketInfo(symbol,MODE_ASK);
double BID=MarketInfo(symbol,MODE_BID);
double HMA.Quick.1=iCustom(symbol,timeframe,"Index_HMA",HMA_Quick.period,0,i);
double HMA.Quick.2=iCustom(symbol,timeframe,"Index_HMA",HMA_Quick.period,0,i+1);
double H_A.Purple=iCustom(symbol,timeframe,"Index_HeikenAshi",HMA_Quick.period,2,i);
double H_A.Green=iCustom(symbol,timeframe,"Index_HeikenAshi",HMA_Quick.period,3,i);
//�������� �� ���� ������
if(MA_Cl.0==0.0 || MA_Cl.1==0.0 || MA_Cl.2==0.0 || MA_Op.0==0.0 || MA_Op.1==0.0 || MA_Op.2==0.0 || HMA.Slow==0.0 ||
ASK==0.0 || BID==0.0 || HMA.Quick.1==0.0 || HMA.Quick.2==0.0 || H_A.Purple==0.0 || H_A.Green==0.0)
{
Alert("�� ����������� ",symbol," ���� � ������ ����!!!");
}
if(BID>HMA.Slow)
{
if(MA_Cl.2<MA_Op.2 && MA_Cl.1>MA_Op.1 && MA_Cl.0>MA_Op.0 && H_A.Green>H_A.Purple && HMA.Quick.1>HMA.Quick.2)
{
ObjectSetText(symbol+"Signal"+IndicatorNumber,"/\ ",font_size+1,"�����",Lime);
i=ReminderBar;
}
}
else if(ASK<HMA.Slow)
{
if(MA_Cl.2>MA_Op.2 && MA_Cl.1<MA_Op.1 && MA_Cl.0<MA_Op.0 && H_A.Purple>H_A.Green && HMA.Quick.1<HMA.Quick.2)
{
ObjectSetText(symbol+"Signal"+IndicatorNumber,"\/ ",font_size+1,"�����",OrangeRed);
i=ReminderBar;
}
}
i++;
}
//----
double lots=0,profit=0;int type;
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==symbol)
{
lots+=OrderLots();
type=OrderType();
}
}
else Print("������ ",GetLastError());
}
if(lots>0)
{
//----
if(type==OP_BUY){ObjectSetText(symbol+"lot/type"+IndicatorNumber,DoubleToStr(lots,2),font_size,"Verdana",Lime);}
else if(type==OP_SELL){ObjectSetText(symbol+"lot/type"+IndicatorNumber,DoubleToStr(lots,2),font_size,"Verdana",OrangeRed);}
//----
}
else
{
ObjectSetText(symbol+"lot/type"+IndicatorNumber,"",font_size,"Verdana",CLR_NONE);
ObjectSetText(symbol+"Profit"+IndicatorNumber,"",font_size,"Verdana",CLR_NONE);
}
//----
}
//+------------------------------------------------------------------+