вторая часть кода со строки 276
void Ind_PirsonPricePrice_TFS(string aSymbol_1,string aSymbol_2, int aTimeFrame,double & aToBuf[],int aPeriod,int aPrice,int aSN1,int aSN2){ int limit=Bars-IndicatorCounted()-1; if(LS1!=aSymbol_1 || LS2!=aSymbol_2 || LTF!=aTimeFrame || LSN!=aSN1*aSN2){ limit=Bars-1; LS1=aSymbol_1; LS2=aSymbol_2; LTF=aTimeFrame; LSN=aSN1*aSN2; SetIndexLabel(0,iif_string(aSN1==1,"","-")+aSymbol_1+" "+iif_string(aSN2==1,"","-")+aSymbol_2); datetime LimitTime=MathMax(iTime(aSymbol_1,aTimeFrame,iBars(aSymbol_1,aTimeFrame)-aPeriod),iTime(aSymbol_2,aTimeFrame,iBars(aSymbol_2,aTimeFrame)-aPeriod)); limit=MathMin(limit,iBarShift(NULL,0,LimitTime)-1); ArrayInitialize(Buf,EMPTY_VALUE); SetLevelValue(0,Level); SetLevelValue(1,-Level); } int NTFBarNum_1=iBarShift(aSymbol_1,aTimeFrame,Time[limit],true); datetime NTFTime_1=iTime(aSymbol_1,aTimeFrame,NTFBarNum_1); int NTFBarNum_2=iBarShift(aSymbol_2,aTimeFrame,Time[limit],true); datetime NTFTime_2=iTime(aSymbol_1,aTimeFrame,NTFBarNum_2); limit=iBarShift(NULL,0,MathMax(NTFTime_1,NTFTime_2)); for(int i=limit;i>=0;i--){ if(aTimeFrame>=Period()){ int BarNum_1=iBarShift(aSymbol_1,aTimeFrame,Time[i],false); int BarNum_2=iBarShift(aSymbol_2,aTimeFrame,Time[i],false); } else{ BarNum_1=iBarShift(aSymbol_1,aTimeFrame,Time[i]+Period()*60-aTimeFrame*60,false); BarNum_2=iBarShift(aSymbol_2,aTimeFrame,Time[i]+Period()*60-aTimeFrame*60,false); } double tValue; if(fPirsonPricePrice_TFS(aSymbol_1,BarNum_1,aSymbol_2,BarNum_2,aTimeFrame,aPeriod,aPrice,tValue)){ aToBuf[i]=tValue*aSN1*aSN2; } else{ aToBuf[i]=aToBuf[i+1]; } } } string iif_string(bool a1,string a2,string a3){ if(a1)return(a2); return(a3); } string DS2(double v){return(DoubleToStr(v,2));} bool fPirsonPricePrice_TFS(string aSymbol_1,int aShift_1,string aSymbol_2,int aShift_2,int aTimeFrame,int aPeriod, int aPrice, double & aCorrelation){ double SumXY=0; double SumXX=0; double SumYY=0; double SumY=0; double SumX=0; int j; int xi; int yi; for(j=0,xi=aShift_1,yi=aShift_2;j<aPeriod;j++,xi++,yi++){ double X=iMA(aSymbol_1,aTimeFrame,1,0,0,aPrice,xi); double Y=iMA(aSymbol_2,aTimeFrame,1,0,0,aPrice,yi); SumX+=X; SumY+=Y; SumXX+=X*X; SumYY+=Y*Y; SumXY+=X*Y; } double SXXYY=MathSqrt(MathAbs((aPeriod*SumXX-SumX*SumX)*(aPeriod*SumYY-SumY*SumY))); if(SXXYY!=0.0){ double SXY=aPeriod*SumXY-SumY*SumX; aCorrelation=SXY/SXXYY; return(true); } return(false); } void fObjDeleteByPrefix(string aPrefix){ for(int i=ObjectsTotal()-1;i>=0;i--){ if(StringFind(ObjectName(i),aPrefix,0)==0){ ObjectDelete(ObjectName(i)); } } } bool fDataUpdateFromListSCmnt(string aSymbol[],int aTimeFrame,int aAllFlag=0,int aMinBars=300){ static bool tErr=false; bool tRetVal=true; string CommentString=""; for(int ti=0;ti<ArraySize(aSymbol);ti++){ if(!fDataUpdate(aSymbol[ti],aTimeFrame,aMinBars)){ if(LS1==aSymbol[ti])LS1=""; if(LS2==aSymbol[ti])LS2=""; tRetVal=false; tErr=true; CommentString=CommentString+aSymbol[ti]+" "+fTimeFrameName(aTimeFrame)+", "; Comment("Жду обновления данных "+StringSubstr(CommentString,0,StringLen(CommentString)-2)+"..."); if(aAllFlag==0){ break; } } } if(tErr){ if(tRetVal){ tErr=false; Comment(""); } } return(tRetVal); } bool fDataUpdate(string aSymbol,int aTimeFrame,int aMinBars=300){ datetime daytimes[]; if(iClose(aSymbol,aTimeFrame,0)==0){ return(false); } ArrayCopySeries(daytimes,MODE_TIME,aSymbol,aTimeFrame); if(GetLastError()==4066){ return(false); } if(iBars(aSymbol,aTimeFrame)<aMinBars){ return(false); } return(true); } string fTimeFrameName(int arg){ if(arg==0){ arg=Period(); } switch(arg){ case 0: return("0"); case 1: return("M1"); case 5: return("M5"); case 15: return("M15"); case 30: return("M30"); case 60: return("H1"); case 240: return("H4"); case 1440: return("D1"); case 10080: return("W1"); case 43200: return("MN1"); default: return("M"+arg); } } int fSymbolSelect(){ int y=18; int sx=5; int x=sx; int ly; int cnt=0; for(int i=0;i<ArraySize(SC);i++){ if(fGUI_PushButton(WindowExpertName()+"S_List_"+i,x,y,SC[i],0,ColorOf,7,Win,"Arial",false)){ if(LastWidth==Width){ if(SS[i]){ SS[i]=false; } else{ SS[i]=true; } } } if(SS[i]){ fGUI_PushButton(WindowExpertName()+"S_List_"+i,x,y,SC[i],0,ColorOn,7,Win,"Arial",false); cnt++; } ly=y; x+=SymbolWidth; if(x+SymbolWidth*2>=Width){ x=sx; y+=10; } } ArrayResize(WS,cnt); int k=0; for(i=0;i<ArraySize(SC);i++){ if(SS[i]){ WS[k]=SC[i]; k++; } } return(ly); } int fTFSelect(){ static int last=-1; if(last==-1){ last=0; for(int i=0;i<TFC;i++){ if(TF[i]==Period()){ last=i; break; } } } int pushed=-1; for(i=0;i<TFC;i++){ if(fGUI_PushButton(WindowExpertName()+"TF_Option_"+i,110+20*i,4,TFN[i],0,ColorOf,7,Win,"Arial",false)){ pushed=i; } } if(pushed!=-1){ last=pushed; } fGUI_PushButton(WindowExpertName()+"TF_Option_"+last,110+20*last,4,TFN[last],0,ColorOn,7,Win,"Arial",false); return(TF[last]); } bool fGUI_PushButton( string aObjectName, // 1 имя int aX, // 2 х int aY, // 3 у string aText, // 4 текст int aCorner=0, // 5 угол 0 1 // 2 3 color aColor=Red, // 6 цвет int aFontSize=8, // 7 размер шрифта int aWindowNumber=0, // 8 окно string aFont="Arial", // 9 шрифт bool aBack=false // 10 фон ){ if(ObjectFind(aObjectName)==aWindowNumber){ int tX=ObjectGet(aObjectName,OBJPROP_XDISTANCE); int tY=ObjectGet(aObjectName,OBJPROP_YDISTANCE); if(tX!=aX || tY!=aY){ fObjLabel(aObjectName,aX,aY,aText,aCorner,aColor,aFontSize,aWindowNumber,aFont,aBack); tX=ObjectGet(aObjectName,OBJPROP_XDISTANCE); tY=ObjectGet(aObjectName,OBJPROP_YDISTANCE); if(tX==aX && tY==aY){ ObjectDelete(aObjectName); fObjLabel(aObjectName,aX,aY,aText,aCorner,aColor,aFontSize,aWindowNumber,aFont,aBack); return(true); } } fObjLabel(aObjectName,aX,aY,aText,aCorner,aColor,aFontSize,aWindowNumber,aFont,aBack); } else{ fObjLabel(aObjectName,aX,aY,aText,aCorner,aColor,aFontSize,aWindowNumber,aFont,aBack); } return(false); } void fObjLabel( string aObjectName, // 1 имя int aX, // 2 х int aY, // 3 у string aText, // 4 текст int aCorner=0, // 5 угол 0 1 // 2 3 color aColor=Red, // 6 цвет int aFontSize=8, // 7 размер шрифта int aWindowNumber=0, // 8 окно string aFont="Arial", // 9 шрифт bool aBack=false // 10 фон ){ if(ObjectFind(aObjectName)!=aWindowNumber){ ObjectCreate(aObjectName,OBJ_LABEL,aWindowNumber,0,0); } ObjectSet(aObjectName,OBJPROP_XDISTANCE,aX); ObjectSet(aObjectName,OBJPROP_YDISTANCE,aY); ObjectSetText(aObjectName,aText,aFontSize,aFont,aColor); ObjectSet(aObjectName,OBJPROP_BACK,aBack); ObjectSet(aObjectName,OBJPROP_CORNER,aCorner); } int fSymbolsList(string & Symbols[], bool Selected){ // Функция SymbolsList © http://www.mql4.com/ru/users/Ilnur string SymbolsFileName; int Offset, SymbolsNumber; if(Selected){ SymbolsFileName="symbols.sel"; } else{ SymbolsFileName="symbols.raw"; } // Открываем файл с описанием символов int hFile=FileOpenHistory(SymbolsFileName,FILE_BIN|FILE_READ); if(hFile<0)return(-1); // Определяем количество символов, зарегистрированных в файле if(Selected){ SymbolsNumber=(FileSize(hFile)-4)/128; Offset=116; } else{ SymbolsNumber=FileSize(hFile)/1936; Offset=1924; } ArrayResize(Symbols, SymbolsNumber); // Считываем символы из файла if(Selected){ FileSeek(hFile, 4, SEEK_SET); } for(int i=0;i<SymbolsNumber;i++){ Symbols[i]=FileReadString(hFile,12); FileSeek(hFile,Offset,SEEK_CUR); } FileClose(hFile); // Возвращаем количество считанных инструментов return(SymbolsNumber); }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день!
Кто сможет переделать (для общего блага) данный известный индикатор корреляции в новом формате " время(час)---коэффициент корреляции" для 2-3 пар на выбор ,
вместо старой таблицы? С отображением на графике.
Спасибо тем кто откликнется !