//+------------------------------------------------------------------+
//| Multy4.mq4 |
//| Candid |
//| http://candid.110mb.com/ |
//+------------------------------------------------------------------+
string IndName="Multy4";
//#define Color
#define Color1 Blue
#define Color2 FireBrick
#define Color3 Navy
#define Color4 Gold
extern string Smbl1 = "EURUSD";
extern string Smbl2 = "_DXY";
extern string Smbl3 = "_QM";
extern string Smbl4 = "XAUUSD";
extern int BP=1440; // Ïåðèîä ðàñ÷¸òà áàçû
extern int Depth=7200; //
#property copyright "Candid"
#property link "http://candid.110mb.com/"
#property indicator_separate_window
#property indicator_buffers 4
//#property indicator_color
//#property indicator_width 2
#property indicator_color1 Color1
#property indicator_width1 2
#property indicator_color2 Color2
#property indicator_width2 2
#property indicator_color3 Color3
#property indicator_width3 2
#property indicator_color4 Color4
#property indicator_width4 2
#property indicator_level1 0.0
#property indicator_levelcolor Black
int PreBars = 0;
int BarTime = 0;
int StartPos;
int FImTime1;
double P1;
double R1;
double BBuf1[];
double SBuf1[];
double SumB1;
double SumS1;
double B1;
double S1;
double Buf1[];
int FImTime2;
double P2;
double R2;
double BBuf2[];
double SBuf2[];
double SumB2;
double SumS2;
double B2;
double S2;
double Buf2[];
int FImTime3;
double P3;
double R3;
double BBuf3[];
double SBuf3[];
double SumB3;
double SumS3;
double B3;
double S3;
double Buf3[];
int FImTime4;
double P4;
double R4;
double BBuf4[];
double SBuf4[];
double SumB4;
double SumS4;
double B4;
double S4;
int pb;
bool IsBase;
double RecBP;
double Buf4[];
string ShortName;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
pb=0;
SumB1 = 0.0;
SumS1 = 0.0;
SumB2 = 0.0;
SumS2 = 0.0;
SumB3 = 0.0;
SumS3 = 0.0;
SumB4 = 0.0;
SumS4 = 0.0;
IsBase= false;
RecBP = 1.0/BP;
ArrayResize(BBuf1,BP);
ArrayResize(SBuf1,BP);
ArrayResize(BBuf2,BP);
ArrayResize(SBuf2,BP);
ArrayResize(BBuf3,BP);
ArrayResize(SBuf3,BP);
ArrayResize(BBuf4,BP);
ArrayResize(SBuf4,BP);
ShortName=IndName+"("+Smbl1+","+Smbl2+","+Smbl3+","+Smbl4+","+BP+","+Depth+")";
IndicatorShortName(ShortName);
SetIndexBuffer(0,Buf1);
SetIndexStyle(0,DRAW_LINE,EMPTY,2);
SetIndexLabel(0,Smbl1);
SetIndexBuffer(1,Buf2);
SetIndexStyle(1,DRAW_LINE,EMPTY,2);
SetIndexLabel(1,Smbl2);
SetIndexBuffer(2,Buf3);
SetIndexStyle(2,DRAW_LINE,EMPTY,2);
SetIndexLabel(2,Smbl3);
SetIndexBuffer(3,Buf4);
SetIndexStyle(3,DRAW_LINE,EMPTY,2);
SetIndexLabel(3,Smbl4);
PreBars = 0;
BarTime = 0;
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
Comment("");
// ObjectDelete(IndName+"Line");
// ObjectDelete(IndName+"Smbl");
ObjectDelete(IndName+"Line1");
ObjectDelete(IndName+"Smbl1");
ObjectDelete(IndName+"Line2");
ObjectDelete(IndName+"Smbl2");
ObjectDelete(IndName+"Line3");
ObjectDelete(IndName+"Smbl3");
ObjectDelete(IndName+"Line4");
ObjectDelete(IndName+"Smbl4");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator reset function |
//+------------------------------------------------------------------+
int Reset()
{
int win_idx=WindowFind(ShortName);
// SetSmblLabel(IndName+"Line",win_idx,"_",24,1,50,0,Color);
// SetSmblLabel(IndName+"Smbl",win_idx,Smbl,10,1,3,32,Black);
SetSmblLabel(IndName+"Line1",win_idx,"_",24,1,50,0,Color1);
SetSmblLabel(IndName+"Smbl1",win_idx,Smbl1,10,1,3,32,Black);
SetSmblLabel(IndName+"Line2",win_idx,"_",24,1,50,16,Color2);
SetSmblLabel(IndName+"Smbl2",win_idx,Smbl2,10,1,3,48,Black);
SetSmblLabel(IndName+"Line3",win_idx,"_",24,1,50,32,Color3);
SetSmblLabel(IndName+"Smbl3",win_idx,Smbl3,10,1,3,64,Black);
SetSmblLabel(IndName+"Line4",win_idx,"_",24,1,50,48,Color4);
SetSmblLabel(IndName+"Smbl4",win_idx,Smbl4,10,1,3,80,Black);
pb=0;
SumB1 = 0.0;
SumS1 = 0.0;
SumB2 = 0.0;
SumS2 = 0.0;
SumB3 = 0.0;
SumS3 = 0.0;
SumB4 = 0.0;
SumS4 = 0.0;
IsBase= false;
RecBP = 1.0/BP;
int ImBars=iBars(Smbl1,0);
FImTime1=iTime(Smbl1,0,ImBars-1);
ImBars=iBars(Smbl2,0);
FImTime2=iTime(Smbl2,0,ImBars-1);
ImBars=iBars(Smbl3,0);
FImTime3=iTime(Smbl3,0,ImBars-1);
ImBars=iBars(Smbl4,0);
FImTime4=iTime(Smbl4,0,ImBars-1);
PreBars = 0;
BarTime = 0;
return(Depth);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int pos;
int IndTime;
if(Bars==PreBars)
{
// Buf[0] = (iClose(Smbl,0,iBarShift(Smbl,0,Time[0]))-B)*S;
Buf1[0] = (iClose(Smbl1,0,iBarShift(Smbl1,0,Time[0]))-B1)*S1;
Buf2[0] = (iClose(Smbl2,0,iBarShift(Smbl2,0,Time[0]))-B2)*S2;
Buf3[0] = (iClose(Smbl3,0,iBarShift(Smbl3,0,Time[0]))-B3)*S3;
Buf4[0] = (iClose(Smbl4,0,iBarShift(Smbl4,0,Time[0]))-B4)*S4;
return(0);
}
if(Bars-PreBars==1 && BarTime==Time[1]) StartPos=1;
else StartPos=Reset();
PreBars= Bars;
BarTime=Time[0];
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);
if(counted_bars > 0) counted_bars--;
StartPos = Bars - counted_bars;
if(counted_bars==0) StartPos--;
for(pos=StartPos;pos>0;pos--)
{
IndTime=Time[pos];
// GetSmblData(SmbFImTimel,FImTime,IndTime,pb,BBuf,SBuf,SumB,SumS,P);
GetSmblData(Smbl1,FImTime1,IndTime,pb,BBuf1,SBuf1,SumB1,SumS1,P1);
GetSmblData(Smbl2,FImTime2,IndTime,pb,BBuf2,SBuf2,SumB2,SumS2,P2);
GetSmblData(Smbl3,FImTime3,IndTime,pb,BBuf3,SBuf3,SumB3,SumS3,P3);
GetSmblData(Smbl4,FImTime4,IndTime,pb,BBuf4,SBuf4,SumB4,SumS4,P4);
pb++;
if(pb>=BP)
{
pb=0;
IsBase=true;
}
if(IsBase)
{
// GetSmblBS(BBuf,SBuf,SumB,SumS,B,S);
GetSmblBS(BBuf1,SBuf1,SumB1,SumS1,B1,S1);
Buf1[pos]=(P1-B1)*S1;
GetSmblBS(BBuf2,SBuf2,SumB2,SumS2,B2,S2);
// Buf2[pos] = (B2-C2)*S2;
Buf2[pos]=(P2-B2)*S2;
GetSmblBS(BBuf3,SBuf3,SumB3,SumS3,B3,S3);
Buf3[pos]=(P3-B3)*S3;
GetSmblBS(BBuf4,SBuf4,SumB4,SumS4,B4,S4);
Buf4[pos]=(P4-B4)*S4;
} else {
Buf1[pos] = 0.0;
Buf2[pos] = 0.0;
Buf3[pos] = 0.0;
Buf4[pos] = 0.0;
}
} // pos=StartPos;pos>0;pos--)
return(0);
}
//+------------------------------------------------------------------+
void GetSmblData(string Symb,int fFImTime,int fIndTime,int fpb,double &fBBuf[],double &fSBuf[],double &fSumB,double &fSumS,double &fPrice)
{
if(fIndTime<fFImTime) return;
int shift=iBarShift(Symb,0,fIndTime);
// fPrice = iClose(Symb,0,shift);
double fHigh= iHigh(Symb,0,shift);
double fLow = iLow(Symb,0,shift);
fPrice=0.5*(fHigh+fLow);
double fRange=fHigh-fLow;
fBBuf[fpb] = fPrice;
fSBuf[fpb] = fRange;
fSumB += fPrice;
fSumS += fRange;
return;
}
//+------------------------------------------------------------------+
void GetSmblBS(double &fBBuf[],double &fSBuf[],double &fSumB,double &fSumS,double &fBase,double &fScale)
{
fBase=fSumB*RecBP;
if(fSumS!=0) fScale=BP/fSumS;
fSumB -= fBBuf[pb];
fSumS -= fSBuf[pb];
return;
}
//+------------------------------------------------------------------+
void SetSmblLabel(string LabelName,int Wnd,string Text,int Size,int Corner,int X,int Y,color Color)
{
ObjectCreate(LabelName,OBJ_LABEL,Wnd,0,0);
ObjectSet(LabelName,OBJPROP_CORNER,Corner);
ObjectSet(LabelName,OBJPROP_XDISTANCE,X);
ObjectSet(LabelName,OBJPROP_YDISTANCE,Y);
ObjectSetText(LabelName,Text,Size,"Rockwell Condensed",Color);
return;
}
//+------------------------------------------------------------------+
Comments