//+------------------------------------------------------------------+ //| 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=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