Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
iBeta
//+------------------------------------------------------------------+
//|                                                        iBeta.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "http://dmffx.com"
#property link      "http://dmffx.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters

extern int     Periods  =  14;         // Ïåðèîä â áàðàõ
extern string  Symbol1  =  "EURUSD";   // Ñèìâîë 1
extern string  Symbol2  =  "GBPUSD";   // Ñèìâîë 2
extern int     Mode1    =  1;          // Ðåæèì 1: 0 - êîâàðèàöèÿ, 1 - áåòà ñèìâîëà 1, 2 - áåòà ñèìâîëà 2, 3 - êîððåëÿöèÿ
extern int     Price    =  0;          // Öåíà: 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int     Mode2    =  2;          // Ðåæèì 1: 0 - öåíà Price, 1 - ROC îò öåíû Price, 2 - ROC% îò öåíû Price


//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){

   Symbol1=StringTrimLeft(StringTrimRight(Symbol1));
   Symbol2=StringTrimLeft(StringTrimRight(Symbol2));
   
   if(Symbol1=="")Symbol1=Symbol();
   if(Symbol2=="")Symbol2=Symbol();

//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   
   switch(Mode1){
      case 0:
         IndicatorShortName(Symbol1+" "+Symbol2+" covariation");
      break;
      case 1:
         IndicatorShortName("Beta of "+Symbol1+" with "+Symbol2);
      break;
      case 2:
         IndicatorShortName("Beta of "+Symbol2+" with "+Symbol1);
      break;
      case 3:
         IndicatorShortName(Symbol1+" "+Symbol2+" correlation");
      break;
   }       

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){

         int ic=IndicatorCounted();
         datetime daytimes[];
         static bool err;
         ArrayCopySeries(daytimes,MODE_TIME,Symbol1,0);
         int le1=GetLastError();
         ArrayCopySeries(daytimes,MODE_TIME,Symbol2,0);
         int le2=GetLastError();         
            if(le1==4066 || le2==4066){
               Comment("æäó îáíîâëåíèÿ äàííûõ íà "+Symbol1+" è "+Symbol2);
               err=true;
               return(0);
            }
         int limit=Bars-ic-1;
            if(err || ic==0){
               if(err){
                  err=false;
                  Comment("");
               }                  
               for(int i=Bars-1;i>=0;i--){
                  int bs1=iBarShift(Symbol1,0,Time[i],false);
                  int bs2=iBarShift(Symbol2,0,Time[i],false);
                     if(bs1<iBars(Symbol1,0)-Periods-1 && bs2<iBars(Symbol2,0)-Periods-1){
                        limit=i;
                        break;
                     }
               }
            }

         double x,y,z1,z2;
         int j;
         
            for(i=limit;i>=0;i--){
               bs1=iBarShift(Symbol1,0,Time[i],false);
               bs2=iBarShift(Symbol2,0,Time[i],false);
               double aver1=iMA(Symbol1,0,Periods,0,0,0,bs1);
               double aver2=iMA(Symbol2,0,Periods,0,0,0,bs2);
               double cov=0;
               double d1=0;
               double d2=0;
                  switch(Mode2){
                     case 0:
                        for(j=0;j<Periods;j++){
                           x=iMA(Symbol1,0,1,0,0,Price,bs1+j);
                           y=iMA(Symbol2,0,1,0,0,Price,bs2+j);
                           z1=(x-aver1);
                           z2=(y-aver2);
                           cov+=z1*z2;
                           d1+=z1*z1;
                           d2+=z2*z2;
                        }
                     break;
                     case 1:
                        for(j=0;j<Periods;j++){
                           x=iMA(Symbol1,0,1,0,0,Price,bs1+j)-iMA(Symbol1,0,1,0,0,Price,bs1+j+1);
                           y=iMA(Symbol2,0,1,0,0,Price,bs2+j)-iMA(Symbol2,0,1,0,0,Price,bs2+j+1);
                           z1=(x-aver1);
                           z2=(y-aver2);
                           cov+=z1*z2;
                           d1+=z1*z1;
                           d2+=z2*z2;
                        }
                     break;
                     case 2:
                        for(j=0;j<Periods;j++){
                           x=(iMA(Symbol1,0,1,0,0,Price,bs1+j)-iMA(Symbol1,0,1,0,0,Price,bs1+j+1))/iMA(Symbol1,0,1,0,0,Price,bs1+j+1);
                           y=(iMA(Symbol2,0,1,0,0,Price,bs2+j)-iMA(Symbol2,0,1,0,0,Price,bs2+j+1))/iMA(Symbol2,0,1,0,0,Price,bs2+j+1);
                           z1=(x-aver1);
                           z2=(y-aver2);
                           cov+=z1*z2;
                           d1+=z1*z1;
                           d2+=z2*z2;
                        }
                     break;

                  }

               cov/=Periods;
               d1=MathSqrt(d1/Periods);
               d2=MathSqrt(d2/Periods);
                  switch(Mode1){
                     case 0:
                        ExtMapBuffer1[i]=cov;
                     break;
                     case 1:
                        ExtMapBuffer1[i]=cov/(d2);
                     break;
                     case 2:
                        ExtMapBuffer1[i]=cov/(d1);
                     break;
                     case 3:
                        ExtMapBuffer1[i]=cov/(d1*d2);
                     break;
                  }                     
               
            }
   return(0);
  }
//+------------------------------------------------------------------+

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