//+------------------------------------------------------------------+ //| Multi_Exchange.mq4 | //| Sanyooooook | //| sanyooooook@mail.ru | //+------------------------------------------------------------------+ #property copyright "Sanyooooook" #property link "sanyooooook@mail.ru" //---- input parameters extern int V_Period=3600; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double Time_Buffer[1000000,2]; ArrayInitialize(Time_Buffer,0.0); Time_Buffer[0,0]=GetTickCount(); Time_Buffer[0,1]=MarketInfo("EURUSD",MODE_BID); double Time_Buffer1[1000000,2]; ArrayInitialize(Time_Buffer1,0.0); Time_Buffer1[0,0]=GetTickCount(); Time_Buffer1[0,1]=MarketInfo("EURCAD",MODE_BID); double Time_Buffer2[1000000,2]; ArrayInitialize(Time_Buffer2,0.0); Time_Buffer2[0,0]=GetTickCount(); Time_Buffer2[0,1]=MarketInfo("EURJPY",MODE_BID); double Time_Buffer3[1000000,2]; ArrayInitialize(Time_Buffer3,0.0); Time_Buffer3[0,0]=GetTickCount(); Time_Buffer3[0,1]=MarketInfo("EURCHF",MODE_BID); double Price=MarketInfo("EURUSD",MODE_BID); int i=1; int Max_Count=0; double H; double Price1=MarketInfo("EURCAD",MODE_BID); int i1=1; int Max_Count1=0; double H1; double Price2=MarketInfo("EURJPY",MODE_BID); int i2=1; int Max_Count2=0; double H2; double Price3=MarketInfo("EURCHF",MODE_BID); int i3=1; int Max_Count3=0; double H3; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ double _Time_Buffer[1000000,2]; ArrayInitialize(_Time_Buffer,0.0); _Time_Buffer[0,0]=GetTickCount(); _Time_Buffer[0,1]=MarketInfo("GBPUSD",MODE_BID); double _Time_Buffer1[1000000,2]; ArrayInitialize(_Time_Buffer1,0.0); _Time_Buffer1[0,0]=GetTickCount(); _Time_Buffer1[0,1]=MarketInfo("USDCAD",MODE_BID); double _Time_Buffer2[1000000,2]; ArrayInitialize(_Time_Buffer2,0.0); _Time_Buffer2[0,0]=GetTickCount(); _Time_Buffer2[0,1]=MarketInfo("USDJPY",MODE_BID); double _Time_Buffer3[1000000,2]; ArrayInitialize(_Time_Buffer3,0.0); _Time_Buffer3[0,0]=GetTickCount(); _Time_Buffer3[0,1]=MarketInfo("USDCHF",MODE_BID); double _Price=MarketInfo("GBPUSD",MODE_BID); int _i=1; int _Max_Count=0; double _H; double _Price1=MarketInfo("USDCAD",MODE_BID); int _i1=1; int _Max_Count1=0; double _H1; double _Price2=MarketInfo("USDJPY",MODE_BID); int _i2=1; int _Max_Count2=0; double _H2; double _Price3=MarketInfo("USDCHF",MODE_BID); int _i3=1; int _Max_Count3=0; double _H3; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ string com; //++++++++++++++++++++++++++++++++++++++++++++++++ while(!IsStopped()) { datetime ZeroX=Time[0]+60*Period()*(WindowBarsPerChart()-WindowFirstVisibleBar()-1); /*if(WindowBarsPerChart()==WindowFirstVisibleBar())Comment(" 1 "); if(WindowBarsPerChart()>WindowFirstVisibleBar())Comment(WindowBarsPerChart()-WindowFirstVisibleBar()); if(WindowBarsPerChart()=0) { Count++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/H=Time_Buffer[i,1]-Time_Buffer[e+1,1]; //if(Time_Buffer[i,1]V_Period) { e=-1; continue; } e--; } i++; } if(Price1!=MarketInfo("EURCAD",MODE_BID)) { Price1=MarketInfo("EURCAD",MODE_BID); Time_Buffer1[i1,0]=GetTickCount(); Time_Buffer1[i1,1]=MarketInfo("EURCAD",MODE_BID); int e1=i1; int Count1=0; while(e1>=0) { Count1++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/H1=Time_Buffer1[i1,1]-Time_Buffer1[e1+1,1]; //if(Time_Buffer[i,1]V_Period) { e1=-1; continue; } e1--; } i1++; } if(Price2!=MarketInfo("EURJPY",MODE_BID)) { Price2=MarketInfo("EURJPY",MODE_BID); Time_Buffer2[i2,0]=GetTickCount(); Time_Buffer2[i2,1]=MarketInfo("EURJPY",MODE_BID); int e2=i2; int Count2=0; while(e2>=0) { Count2++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/H2=(Time_Buffer2[i2,1]-Time_Buffer2[e2+1,1])/100; //if(Time_Buffer[i,1]V_Period) { e2=-1; continue; } e2--; } i2++; } if(Price3!=MarketInfo("EURCHF",MODE_BID)) { Price3=MarketInfo("EURCHF",MODE_BID); Time_Buffer3[i3,0]=GetTickCount(); Time_Buffer3[i3,1]=MarketInfo("EURCHF",MODE_BID); int e3=i3; int Count3=0; while(e3>=0) { Count3++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/H3=Time_Buffer3[i3,1]-Time_Buffer3[e3+1,1]; //if(Time_Buffer[i,1]V_Period) { e3=-1; continue; } e3--; } i3++; } //+++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++ if(_Price!=MarketInfo("GBPUSD",MODE_BID)) { _Price=MarketInfo("GBPUSD",MODE_BID); _Time_Buffer[_i,0]=GetTickCount(); _Time_Buffer[_i,1]=MarketInfo("GBPUSD",MODE_BID); int _e=_i; int _Count=0; while(_e>=0) { _Count++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/ if(_Time_Buffer[_i,1]!=0&&_Time_Buffer[_e+1,1]!=0)_H=(1/_Time_Buffer[_i,1])-(1/_Time_Buffer[_e+1,1]); //if(Time_Buffer[i,1]V_Period) { _e=-1; continue; } _e--; } _i++; } if(_Price1!=MarketInfo("USDCAD",MODE_BID)) { _Price1=MarketInfo("USDCAD",MODE_BID); _Time_Buffer1[_i1,0]=GetTickCount(); _Time_Buffer1[_i1,1]=MarketInfo("USDCAD",MODE_BID); int _e1=_i1; int _Count1=0; while(_e1>=0) { _Count1++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/_H1=_Time_Buffer1[_i1,1]-_Time_Buffer1[_e1+1,1]; //if(Time_Buffer[i,1]V_Period) { _e1=-1; continue; } _e1--; } _i1++; } if(_Price2!=MarketInfo("USDJPY",MODE_BID)) { _Price2=MarketInfo("USDJPY",MODE_BID); _Time_Buffer2[_i2,0]=GetTickCount(); _Time_Buffer2[_i2,1]=MarketInfo("USDJPY",MODE_BID); int _e2=_i2; int _Count2=0; while(_e2>=0) { _Count2++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/_H2=(_Time_Buffer2[_i2,1]-_Time_Buffer2[_e2+1,1])/100; //if(Time_Buffer[i,1]V_Period) { _e2=-1; continue; } _e2--; } _i2++; } if(_Price3!=MarketInfo("USDCHF",MODE_BID)) { _Price3=MarketInfo("USDCHF",MODE_BID); _Time_Buffer3[_i3,0]=GetTickCount(); _Time_Buffer3[_i3,1]=MarketInfo("USDCHF",MODE_BID); int _e3=_i3; int _Count3=0; while(_e3>=0) { _Count3++; /*if(Time_Buffer[i,1]>=Time_Buffer[e+1,1])*/_H3=_Time_Buffer3[_i3,1]-_Time_Buffer3[_e3+1,1]; //if(Time_Buffer[i,1]V_Period) { _e3=-1; continue; } _e3--; } _i3++; } //+++++++++++++++++++++++++++++++++++++++++++++++ datetime X1Time=ZeroX-60*Period()*10; double Y2Price=ZeroY+H; color ColorLine=Blue; if(H<0)ColorLine=Red; ObjectCreateTrend("EURUSD",OBJ_TREND,0,X1Time,ZeroY,X1Time,Y2Price,ColorLine); datetime X1Time1=ZeroX-60*Period()*20; double Y2Price1=ZeroY+H1; color ColorLine1=Blue; if(H1<0)ColorLine1=Red; ObjectCreateTrend("EURCAD",OBJ_TREND,0,X1Time1,ZeroY,X1Time1,Y2Price1,ColorLine1); datetime X1Time2=ZeroX-60*Period()*30; double Y2Price2=ZeroY+H2; color ColorLine2=Blue; if(H2<0)ColorLine2=Red; ObjectCreateTrend("EURJPY",OBJ_TREND,0,X1Time2,ZeroY,X1Time2,Y2Price2,ColorLine2); datetime X1Time3=ZeroX-60*Period()*40; double Y2Price3=ZeroY+H3; color ColorLine3=Blue; if(H3<0)ColorLine3=Red; ObjectCreateTrend("EURCHF",OBJ_TREND,0,X1Time3,ZeroY,X1Time3,Y2Price3,ColorLine3); X1Time3=ZeroX-60*Period()*50; Y2Price3=ZeroY+(H3+H2+H1+H)/4; ColorLine3=Blue; if((H3+H2+H1+H)/4<0)ColorLine3=Red; ObjectCreateTrend("EUR",OBJ_TREND,0,X1Time3,ZeroY,X1Time3,Y2Price3,ColorLine3); //++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++ datetime _X1Time=ZeroX-60*Period()*10; double _Y2Price=_ZeroY+_H; color _ColorLine=Blue; if(_H<0)_ColorLine=Red; ObjectCreateTrend("GBPUSD",OBJ_TREND,0,_X1Time,_ZeroY,_X1Time,_Y2Price,_ColorLine); datetime _X1Time1=ZeroX-60*Period()*20; double _Y2Price1=_ZeroY+_H1; color _ColorLine1=Blue; if(_H1<0)_ColorLine1=Red; ObjectCreateTrend("USDCAD",OBJ_TREND,0,_X1Time1,_ZeroY,_X1Time1,_Y2Price1,_ColorLine1); datetime _X1Time2=ZeroX-60*Period()*30; double _Y2Price2=_ZeroY+_H2; color _ColorLine2=Blue; if(_H2<0)_ColorLine2=Red; ObjectCreateTrend("USDJPY",OBJ_TREND,0,_X1Time2,_ZeroY,_X1Time2,_Y2Price2,_ColorLine2); datetime _X1Time3=ZeroX-60*Period()*40; double _Y2Price3=_ZeroY+_H3; color _ColorLine3=Blue; if(_H3<0)_ColorLine3=Red; ObjectCreateTrend("USDCHF",OBJ_TREND,0,_X1Time3,_ZeroY,_X1Time3,_Y2Price3,_ColorLine3); _X1Time3=ZeroX-60*Period()*50; _Y2Price3=_ZeroY+(_H3+_H2+_H1+_H)/4; _ColorLine3=Blue; if((_H3+_H2+_H1+_H)/4<0)_ColorLine3=Red; ObjectCreateTrend("USD",OBJ_TREND,0,_X1Time3,_ZeroY,_X1Time3,_Y2Price3,_ColorLine3); //++++++++++++++++++++++++++++++++++++++++++++++++ WindowRedraw(); Sleep(100); } return(0); } //+--- //---------------------------------------------------------------+ double fn() { int Time_Buffer[100000]; ArrayInitialize(Time_Buffer,0.0); Time_Buffer[0]=GetTickCount(); double Price=Bid; int i=1; int Max_Count=0; while (!IsStopped()) { int Z=GetTickCount(); RefreshRates(); if(Price!=Bid) { Price=Bid; Time_Buffer[i]=GetTickCount(); int e=i; int Count=0; while(e>=0) { Count++; if((Time_Buffer[i]-Time_Buffer[e])/1000>V_Period) { if(Count>Max_Count)Max_Count=Count; Comment("Количество тиков за последние ",V_Period," c. :",Count,"\n", "Максимальное количествл тиков в ",V_Period," c. за весь период наблюдения: ",Max_Count); e=-1; continue; } e--; } i++; } Sleep(100); } } void ObjectCreateTrend(string iObjectName,int Type,int iWindow,int X1Time,double Y1Price,int X2Time,double Y2Price,color iColor) { if (ObjectFind(iObjectName)<0) { ObjectCreate(iObjectName,Type,iWindow,0,0); ObjectSet(iObjectName,OBJPROP_RAY,false); ObjectSet(iObjectName,OBJPROP_COLOR,iColor); ObjectSet(iObjectName,OBJPROP_WIDTH,4); //Alert(""); } if (X1Time!=0) ObjectSet(iObjectName,OBJPROP_TIME1,X1Time); ObjectSet(iObjectName,OBJPROP_PRICE1,Y1Price); if (X2Time!=0) ObjectSet(iObjectName,OBJPROP_TIME2,X2Time); if (Y2Price!=0) ObjectSet(iObjectName,OBJPROP_PRICE2,Y2Price); ObjectSet(iObjectName,OBJPROP_COLOR,iColor); }