Corelation_table_base

Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains close prices for each bar
Miscellaneous
It opens Message Boxes to the userIt issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Corelation_table_base
ÿþ#property strict

#property indicator_chart_window



extern bool MayStart=true;         //Without table of settings?

 bool MarketWatch=true;  //Only shown in MarketWatch

extern ENUM_TIMEFRAMES TF1=PERIOD_D1;//TimeFrame

extern int  cPeriod1=300;           //Period



extern bool   Once=true;           //Act once per bar

extern double Enought=0.8;         //Sufficent correlation

extern double NoCorr=0.1;          //No correlation level



extern bool   MAX_MIN=true;//Show min/max group



extern color  CL_Symb=clrWhite ;    //Caption's color

extern color  CL_Pos=clrYellow ;    //Sufficent positive correlation color

extern color  CL_Neg=clrSkyBlue ;   //Sufficent negative correlation color

extern color  CL_NoC=clrRed;        //Low correlation color

extern color  CL=clrGray ;          //All the rest color 



extern int    FS=8;                 //Font size

extern double V_Step=1.8; //Vertical step

extern double H_Step=7;   //Horisontal step

extern bool   CutSuffix=true;       //Cut Suffix

extern string Symbols_ignore="";  //Symbols to ignore

extern string cap74="AUDUSD;CAD;DAX30";//``Format of Symbols lists





string CurrencyPair1, CurrencyPair2;

string Buy_Sell ="";



double CorArr1[][1000];



int Symb_Total=SymbolsTotal(MarketWatch);



ushort SeparatorCode=StringGetCharacter(";",0);

string Symb_ignore_ARR[];

int    Symb_ignore_list;



string SymbolNames[];



datetime LastTime=0;



void OnInit()

{

 

 LastTime=0;

 

 Symb_ignore_list=StringSplit(Symbols_ignore,SeparatorCode,Symb_ignore_ARR);

 

 ArrayResize(SymbolNames,SymbolsTotal(MarketWatch));

 Symb_Total=0;

 

 for(int i=0;i<SymbolsTotal(MarketWatch);i++)

  {

   string name=SymbolName(i,MarketWatch);

   if(Ignore_Symbol(name)) {Print(name," ignored");continue;}

   SymbolNames[Symb_Total]=name;

   Symb_Total++;

  }



 TF1=TF1==0?(ENUM_TIMEFRAMES)_Period:TF1;



 ArrayResize     (CorArr1 ,Symb_Total+2);

 ArraySetAsSeries(CorArr1 ,true);

 



 

 ChartSetInteger(0,CHART_FOREGROUND,false);

 ChartSetInteger(0,CHART_MODE,CHART_LINE);

 ChartSetInteger(0,CHART_SHOW_ASK_LINE,false);

 ChartSetInteger(0,CHART_SHOW_BID_LINE,false);

 ChartSetInteger(0,CHART_SHOW_GRID,false);

 ChartSetInteger(0,CHART_SHOW_PERIOD_SEP,false);

 ChartSetInteger(0,CHART_SHOW_DATE_SCALE,false);

 ChartSetInteger(0,CHART_SHOW_OHLC,false);

 ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,false);

 ChartSetInteger(0,CHART_SHOW_VOLUMES,false);

 ChartSetInteger(0,CHART_COLOR_CHART_LINE,clrNONE);

 

 if(!MayStart)

 {

   if(ObjectFind(0,obj_pref+"BT2")==-1)

   {

   ObjectCreate(ChartID(),obj_pref+"BT1",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_XDISTANCE,10); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_YDISTANCE,(FS+10)*8);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_XSIZE,(FS+10)*30+10);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_YSIZE,(FS+10)*2);

   ObjectSetString(ChartID(),obj_pref+"BT1",OBJPROP_TEXT,"Open Charts (need to synchronize data)");//--- CAB0=>28< B5:AB

   ObjectSetString(ChartID(),obj_pref+"BT1",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_FONTSIZE,FS+10);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_COLOR,clrBlack);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BGCOLOR,CL_Symb);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BORDER_COLOR,clrDarkGray);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BACK,False);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   }



   if(ObjectFind(0,obj_pref+"BT2")==-1)

   {

   ObjectCreate(ChartID(),obj_pref+"BT2",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_XDISTANCE,10); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_YDISTANCE,(FS+10)*16);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_XSIZE,(FS+10)*30+10);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_YSIZE,(FS+10)*2);

   ObjectSetString(ChartID(),obj_pref+"BT2",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_FONTSIZE,FS+10);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_COLOR,clrBlack);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BORDER_COLOR,clrDarkGray);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BACK,False);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   ObjectSetString(ChartID(),obj_pref+"BT2",OBJPROP_TEXT,"Hide symbols that can't trade");//--- CAB0=>28< B5:AB   

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BGCOLOR,CL_Symb);

   }

   

   if(ObjectFind(0,obj_pref+"BT3")==-1)

   {

   ObjectCreate(ChartID(),obj_pref+"BT3",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_XDISTANCE,10); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_YDISTANCE,(FS+10)*12);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_XSIZE,(FS+10)*30+10);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_YSIZE,(FS+10)*2);

   ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_FONTSIZE,FS+10);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_COLOR,clrBlack);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BORDER_COLOR,clrDarkGray);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BACK,False);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_TEXT,"Hide symbols with a high spread");//--- CAB0=>28< B5:AB   

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BGCOLOR,CL_Symb);

   }

   

   ObjectCreate(ChartID(),obj_pref+"Spread",OBJ_EDIT,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_XDISTANCE,(FS+10)*31+10); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_YDISTANCE,(FS+10)*12);

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_XSIZE,(FS+10)*10+10);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_YSIZE,(FS+10)*2);

   ObjectSetString(ChartID(),obj_pref+"Spread",OBJPROP_TEXT,"20");

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_COLOR,Black); 

   ObjectSetString(ChartID(),obj_pref+"Spread",OBJPROP_FONT,"Arial"); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_FONTSIZE,FS+10); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_READONLY,false); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_ALIGN,ALIGN_CENTER); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_BGCOLOR,CL_Symb);

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_BORDER_TYPE,BORDER_SUNKEN);

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_CORNER,CORNER_LEFT_LOWER); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_BACK,false); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_SELECTABLE,false); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_SELECTED,false); 

   ObjectSetInteger(ChartID(),obj_pref+"Spread",OBJPROP_HIDDEN,true); 

   

   

   if(ObjectFind(0,obj_pref+"BT4")==-1)

   {

   ObjectCreate(ChartID(),obj_pref+"BT4",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_XDISTANCE,10); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_YDISTANCE,(FS+10)*20);

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_XSIZE,(FS+10)*30+10);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_YSIZE,(FS+10)*2);

   ObjectSetString(ChartID(),obj_pref+"BT4",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_FONTSIZE,FS+10);

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_COLOR,clrWhite);

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_BORDER_COLOR,clrDarkGray);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_BACK,False);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   ObjectSetString(ChartID(),obj_pref+"BT4",OBJPROP_TEXT,"I'm ready! Let's go!");//--- CAB0=>28< B5:AB   

   ObjectSetInteger(ChartID(),obj_pref+"BT4",OBJPROP_BGCOLOR,clrGreen);

   }

 }

}



void OnChartEvent(const int id,         // 845=B8D8:0B>@ A>1KB8O  

                  const long& lparam,   // ?0@0<5B@ A>1KB8O B8?0 long

                  const double& dparam, // ?0@0<5B@ A>1KB8O B8?0 double

                  const string& sparam) // ?0@0<5B@ A>1KB8O B8?0 string

{



   if(MayStart) return;

   

   if(ObjectGetInteger(0,obj_pref+"BT1",OBJPROP_STATE)==true)

   {

   ObjectSetInteger(0,obj_pref+"BT1",OBJPROP_STATE,false);

   /*

   int ret=MessageBox("This will open "+IntegerToString(SymbolsTotal(MarketWatch))+

                     "\n (max."+IntegerToString(CHARTS_MAX)+")",

      "Are you sure?", MB_OKCANCEL);



   if (ret==IDOK)*/

   {

    for(int i=0;i<MathMin(SymbolsTotal(MarketWatch),CHARTS_MAX);i++)

    {

     bool mayopen=true;

     long c=ChartFirst();

     while(!IsStopped())

     {

      if(ChartSymbol(c)==SymbolNames[i]) {mayopen=false;Print("Found ",SymbolNames[i]);break;}

      c=ChartNext(c);

      if(c<0) break;

     }

     if(mayopen) {if(mayopen) Print("Open ",SymbolNames[i]);ChartOpen(SymbolNames[i],TF1);}

    }

   }

   

   }

   

   

   if(ObjectGetInteger(0,obj_pref+"BT2",OBJPROP_STATE)==true)

   {

   ObjectSetInteger(0,obj_pref+"BT2",OBJPROP_STATE,false);

   /*

   int ret=MessageBox("This will hide some symbols in MarketWatch",

      "Are you sure?", MB_OKCANCEL);



   if (ret==IDOK)*/

   {

    for(int i=SymbolsTotal(true);i>=0;i--)

     SymbolSelect(SymbolNames[i],SymbolInfoInteger(SymbolNames[i],SYMBOL_TRADE_MODE)==SYMBOL_TRADE_MODE_FULL);

   }

   }

      

     int countcharts=0;

     long c=ChartFirst();

     while(ChartNext(c)>=0 && !IsStopped())

     {

      c=ChartNext(c);

      countcharts++;

     }

     

   if(ObjectGetInteger(0,obj_pref+"BT3",OBJPROP_STATE)==true)

   {

   ObjectSetInteger(0,obj_pref+"BT3",OBJPROP_STATE,false);

   double MaxSpread=StringToDouble(ObjectGetString(ChartID(),obj_pref+"Spread",OBJPROP_TEXT));

   /*int ret=MessageBox("This will hide symbols, that have spread more than "+ObjectGetString(ChartID(),obj_pref+"Spread",OBJPROP_TEXT)

                      +" points \nper 1000 points of daily move. \nOpened charts will not be hiden or closed."+

                      "\n\nSometimes need to do this twice if many symbols has no daily data.",

      "Are you sure?", MB_OKCANCEL);



   if (ret==IDOK)*/

    for(int i=SymbolsTotal(true)-1;i>=0;i--)

    {

     int Daily_Move=0;

     string S_Name=SymbolNames[i];

     if (iBars(S_Name,PERIOD_D1)<20) {Print("No daily data for ",S_Name);continue;}

     for(int b=1;b<20;b++)

      Daily_Move+=int((iHigh(S_Name,PERIOD_D1,b)-iLow(S_Name,PERIOD_D1,b))/MarketInfo(S_Name,MODE_POINT)/18);

     if(Daily_Move==0) {Print (S_Name," daily move calculation error (DM=0).");continue;}

     Print("Average daily move for ",S_Name," is ",Daily_Move," points. Spread is ",MarketInfo(S_Name,MODE_SPREAD)," (",

           DoubleToStr(1000.0/Daily_Move*MarketInfo(S_Name,MODE_SPREAD),1)," per 1000) points. ",1000.0/Daily_Move*MarketInfo(S_Name,MODE_SPREAD)<MaxSpread?" Don't h":"H","ide pair");

     SymbolSelect(S_Name,1000.0/Daily_Move*MarketInfo(S_Name,MODE_SPREAD)<MaxSpread);

    }

   }

   



   

   int MAX_FIT_X=int(ChartGetInteger(0,CHART_WIDTH_IN_PIXELS )/H_Step/FS)-2;

   int MAX_FIT_Y=int(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)/V_Step/FS)-2;

   

   Symb_Total=SymbolsTotal(MarketWatch);

   Text(4,0,"May Start = false!!! Set up pairs and change inputs.",CL_Symb,10);

   Text(2,0,"Pairs number "+IntegerToString(Symb_Total)+". Charts Number "+IntegerToString(countcharts+1),CL_Symb,10);

   Text(0,0,"Max. number to be fit on screen "+IntegerToString(MAX_FIT_X)+"(horisontal) x "+IntegerToString(MAX_FIT_Y)+"(vertical)",CL_Symb,10);

  

   if(ObjectGetInteger(0,obj_pref+"BT4",OBJPROP_STATE))

   {

    MayStart=true;

    ObjectsDeleteAll(0,obj_pref);

    OnInit();

   }

}





void deinit()

{

 ObjectsDeleteAll(0,obj_pref);



 ChartSetInteger(0,CHART_MODE,CHART_BARS);

 ChartSetInteger(0,CHART_SHOW_ASK_LINE,true);

 ChartSetInteger(0,CHART_SHOW_BID_LINE,true);

 ChartSetInteger(0,CHART_SHOW_PERIOD_SEP,true);

 ChartSetInteger(0,CHART_SHOW_DATE_SCALE,true);

 ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,true);

}



void start()

{



  if(Once)

  {

   if(LastTime==iTime(NULL,TF1,0)) return;

   LastTime = iTime(NULL,TF1,0);

  }



   if(!MayStart) 

   {

    Symb_Total=SymbolsTotal(MarketWatch);

    Text(0,0,"Pairs number is "+IntegerToString(Symb_Total)+". Start is not allowed by inputs.",CL_Symb,10);

    return;

   }

   else

   {

    ObjectDelete(0,obj_pref+"BT1");

    ObjectDelete(0,obj_pref+"BT2");

    ObjectDelete(0,obj_pref+"BT3");

    ObjectDelete(0,obj_pref+"BT4");

    ObjectDelete(0,obj_pref+"Spread");

   }

   

   //double MaxV=MathMax(4,(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)-10)/V_Step/FS-2);

   //double MaxH=MathMax(4,(ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)-10) /H_Step/FS-2);

   

   if(Symb_Total<2) {Alert("Need at least TWO symbols!");MayStart=false;OnInit();return;}



   string sTF1=StringSubstr(EnumToString(TF1),7);





   ulong Start=GetMicrosecondCount();

   Text(0           ,0           ,sTF1+"("+IntegerToString(cPeriod1)+")");

   Text(Symb_Total+1,Symb_Total+1,sTF1+"("+IntegerToString(cPeriod1)+")");

   Text(Symb_Total+1,0           ,sTF1+"("+IntegerToString(cPeriod1)+")");

   

   int cntr1=0,cntr2=0;

   for(int r=0;r<Symb_Total;r++)

   { 

   // if(r>=MaxH) break;

    CurrencyPair1=SymbolNames[r];

    Text(r+1,0           ,Cut(CurrencyPair1),CL_Symb);

    Text(r+1,Symb_Total+1,Cut(CurrencyPair1),CL_Symb);

    for(int c=0;c<Symb_Total;c++)

     {

   //   if(c>=MaxV) break;

      double Corr=1;

      CurrencyPair2=SymbolNames[c];

      if(c==r) {Text(0           ,Symb_Total-c,Cut(CurrencyPair1),CL_Symb);

                Text(Symb_Total+1,Symb_Total-c,Cut(CurrencyPair1),CL_Symb);

                Text(r+1         ,Symb_Total-c,Cut(CurrencyPair1),CL_Symb);

                if(r%2==0) Rect(r+1,Symb_Total-c);}

      else

      {         

      Corr=Correlation(CurrencyPair1,CurrencyPair2,TF1,cPeriod1);

                                    Text(r+1,Symb_Total-c,DoubleToStr(Corr,3),CL);

      if(Corr>= Enought && Corr!=1) Text(r+1,Symb_Total-c,DoubleToStr(Corr,3),CL_Pos,3);

      if(Corr<=-Enought           ) Text(r+1,Symb_Total-c,DoubleToStr(Corr,3),CL_Neg,3);

      if(fabs(Corr)<=NoCorr)        Text(r+1,Symb_Total-c,DoubleToStr(Corr,3),CL_NoC,3);

      if(Corr== 2)                  Text(r+1,Symb_Total-c,"No Data",CL);

      if(Corr== 3)                  Text(r+1,Symb_Total-c,".  .  .",CL);

      }

      

      CorArr1[c][r]=Corr;



     }

    }



  if(MAX_MIN)

  {

  Text(Symb_Total+3,0,"max-min:",CL_Symb);

  Text(Symb_Total+9,0,"max-min:",CL_Symb);

  

  Text(Symb_Total+4 ,0,"Low corr.:",CL_Symb);

  Text(Symb_Total+10,0,"Low corr.:",CL_Symb);

  

  Text(Symb_Total+5 ,0,"High corr.:",CL_Symb);

  Text(Symb_Total+11,0,"High corr.:",CL_Symb);

  

  Text(Symb_Total+6 ,0,"Main:",CL_Symb);

  Text(Symb_Total+12,0,"Main:",CL_Symb);

  

  Text(Symb_Total+7 ,0,"       Best by values:",CL_Symb,3);

  Text(Symb_Total+13,0,"       Different currencies:",CL_Symb,3);

  

  for (int c=0;c<Symb_Total;c++)

   {

    int max=(c==0?1:0);

    int min=(c==0?1:0);

    for(int r=0;r<Symb_Total;r++)

     {

      if(fabs(CorArr1[c][r]>=1)) continue;

      if(fabs(CorArr1[c][max])<fabs(CorArr1[c][r  ])) max=r;

      if(fabs(CorArr1[c][r  ])<fabs(CorArr1[c][min])) min=r;

     }

    

    bool gray=false;

    if(fabs(CorArr1[c][max])<Enought || fabs(CorArr1[c][min])>NoCorr) gray=true;



    

    Text(Symb_Total+6,Symb_Total-c,Cut(SymbolNames[c]),gray?CL:CL_Symb,gray?0:1);

    Text(Symb_Total+5,Symb_Total-c,Cut(SymbolNames[max]),gray?CL:(CorArr1[c][max]>0?CL_Pos:CL_Neg),gray?0:1);

    Text(Symb_Total+4,Symb_Total-c,Cut(SymbolNames[min]),gray?CL:CL_NoC,gray?0:1);

    Text(Symb_Total+3,Symb_Total-c,DoubleToString(CorArr1[c][max]-fabs(CorArr1[c][min]),3),gray?CL:CL_Symb,gray?0:2);

    

    Text(Symb_Total+3,0,"max-min:",CL_Symb);

  }

   

  //better

  for (int c=0;c<Symb_Total;c++)

   {

    int max=(c==0?1:0);

    int min=(c==0?1:0);

    

    for(int r=0;r<Symb_Total;r++)

     {

      if(fabs(CorArr1[c][max])<fabs(CorArr1[c][r  ])) min=r;

      if(fabs(CorArr1[c][r  ])<fabs(CorArr1[c][min])) max=r;

     }

    

    string s1=StringSubstr(SymbolNames[c],0,3),

           s2=StringSubstr(SymbolNames[c],3,3);

    

    for(int r=0;r<Symb_Total;r++)

     {

      if(fabs(CorArr1[c][r]>=1)) continue;

      if(StringFind(SymbolNames[r],s1)>-1 || StringFind(SymbolNames[r],s2)>-1) 

       {

        //Print (s1," - ", s2);

        continue;

       }

      if(fabs(CorArr1[c][max])<fabs(CorArr1[c][r  ])) max=r;

      if(fabs(CorArr1[c][r  ])<fabs(CorArr1[c][min])) min=r;

     }

    

    bool gray=false;

    if(fabs(CorArr1[c][max])<Enought || fabs(CorArr1[c][min])>NoCorr) 

     {

      gray=true;

    /*  Text(Symb_Total+12,Symb_Total-c,"",CL);

      Text(Symb_Total+11,Symb_Total-c,"",CL);

      Text(Symb_Total+10,Symb_Total-c,"",CL);

      Text(Symb_Total+9 ,Symb_Total-c,"",CL);

      continue;*/

     }



    Text(Symb_Total+12,Symb_Total-c,Cut(SymbolNames[c]),gray?CL:CL_Symb,gray?0:1);

    Text(Symb_Total+11,Symb_Total-c,Cut(SymbolNames[max]),gray?CL:(CorArr1[c][max]>0?CL_Pos:CL_Neg),gray?0:1);

    Text(Symb_Total+10,Symb_Total-c,Cut(SymbolNames[min]),gray?CL:CL_NoC,gray?0:1);

    Text(Symb_Total+9 ,Symb_Total-c,DoubleToString(CorArr1[c][max]-fabs(CorArr1[c][min]),3),gray?CL:CL_Symb,gray?0:2);



   }

  }

    

  //Symb_Total=SymbolsTotal(MarketWatch);

  Text(0,Symb_Total+1,"Calc. time "+IntegerToString((GetMicrosecondCount()-Start)/1000)+" ms");//+DoubleToStr(MaxH,1));

}



double Correlation(string symbol1, string symbol2, int TF, int period, int shift=1)

{



   if(iBars(symbol1,TF)<period-1-shift || iBars(symbol2,TF)<period-1-shift) return(2);

   if(Ignore_Symbol(symbol1) || Ignore_Symbol(symbol2)) return(3);

   if(symbol1==symbol2) return(1);



   int i;

   double M1=0;

   double M2=0;

   double D1, D2;

   double S1=0;

   double S2=0;

   double S3=0;

   

   for(i=shift;i<period+shift;i++)

   {

      M1=M1+iClose(symbol1, TF, i);

      M2=M2+iClose(symbol2, TF, i);

   }

   M1=M1/period;

   M2=M2/period;

   

   for(i=shift;i<period+shift;i++)

   {

      D1=iClose(symbol1, TF, i)-M1;

      D2=iClose(symbol2, TF, i)-M2;

      S1=S1+(D1*D2);

      S2=S2+(D1*D1);

      S3=S3+(D2*D2);   

   }

   return(S1/(MathSqrt(S2*S3)));

}





string obj_pref="Corr_";



void Text(int row,int column, string text="",color CLR=0,int FS_shift=0)

{

   if(CLR==0) CLR=CL;

   //Print(row);

   string name=obj_pref+IntegerToString(row)+"_"+IntegerToString(column);//+SymbolNames[row]+"_"+SymbolNames[Symb_Total-column];//+"_"+text;

   int y=int((row)*FS*V_Step)+5;

   int x=int((column)*FS*H_Step)+5;

   if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);

   ObjectSet(name,OBJPROP_CORNER,CORNER_LEFT_LOWER);

   ObjectSet(name,OBJPROP_XDISTANCE,x);

   ObjectSet(name,OBJPROP_YDISTANCE,y);

   ObjectSetText(name,text,FS+FS_shift,"Arial",CLR);

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

}



void Text2(int row,int column, string text="",color CLR=0,int FS_shift=0)

{

   if(CLR==0) CLR=CL;

   string name=obj_pref+IntegerToString(row)+"_"+IntegerToString(column);

   int y=int((row)*FS*V_Step)+15;

   int x=int((column)*FS*H_Step)+5;

   if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);

   ObjectSet(name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);

   ObjectSet(name,OBJPROP_XDISTANCE,x);

   ObjectSet(name,OBJPROP_YDISTANCE,y);

   ObjectSetText(name,text,FS+FS_shift,"Arial",CLR);

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

}



void Rect(int row,int column)

{

   string name=obj_pref+IntegerToString(row)+"_"+IntegerToString(column)+"_R_";

   int y=int((row)*FS*V_Step)+5;

   int x=int((Symb_Total+2)*FS*H_Step)-10;

   if(ObjectFind(name)<0) ObjectCreate(name,OBJ_RECTANGLE_LABEL,0,0,0);

   ObjectSet(name,OBJPROP_CORNER,CORNER_LEFT_LOWER);

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,5); 

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); 

   ObjectSetInteger(0,name,OBJPROP_XSIZE,x); 

   ObjectSetInteger(0,name,OBJPROP_YSIZE,0); 

   ObjectSetInteger(0,name,OBJPROP_COLOR,CL);

   ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);

   ObjectSetInteger(0,name,OBJPROP_BACK,true);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

}



string Cut(string symb)

{

 if(CutSuffix) return StringSubstr(symb,0,6);

 else          return symb;

}



bool Ignore_Symbol(string mSymb)//true - ignore

 {

  if(Symb_ignore_list>0)

   for(int i=0;i<Symb_ignore_list;i++) 

    if(StringFind(mSymb,Symb_ignore_ARR[i])>=0) return(true);



  return(false);

 }

Comments