Author: Copyright 2020, ea@cmillion.ru
Price Data Components
Series array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
CORR_v1
ÿþ//+------------------------------------------------------------------+

//|                                                      SET TBM.mq4 |

//|                                   Copyright 2020, ea@cmillion.ru |

//|                                          https://www.cmillion.ru |

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

#property copyright "Copyright 2020, ea@cmillion.ru"

#property link      "https://www.cmillion.ru"

#property version   "2.00"

#property strict

#property script_show_inputs

sinput ENUM_TIMEFRAMES TF_Trade=PERIOD_M5;

sinput int BarsCor=300;

sinput double K             = 0.8;

sinput double WindSize             = 1.2;   //size information window

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

void OnStart()

{

   ObjectsDeleteAll(0);Comment("");

   //string txt;

   int par=0,i,j;

   string Symbols[1000];

   for(j=0;j<MathMin(SymbolsTotal(true),1000);j++) 

   {

      Symbols[j]=SymbolName(j,true);

      if(Symbols[j]!=NULL) par++;

      else break;

   }

   

   //---

   if (par>30) par=30;

   int X=10,Y=40;

   EditCreate(0,"cm BarsCor",0,X,20,51,21,StrCon(StrTF(TF_Trade)," ",IntegerToString(BarsCor)),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrYellow);

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

   {

      EditCreate(0,StrCon("cm S V ",IntegerToString(j)),0,X,Y,51,21,Symbols[j],"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrLightGray);

  //ButtonCreate(0,StrCon("cm S V ",IntegerToString(j)),0,X,Y,50,20,Symbols[j],"Arial",7,clrBlack,clrLightGray,clrNONE,false,CORNER_LEFT_UPPER);

      Y+=20;

   }

   X=20;

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

   {

      X+=40;

      Y=20;

      EditCreate(0,StrCon("cm S H ",IntegerToString(i)),0,X,Y,41,21,Symbols[i],"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrLightGray);

  //ButtonCreate(0,StrCon("cm S H ",IntegerToString(i)),0,X,Y,41,21,Symbols[i],"Arial",7,clrBlack,clrLightGray,clrNONE,false,CORNER_LEFT_UPPER);

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

      {

         Y+=20;

         if (j==i) 

         {

            EditCreate(0,StrCon("cm S k ",IntegerToString(j)," ",IntegerToString(i)),0,X,Y,41,21,"","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrYellow);

            continue;

         }

         double cor = correl(Symbols[j],Symbols[i],TF_Trade,BarsCor,0);

         EditCreate(0,StrCon("cm S k ",IntegerToString(j)," ",IntegerToString(i)),0,X,Y,41,21,DoubleToString(cor,2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,cor>K?clrLime:(cor<-K?clrRed:clrWhite));

      }

   }

}

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

double correl(string N1, string N2, ENUM_TIMEFRAMES tf, int period_bar, datetime tcor)

{

   if (N1=="") return(0);if (N2=="") return(0);

   double corr=0,s1=0,s2=0,s1s2=0,s22=0,s12=0,s02=0,s01=0;

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

   {

      s1=iClose(N1,tf,i);

      s2=iClose(N2,tf,i);

      s01+=s1;

      s02+=s2;

      s1s2+=s1*s2;

      s12+=s1*s1;

      s22+=s2*s2;

   }

   corr=MathSqrt((period_bar*s12-MathPow(s01,2))*(period_bar*s22-MathPow(s02,2)));

   if (corr!=0) 

   {

      corr=(period_bar*s1s2-s01*s02)/corr;

      return(corr);

   }

   else 

   {

      Print("Error correlycion ",N1," ",N2," ",StrTF(tf)," ",period_bar);

      return(0);

   }

}

//-------------------------------------------------------------------

bool ButtonCreate(const long              chart_ID=0,               // ID 3@0D8:0

                  const string            name="Button",            // 8<O :=>?:8

                  const int               sub_window=0,             // =><5@ ?>4>:=0

                  const long               x=0,                      // :>>@48=0B0 ?> >A8 X

                  const long               y=0,                      // :>>@48=0B0 ?> >A8 Y

                  const int               width=50,                 // H8@8=0 :=>?:8

                  const int               height=18,                // 2KA>B0 :=>?:8

                  const string            text="Button",            // B5:AB

                  const string            font="Arial",             // H@8DB

                  const int               font_size=10,             // @07<5@ H@8DB0

                  const color             clr=clrRed,               // F25B B5:AB0

                  const color             clrfon=clrBlack,          // F25B D>=0

                  const color             border_clr=clrNONE,       // F25B 3@0=8FK

                  const bool              state=false,

                  const ENUM_BASE_CORNER  CORNER=CORNER_RIGHT_LOWER)

  {

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSize));

      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSize));

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);

   }

   //ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,90); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*WindSize));

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*WindSize));

   return(true);

}

//----------------------

bool RectLabelCreate(const long             chart_ID=0,               // ID 3@0D8:0

                     const string           name="RectLabel",         // 8<O <5B:8

                     const int              sub_window=0,             // =><5@ ?>4>:=0

                     const long              x=0,                     // :>>@48=0B0 ?> >A8 X

                     const long              y=0,                     // :>>@48=0B0 ?> >A8 y

                     const int              width=50,                 // H8@8=0

                     const int              height=18,                // 2KA>B0

                     const color            back_clr=clrNONE,         // F25B D>=0

                     const color            clr=clrNONE,              // F25B ?;>A:>9 3@0=8FK (Flat)

                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // AB8;L ?;>A:>9 3@0=8FK

                     const int              line_width=1,             // B>;I8=0 ?;>A:>9 3@0=8FK

                     const bool             back=false,               // =0 704=5< ?;0=5

                     const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

                     const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

                     const long             z_order=0,

                     const int              CORNER=CORNER_LEFT_LOWER)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

   ResetLastError();

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSize));

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSize));

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*WindSize));

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*WindSize));

   return(true);

}

//--------------------------------------------------------------------

bool EditCreate(const long             chart_ID=0,               // ID 3@0D8:0 

                const string           name="Edit",              // 8<O >1J5:B0 

                const int              sub_window=0,             // =><5@ ?>4>:=0 

                const int              x=0,                      // :>>@48=0B0 ?> >A8 X 

                const int              y=0,                      // :>>@48=0B0 ?> >A8 Y 

                const int              width=50,                 // H8@8=0 

                const int              height=18,                // 2KA>B0 

                const string           text="Text",              // B5:AB 

                const string           font="Arial",             // H@8DB 

                const int              font_size=8,             // @07<5@ H@8DB0 

                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // A?>A>1 2K@02=820=8O 

                const bool             read_only=true,           // 2>7<>6=>ABL @540:B8@>20BL 

                const ENUM_BASE_CORNER corner=CORNER_RIGHT_LOWER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                const color            clr=clrBlack,             // F25B B5:AB0 

                const color            back_clr=clrWhite,        // F25B D>=0 

                const color            border_clr=clrNONE,       // F25B 3@0=8FK 

                const bool             back=false,               // =0 704=5< ?;0=5 

                const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   ResetLastError(); 

   if (ObjectFind(chart_ID,name)!=-1) ObjectDelete(chart_ID,name);

   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 

     { 

      return(false); 

     } 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*WindSize)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*WindSize)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSize)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSize)); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 

   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

   return(true); 

  } 

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

string StrTF(int t=0)

{

   if (t==0) t=Period();

   switch(t)

   {

      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_M15:

         return("M15");

      case PERIOD_M30:

         return("M30");

      case PERIOD_H1:

         return("H1");

      case PERIOD_H4:

         return("H4");

      case PERIOD_D1:

         return("D1");

      default:

         return(IntegerToString(t));

   }

}

//--------------------------------------------------------------------

void LabelCreate(const long              chart_ID=0,               // ID 3@0D8:0 

                 const string            name="Label",             // 8<O <5B:8 

                 const int               sub_window=0,             // =><5@ ?>4>:=0 

                 const int               x=0,                      // :>>@48=0B0 ?> >A8 X 

                 const int               y=0,                      // :>>@48=0B0 ?> >A8 Y 

                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                 const string            text="Label",             // B5:AB 

                 const string            font="Arial",             // H@8DB 

                 const int               font_size=10,             // @07<5@ H@8DB0 

                 const color             clr=clrBlack,             // F25B 

                 const double            angle=0.0,                // =0:;>= B5:AB0 

                 const ENUM_ANCHOR_POINT anchor=ANCHOR_RIGHT_UPPER,// A?>A>1 ?@82O7:8 

                 const bool              back=false,               // =0 704=5< ?;0=5 

                 const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                 const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                 const long              z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   ResetLastError(); 

   if(ObjectFind(chart_ID,name)==-1) 

   { 

      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0)) 

      { 

         return; 

      } 

   } 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*WindSize)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*WindSize)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

  } 

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

string StrCon(string t1=NULL,string t2=NULL,string t3=NULL,string t4=NULL,string t5=NULL,string t6=NULL,string t7=NULL,string t8=NULL,string t9=NULL,string t10=NULL,

              string t11=NULL,string t12=NULL,string t13=NULL,string t14=NULL,string t15=NULL,string t16=NULL,string t17=NULL,string t18=NULL,string t19=NULL,string t20=NULL,

              string t21=NULL,string t22=NULL)

{

   string str;

   #ifdef __MQL4__ str=StringConcatenate(#endif  

   #ifdef __MQL5__ StringConcatenate(str,#endif t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22);

   return(str);

}

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

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---