TestCorr28E

Author: Copyright 2019, Vladradon
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
TestCorr28E
ÿþ//+------------------------------------------------------------------+

//|                                                   TestCorr28.mq4 |

//|                                        Copyright 2019, Vladradon |

//|                                                fxradon@gmail.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2019, Vladradon"

#property link      "fxradon@gmail.com"

#property version   "1.00"

#property indicator_chart_window

#property strict



input int BarsCount=300;

input int PairsShow=15;

input ENUM_TIMEFRAMES TFcount=PERIOD_CURRENT;

input ENUM_TIMEFRAMES TFRecount=PERIOD_D1;

input string WithCurrency="USD";

input string Prefix="";

input string Suffix="";

input color FonColor=C'25,25,25';

input color BorderColor=clrWhite;

input int XDist=10;

input int YDist=20;



double BaseOpen[],BaseHigh[],BaseLow[],BaseClose[];

double HedgeOpen[],HedgeHigh[],HedgeLow[],HedgeClose[];

string Pairs[];

double Corr[];

double tempcor=0.0;

string tempname="";

string Massiv_Pairs0[8]= {"JPY","CHF","CAD","USD","NZD","AUD","GBP","EUR"};

string Massiv_Pairs[28];

string Massiv_OpenPairs[378][2];

int Plus=0,Minus=0;

datetime Times=0;

string Magic="";

string Timeframe="";

//+------------------------------------------------------------------+

//| Initialization function                                          |

//+------------------------------------------------------------------+

int OnInit()

  {

//---

   ArrayResize(BaseOpen,BarsCount,0);

   ArrayResize(BaseHigh,BarsCount,0);

   ArrayResize(BaseLow,BarsCount,0);

   ArrayResize(BaseClose,BarsCount,0);

   ArrayResize(HedgeOpen,BarsCount,0);

   ArrayResize(HedgeHigh,BarsCount,0);

   ArrayResize(HedgeLow,BarsCount,0);

   ArrayResize(HedgeClose,BarsCount,0);

//---

   if(WithCurrency!="" && WithCurrency!="JPY"  && WithCurrency!="CHF"  && WithCurrency!="CAD"  && WithCurrency!="USD"  &&

      WithCurrency!="NZD" && WithCurrency!="AUD" && WithCurrency!="GBP" && WithCurrency!="EUR")

     {

      Alert("Error currency: ",WithCurrency);

      return(-1);

     }

   int ij=0,zp=0,i,j;

   for(i=1; i<=7; i++)

      for(j=0; j<i; j++)

        {

         Massiv_Pairs[ij]=Massiv_Pairs0[i]+Massiv_Pairs0[j];

         if(SymbolInfoDouble(Prefix+Massiv_Pairs[ij]+Suffix,SYMBOL_BID)<=0.0 || GetLastError()==4301)

            Massiv_Pairs[ij]=Massiv_Pairs0[j]+Massiv_Pairs0[i];

         if(SymbolInfoDouble(Prefix+Massiv_Pairs[ij]+Suffix,SYMBOL_BID)<=0.0 || GetLastError()==4301)

            Massiv_Pairs[ij]="";

         ij+=1;

        }

//---

   for(i=1; i<=27; i++)

      for(j=0; j<i; j++)

        {

         if(Massiv_Pairs[i]=="" || Massiv_Pairs[j]=="")

           {

            zp+=1;

            continue;

           }

         if(WithCurrency!="" && (StringFind(Massiv_Pairs[i],WithCurrency,0)<0 ||

                            StringFind(Massiv_Pairs[j],WithCurrency,0)<0))

           {

            Massiv_OpenPairs[zp][0]="";

            Massiv_OpenPairs[zp][1]="";

            zp+=1;

            continue;

           }

         Massiv_OpenPairs[zp][0]=Massiv_Pairs[i];

         Massiv_OpenPairs[zp][1]=Massiv_Pairs[j];

         zp+=1;

        }

//---

   Times=0;

   Magic=IntegerToString((int)TimeCurrent());

   Magic=StringSubstr(Magic,StringLen(Magic)-4,4);

   Timeframe=PeriodCount();

//---

   EventSetTimer(1);

//---

   for(i=0; i<ArraySize(Pairs); i++)

     {

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+Magic);

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic);

     }

   if(ObjectFind(0,"BG1"+Magic)>=0)

      ObjectDelete(0,"BG1"+Magic);

   if(ObjectFind(0,"Plus"+Magic)>=0)

      ObjectDelete(0,"Plus"+Magic);

   if(ObjectFind(0,"Minus"+Magic)>=0)

      ObjectDelete(0,"Minus"+Magic);

   if(ObjectFind(0,"Total"+Magic)>=0)

      ObjectDelete(0,"Total"+Magic);

   if(ObjectFind(0,"Time"+Magic)>=0)

      ObjectDelete(0,"Time"+Magic);

   ChartRedraw();

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   EventKillTimer();

   for(int i=0; i<ArraySize(Pairs); i++)

     {

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+Magic);

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic);

     }

   if(ObjectFind(0,"BG1"+Magic)>=0)

      ObjectDelete(0,"BG1"+Magic);

   if(ObjectFind(0,"Plus"+Magic)>=0)

      ObjectDelete(0,"Plus"+Magic);

   if(ObjectFind(0,"Minus"+Magic)>=0)

      ObjectDelete(0,"Minus"+Magic);

   if(ObjectFind(0,"Total"+Magic)>=0)

      ObjectDelete(0,"Total"+Magic);

   if(ObjectFind(0,"Time"+Magic)>=0)

      ObjectDelete(0,"Time"+Magic);

   ChartRedraw();

  }

//+------------------------------------------------------------------

int TimeCount()

  {

   switch(TFRecount)

     {

      case PERIOD_M1:

         return(60);

      case PERIOD_M2:

         return(120);

      case PERIOD_M3:

         return(180);

      case PERIOD_M4:

         return(240);

      case PERIOD_M5:

         return(300);

      case PERIOD_M6:

         return(360);

      case PERIOD_M10:

         return(600);

      case PERIOD_M12:

         return(720);

      case PERIOD_M15:

         return(900);

      case PERIOD_M20:

         return(1200);

      case PERIOD_M30:

         return(1800);

      case PERIOD_H1:

         return(3600);

      case PERIOD_H2:

         return(7200);

      case PERIOD_H3:

         return(10800);

      case PERIOD_H4:

         return(14400);

      case PERIOD_H6:

         return(21600);

      case PERIOD_H8:

         return(28800);

      case PERIOD_H12:

         return(43200);

      case PERIOD_D1:

         return(86400);

      case PERIOD_W1:

         return(604800);

      case PERIOD_MN1:

         return(2592000);

     }

   return(60);

  }

//+------------------------------------------------------------------

string PeriodCount()

  {

   switch(TFcount)

     {

      case PERIOD_M1:

         return("M1");

      case PERIOD_M2:

         return("M2");

      case PERIOD_M3:

         return("M3");

      case PERIOD_M4:

         return("M4");

      case PERIOD_M5:

         return("M5");

      case PERIOD_M6:

         return("M6");

      case PERIOD_M10:

         return("M10");

      case PERIOD_M12:

         return("M12");

      case PERIOD_M15:

         return("M15");

      case PERIOD_M20:

         return("M20");

      case PERIOD_M30:

         return("M30");

      case PERIOD_H1:

         return("H1");

      case PERIOD_H2:

         return("H2");

      case PERIOD_H3:

         return("H3");

      case PERIOD_H4:

         return("H4");

      case PERIOD_H6:

         return("H6");

      case PERIOD_H8:

         return("H8");

      case PERIOD_H12:

         return("H12");

      case PERIOD_D1:

         return("D1");

      case PERIOD_W1:

         return("W1");

      case PERIOD_MN1:

         return("MN1");

      case PERIOD_CURRENT:

         switch(_Period)

           {

            case PERIOD_M1:

               return("M1");

            case PERIOD_M2:

               return("M2");

            case PERIOD_M3:

               return("M3");

            case PERIOD_M4:

               return("M4");

            case PERIOD_M5:

               return("M5");

            case PERIOD_M6:

               return("M6");

            case PERIOD_M10:

               return("M10");

            case PERIOD_M12:

               return("M12");

            case PERIOD_M15:

               return("M15");

            case PERIOD_M20:

               return("M20");

            case PERIOD_M30:

               return("M30");

            case PERIOD_H1:

               return("H1");

            case PERIOD_H2:

               return("H2");

            case PERIOD_H3:

               return("H3");

            case PERIOD_H4:

               return("H4");

            case PERIOD_H6:

               return("H6");

            case PERIOD_H8:

               return("H8");

            case PERIOD_H12:

               return("H12");

            case PERIOD_D1:

               return("D1");

            case PERIOD_W1:

               return("W1");

            case PERIOD_MN1:

               return("MN1");

           }

     }

   return("CURRENT");

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTimer()

  {

   int days=(int)((Times-TimeCurrent())/86400);

   if(ObjectFind(0,"Time"+Magic)>=0)

      ObjectSetString(0,"Time"+Magic,OBJPROP_TEXT,"Recalculate after: "+

                      IntegerToString(days)+". "+TimeToString((Times-TimeCurrent())-days*86400,TIME_SECONDS));

  }

//+------------------------------------------------------------------+

//| 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[])

  {

//---

   if(ObjectFind(0,"Time"+Magic)<0 && (Plus>0 || Minus>0))

     {

      ObjectCreate(0,"Time"+Magic,OBJ_LABEL,0,0,0);

      ObjectSetString(0,"Time"+Magic,OBJPROP_FONT,"Arial Bold");

      ObjectSetInteger(0,"Time"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetInteger(0,"Time"+Magic,OBJPROP_XDISTANCE,XDist+200);

      ObjectSetInteger(0,"Time"+Magic,OBJPROP_YDISTANCE,YDist+35+MathMax(Plus,Minus)*15);

      ObjectSetInteger(0,"Time"+Magic,OBJPROP_COLOR,clrWhite);

      ObjectSetInteger(0,"Time"+Magic,OBJPROP_FONTSIZE,10);

     }



   if(Times>TimeCurrent())

      return(0);

   Times=TimeCurrent()+TimeCount();

   for(int i=0; i<ArraySize(Pairs); i++)

     {

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+Magic);

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic)>=0)

         ObjectDelete(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic);

     }

   if(ObjectFind(0,"Plus"+Magic)>=0)

      ObjectDelete(0,"Plus"+Magic);

   if(ObjectFind(0,"Minus"+Magic)>=0)

      ObjectDelete(0,"Minus"+Magic);

   if(ObjectFind(0,"Total"+Magic)>=0)

      ObjectDelete(0,"Total"+Magic);

   if(ObjectFind(0,"Time"+Magic)>=0)

      ObjectDelete(0,"Time"+Magic);

   ChartRedraw();



   ArrayResize(Pairs,0,0);

   ArrayResize(Corr,0,0);

   ArrayInitialize(Corr,0.0);



   int m=0;

   for(int p=0; p<378; p++)

     {

      if(Massiv_OpenPairs[p][0]=="" || Massiv_OpenPairs[p][1]=="")

         continue;

      ArrayResize(Pairs,ArraySize(Pairs)+1,0);

      Pairs[m]=Massiv_OpenPairs[p][0]+" & "+Massiv_OpenPairs[p][1];

      ArrayResize(Corr,ArraySize(Corr)+1,0);

      Corr[m]=Cor(Prefix+Massiv_OpenPairs[p][0]+Suffix,Prefix+Massiv_OpenPairs[p][1]+Suffix);

      m++;

     }

   for(int s1=0; s1<ArraySize(Corr); s1++)

      for(int s2=s1+1; s2<ArraySize(Corr); s2++)

        {

         if(Corr[s1]<Corr[s2])

           {

            tempcor=Corr[s1];

            Corr[s1]=Corr[s2];

            Corr[s2]=tempcor;

            tempname=Pairs[s1];

            Pairs[s1]=Pairs[s2];

            Pairs[s2]=tempname;//Print(Pairs[s1]);

           }

        }

   Print("Pairs ",ArraySize(Corr));

   if(ObjectFind(0,"BG1"+Magic)<0)

     {

      if(!ObjectCreate(0,"BG1"+Magic,OBJ_RECTANGLE_LABEL,0,0,0))

         Print(__FUNCTION__,": don't create BG1! Error code = ",GetLastError());

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_BORDER_TYPE,BORDER_FLAT);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_STYLE,STYLE_SOLID);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_WIDTH,1);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_BACK,false);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_SELECTABLE,false);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_SELECTED,false);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_HIDDEN,true);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_ZORDER,0);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_BGCOLOR,FonColor);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_COLOR,BorderColor);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_XSIZE,385);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_YSIZE,420);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_XDISTANCE,XDist);

      ObjectSetInteger(0,"BG1"+Magic,OBJPROP_YDISTANCE,YDist);

     }

   Plus=0;

   for(int i=0; i<MathMin(ArraySize(Corr),PairsShow); i++)

     {

      if(Corr[i]<0.0)

         break;

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+Magic)<0)

        {

         ObjectCreate(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJ_LABEL,0,0,0);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_TEXT,Pairs[i]);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_FONT,"Arial Bold");

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_XDISTANCE,XDist+5);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_YDISTANCE,YDist+25+i*15);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_COLOR,clrDodgerBlue);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_FONTSIZE,10);

        }

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic)<0)

        {

         ObjectCreate(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJ_LABEL,0,0,0);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_TEXT," =  "+DoubleToString(Corr[i],2));

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_FONT,"Arial Bold");

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_XDISTANCE,XDist+135);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_YDISTANCE,YDist+25+i*15);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_COLOR,clrDodgerBlue);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_FONTSIZE,10);

        }

      Plus++;

     }

   Minus=0;

   for(int i=ArraySize(Corr)-1; i>MathMax(ArraySize(Corr)-PairsShow-1,0); i--)

     {

      if(Corr[i]>=0.0)

         break;

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+Magic)<0)

        {

         ObjectCreate(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJ_LABEL,0,0,0);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_TEXT,Pairs[i]);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_FONT,"Arial Bold");

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_XDISTANCE,XDist+200);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_YDISTANCE,YDist+25+(ArraySize(Corr)-i-1)*15);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_COLOR,clrOrangeRed);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+Magic,OBJPROP_FONTSIZE,10);

        }

      if(ObjectFind(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic)<0)

        {

         ObjectCreate(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJ_LABEL,0,0,0);

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_TEXT," =  "+DoubleToString(Corr[i],2));

         ObjectSetString(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_FONT,"Arial Bold");

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_XDISTANCE,XDist+330);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_YDISTANCE,YDist+25+(ArraySize(Corr)-i-1)*15);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_COLOR,clrOrangeRed);

         ObjectSetInteger(0,Pairs[i]+DoubleToString(i,0)+"D"+Magic,OBJPROP_FONTSIZE,10);

        }

      Minus++;

     }

   ObjectSetInteger(0,"BG1"+Magic,OBJPROP_YSIZE,60+MathMax(Plus,Minus)*15);

   if(ObjectFind(0,"Plus"+Magic)<0)

     {

      ObjectCreate(0,"Plus"+Magic,OBJ_LABEL,0,0,0);

      ObjectSetString(0,"Plus"+Magic,OBJPROP_TEXT,"Pairs total:  "+DoubleToString(Plus,0)+"  |  Period "+Timeframe);

      ObjectSetString(0,"Plus"+Magic,OBJPROP_FONT,"Arial Bold");

      ObjectSetInteger(0,"Plus"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetInteger(0,"Plus"+Magic,OBJPROP_XDISTANCE,XDist+5);

      ObjectSetInteger(0,"Plus"+Magic,OBJPROP_YDISTANCE,YDist+5);

      ObjectSetInteger(0,"Plus"+Magic,OBJPROP_COLOR,clrWhite);

      ObjectSetInteger(0,"Plus"+Magic,OBJPROP_FONTSIZE,10);

     }

   if(ObjectFind(0,"Minus"+Magic)<0)

     {

      ObjectCreate(0,"Minus"+Magic,OBJ_LABEL,0,0,0);

      ObjectSetString(0,"Minus"+Magic,OBJPROP_TEXT,"Pairs total:  "+DoubleToString(Minus,0)+"  |  Period "+Timeframe);

      ObjectSetString(0,"Minus"+Magic,OBJPROP_FONT,"Arial Bold");

      ObjectSetInteger(0,"Minus"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetInteger(0,"Minus"+Magic,OBJPROP_XDISTANCE,XDist+200);

      ObjectSetInteger(0,"Minus"+Magic,OBJPROP_YDISTANCE,YDist+5);

      ObjectSetInteger(0,"Minus"+Magic,OBJPROP_COLOR,clrWhite);

      ObjectSetInteger(0,"Minus"+Magic,OBJPROP_FONTSIZE,10);

     }

   if(ObjectFind(0,"Total"+Magic)<0)

     {

      ObjectCreate(0,"Total"+Magic,OBJ_LABEL,0,0,0);

      if(WithCurrency!="")

         ObjectSetString(0,"Total"+Magic,OBJPROP_TEXT,"Total calculated:  "+DoubleToString(ArraySize(Corr),0)+"  with "+WithCurrency);

      else

         ObjectSetString(0,"Total"+Magic,OBJPROP_TEXT,"Total calculated:  "+DoubleToString(ArraySize(Corr),0));

      ObjectSetString(0,"Total"+Magic,OBJPROP_FONT,"Arial Bold");

      ObjectSetInteger(0,"Total"+Magic,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      ObjectSetInteger(0,"Total"+Magic,OBJPROP_XDISTANCE,XDist+5);

      ObjectSetInteger(0,"Total"+Magic,OBJPROP_YDISTANCE,YDist+35+MathMax(Plus,Minus)*15);

      ObjectSetInteger(0,"Total"+Magic,OBJPROP_COLOR,clrWhite);

      ObjectSetInteger(0,"Total"+Magic,OBJPROP_FONTSIZE,10);

     }

   return(rates_total);

  }

//+------------------------------------------------------------------+

//|Correlation                                                     |

//+------------------------------------------------------------------+

double AverageBase=0.0,AverageHedge=0.0;

//---

double symboldif(int symbol=0,int shift=0)

  {

   double res=0.0;

   if(symbol==1)

      res=(BaseOpen[shift]+BaseHigh[shift]+BaseLow[shift]+BaseClose[shift])/4-AverageBase;

   if(symbol==2)

      res=(HedgeOpen[shift]+HedgeHigh[shift]+HedgeLow[shift]+HedgeClose[shift])/4-AverageHedge;

   return (res);

  }

//+---

double Cor(string base,string hedge)

  {

   if(HistoryBuffers(base, hedge)==0)

      return(0);

   double u=0.0,l=0.0,s=0.0;

   for(int i=BarsCount-1; i>=0; i--)

     {

      u += symboldif(1, i)*symboldif(2, i);

      l += MathPow(symboldif(1, i),2);

      s += MathPow(symboldif(2, i),2);

     }

   if(l*s>0)

      return(u/MathSqrt(l*s));

   return(0);

  }

//+------------------------------------------------------------------+

//| Average

//+------------------------------------------------------------------+

int HistoryBuffers(string base,string hedge)

  {

   int BarsAll=BarsCount;

   AverageBase=0.0;

   AverageHedge=0.0;

   if(CopyOpen(base,TFcount,0,BarsCount,BaseOpen)>0)

      if(CopyHigh(base,TFcount,0,BarsCount,BaseHigh)>0)

         if(CopyLow(base,TFcount,0,BarsCount,BaseLow)>0)

            if(CopyClose(base,TFcount,0,BarsCount,BaseClose)>0)

               for(int i=BarsCount-1; i>=0; i--)

                 {

                  if(BaseOpen[i]<=0 || BaseHigh[i]<=0 || BaseLow[i]<=0 || BaseClose[i]<=0)

                    {

                     BarsAll=BarsAll-1;

                     continue;

                    }

                  AverageBase=AverageBase+(BaseOpen[i]+BaseHigh[i]+BaseLow[i]+BaseClose[i])/4;

                 }



   AverageBase=AverageBase/BarsAll;

   BarsAll=BarsCount;

   if(AverageBase==0)

      return(0);



   if(CopyOpen(hedge,TFcount,0,BarsCount,HedgeOpen)>0)

      if(CopyHigh(hedge,TFcount,0,BarsCount,HedgeHigh)>0)

         if(CopyLow(hedge,TFcount,0,BarsCount,HedgeLow)>0)

            if(CopyClose(hedge,TFcount,0,BarsCount,HedgeClose)>0)

               for(int j=BarsCount-1; j>=0; j--)

                 {

                  if(HedgeOpen[j]<=0 || HedgeHigh[j]<=0 || HedgeLow[j]<=0 || HedgeClose[j]<=0)

                    {

                     BarsAll=BarsAll-1;

                     continue;

                    }

                  AverageHedge=AverageHedge+(HedgeOpen[j]+HedgeHigh[j]+HedgeLow[j]+HedgeClose[j])/4;

                 }



   AverageHedge=AverageHedge/BarsAll;

   if(AverageHedge==0)

      return(0);

   return (1);

  }

//+------------------------------------------------------------------+

Comments