Price Data Components
0
Views
0
Downloads
0
Favorites
Rj_HSlice_1_1
//+------------------------------------------------------------------+
//| Rj_HSlice 1.1.mq4 |
//| Copyright © 2011, RJ Rjabkov Aleksandr |
//| rj-a@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, RJ Rjabkov Aleksandr"
#property link "rj-a@mail.ru"
#property indicator_chart_window
extern int DepthCalcDay = 30;
extern double UpdateTime = 1;
extern int CalcPeriod = 1;
extern double PercentDiscrep = 0.2;
extern bool ShowLevelsOn = true;
extern bool ShowTurningOn = true;
extern bool ShowContractOn = true;
extern bool BackgroundLevelOn = true;
extern color ColorLine = Aqua;
double lBuy[];
double lSell[];
double ValueCall[][2],ValuePut[][2];
static datetime LastTime=0;
static datetime StartTime=1;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
for(int i=0; i<4000; i++)
{
ObjectDelete("vhb "+i);
ObjectDelete("V "+i);
ObjectDelete("H "+i);
}
Comment("");
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
if(LastTime<StartTime)
{
int i,j,MaxVolume,EndTime;
color ColLine;
int TimeVisiblBar=WindowBarsPerChart()-WindowFirstVisibleBar();
double MaxPrice = iHigh(NULL, PERIOD_D1, 0);
double MinPrice = iLow(NULL, PERIOD_D1, 0);
for(j=DepthCalcDay; j>=0; j--)
{
MaxPrice = MathMax(MaxPrice, iHigh(NULL, PERIOD_D1, j));
MinPrice = MathMin(MinPrice, iLow(NULL, PERIOD_D1, j));
}
int Range=MathRound((MaxPrice-MinPrice)/Point);
ArrayResize(lBuy,Range+1);
ArrayInitialize(lBuy,0.0);
ArrayResize(lSell,Range+1);
ArrayInitialize(lSell,0.0);
string DataComment="";
switch(CalcPeriod)
{
case 1: DataComment="ìèíóòíûé"; break;
case 5: DataComment="ïÿòü ìèíóò"; break;
case 15: DataComment="ïÿòíàäöàòü ìèíóò"; break;
case 30: DataComment="òðèäöàòü ìèíóò"; break;
case 60: DataComment="÷àñîâîé"; break;
case 240: DataComment="÷åòûðå ÷àñà"; break;
case 1440: DataComment="äíåâíîé"; break;
case 10080: DataComment="íåäåëüíûé"; break;
case 43200: DataComment="ìåñÿ÷íûé"; break;
default : DataComment="òåêóùèé"; break;
}
Comment("\n Ïåðèîä ðàñ÷¸òà äàííûõ: "+DataComment);
if(CalcPeriod>1 && CalcPeriod<5) {CalcPeriod=5; DataComment="ïÿòü ìèíóò";}
if(CalcPeriod>5 && CalcPeriod<15) {CalcPeriod=15; DataComment="ïÿòíàäöàòü ìèíóò";}
if(CalcPeriod>15 && CalcPeriod<30) {CalcPeriod=30; DataComment="òðèäöàòü ìèíóò";}
if(CalcPeriod>30 && CalcPeriod<60) {CalcPeriod=60; DataComment="÷àñîâîé";}
if(CalcPeriod>60 && CalcPeriod<240) {CalcPeriod=240; DataComment="÷åòûðå ÷àñà";}
if(CalcPeriod>240 && CalcPeriod<1440) {CalcPeriod=1440; DataComment="äíåâíîé";}
if(CalcPeriod>1440 && CalcPeriod<10080) {CalcPeriod=10080; DataComment="íåäåëüíûé";}
if(CalcPeriod>10080 && CalcPeriod<43200) {CalcPeriod=43200; DataComment="ìåñÿ÷íûé";}
if(CalcPeriod>43200) {CalcPeriod=43200; DataComment="ìåñÿ÷íûé";}
for(i=0; i<=Range; i++)
{
lBuy[i] = iCustom(NULL, CalcPeriod, "Rj_Volume", DepthCalcDay, 0, i);
lSell[i] = iCustom(NULL, CalcPeriod, "Rj_Volume", DepthCalcDay, 1, i);
}
if(MathRound(lBuy[ArrayMaximum(lBuy)])>=MathRound(lSell[ArrayMaximum(lSell)])) MaxVolume=MathRound(lBuy[ArrayMaximum(lBuy)]);
else MaxVolume=MathRound(lSell[ArrayMaximum(lSell)]);
if(TimeVisiblBar<=2) TimeVisiblBar=50;
for(i=0; i<=4000; i++)
{
ObjectDelete("vhb "+i);
ObjectDelete("V "+i);
ObjectDelete("H "+i);
}
if(ShowLevelsOn)
{
for(i=0; i<=Range; i++)
{
if(BackgroundLevelOn)
{
if(lBuy[i]>lSell[i]) ColLine=C'64,136,50';
if(lBuy[i]<lSell[i]) ColLine=C'218,118,125';
if(lBuy[i]==lSell[i]) ColLine=Aqua;
ObjectCreate("vhb "+i,OBJ_RECTANGLE,0,TimeStart(),MinPrice+i*Point,iTime(NULL,PERIOD_D1,DepthCalcDay),MinPrice+(i+1)*Point);
ObjectSet("vhb "+i,OBJPROP_STYLE,DRAW_HISTOGRAM);
ObjectSet("vhb "+i,OBJPROP_COLOR,ColLine);
ObjectSet("vhb "+i,OBJPROP_BACK,true);
}
if(!BackgroundLevelOn)
{
if(lBuy[i]>lSell[i])
{
EndTime= TimeStart()-(TimeVisiblBar-1)*Period()*60;
ColLine=C'64,136,50';
}
if(lBuy[i]<lSell[i])
{
EndTime= TimeStart()-(TimeVisiblBar-1)*Period()*60;
ColLine=C'218,118,125';
}
if(lBuy[i]==lSell[i])
{
EndTime= TimeStart()-(TimeVisiblBar-1)*Period()*60;
ColLine=Aqua;
}
ObjectCreate("vhb "+i,OBJ_RECTANGLE,0,TimeStart(),MinPrice+i*Point,EndTime,MinPrice+(i+1)*Point);
ObjectSet("vhb "+i,OBJPROP_STYLE,DRAW_HISTOGRAM);
ObjectSet("vhb "+i,OBJPROP_COLOR,ColLine);
ObjectSet("vhb "+i,OBJPROP_BACK,true);
}
}
}
InstallVolume(lBuy,lSell,MinPrice,TimeVisiblBar,ValueCall,ValuePut);
CalcTurning(ValueCall,ValuePut);
StartTime=MathRound(TimeCurrent()+UpdateTime*60);
}
LastTime=TimeCurrent();
return(0);
}
//+------------------------------------------------------------------+
datetime TimeStart()
{
int Indention=Time[0]+(WindowBarsPerChart()-WindowFirstVisibleBar())*Period()*60;
return(Indention);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void InstallVolume(double &ArrBuy[],double &ArrSell[],double pos,int TimePos,double &ArrCall[][],double &ArrPut[][])
{
int shift,j,indexCall=0,indexPut=0,inc;
double DifBuy[],DifSell[],exit;
ArrayResize(DifBuy,ArraySize(ArrBuy)+1);
ArrayInitialize(DifBuy,0.0);
ArrayResize(DifSell,ArraySize(ArrBuy)+1);
ArrayInitialize(DifSell,0.0);
ArrayResize(ArrCall,ArraySize(ArrBuy)+1);
ArrayInitialize(ArrCall,0.0);
ArrayResize(ArrPut,ArraySize(ArrBuy)+1);
ArrayInitialize(ArrPut,0.0);
if(Digits==5) inc=10; else inc=100;
for(shift=0; shift<ArraySize(ArrBuy); shift++)
{
if(ArrBuy[shift]>ArrSell[shift]) DifBuy[shift]=MathRound((ArrBuy[shift]-ArrSell[shift])*inc);
if(ArrBuy[shift]<ArrSell[shift]) DifSell[shift]=MathRound((ArrSell[shift]-ArrBuy[shift])*inc);
}
for(shift=1; shift<ArraySize(ArrBuy); shift++)
{
double Value=0.0;
if(DifBuy[shift-1]!=0.0 && DifBuy[shift]==0.0)
{
j=shift-1;
while(DifBuy[j]!=0.0)
{
Value+=DifBuy[j];
j--;
}
if(ShowTurningOn)
{
ArrCall[indexCall][0]=Value;
ArrCall[indexCall][1]=pos+(shift+j)*Point/2;
}
if(ShowContractOn)
{
exit=pos+(shift+j+4)*Point/2;
ObjectCreate("V "+shift,OBJ_TEXT,0,TimeStart()-((TimePos-6)*Period()*60),exit);
ObjectSetText("V "+shift,DoubleToStr(Value,0),8,"Tahoma",GreenYellow);
}
indexCall++;
}
if(DifSell[shift-1]!=0.0 && DifSell[shift]==0.0)
{
j=shift-1;
while(DifSell[j]!=0.0)
{
Value+=DifSell[j];
j--;
}
if(ShowTurningOn)
{
ArrPut[indexPut][0]=Value;
ArrPut[indexPut][1]=pos+(shift+j)*Point/2;
}
if(ShowContractOn)
{
exit=pos+(shift+j+4)*Point/2;
ObjectCreate("V "+shift,OBJ_TEXT,0,TimeStart()-((TimePos-15)*Period()*60),exit);
ObjectSetText("V "+shift,DoubleToStr(Value,0),8,"Tahoma",Maroon);
}
indexPut++;
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalcTurning(double &ArrCall[][],double &ArrPut[][])
{
int index;
int count=ArraySize(ArrPut);
double ratio,max,min,coordinat;
for(index=1; index<count; index++)
{
if(ArrCall[index+1][0]==0.0 && ArrPut[index+1][0]==0.0)
{
return;
} else {
if(ArrCall[index][1]<ArrPut[index][1])
{
max=MathMax(ArrCall[index][0], ArrPut[index][0]);
min=MathMin(ArrCall[index][0], ArrPut[index][0]);
ratio=max*PercentDiscrep;
if(max-min<ratio)
{
coordinat=MathRound((ArrCall[index][1]+ArrPut[index][1])/Point/2)*Point;
InstallTurning(coordinat,index);
}
max=MathMax(ArrCall[index][0], ArrPut[index-1][0]);
min=MathMin(ArrCall[index][0], ArrPut[index-1][0]);
ratio=max*PercentDiscrep;
if(max-min<ratio)
{
coordinat=MathRound((ArrCall[index][1]+ArrPut[index-1][1])/Point/2)*Point;
InstallTurning(coordinat,index);
}
}
if(ArrCall[index][1]>ArrPut[index][1])
{
max=MathMax(ArrCall[index][0], ArrPut[index][0]);
min=MathMin(ArrCall[index][0], ArrPut[index][0]);
ratio=max*PercentDiscrep;
if(max-min<ratio)
{
coordinat=MathRound((ArrCall[index][1]+ArrPut[index][1])/Point/2)*Point;
InstallTurning(coordinat,index);
}
max=MathMax(ArrCall[index][0], ArrPut[index+1][0]);
min=MathMin(ArrCall[index][0], ArrPut[index+1][0]);
ratio=max*PercentDiscrep;
if(max-min<ratio)
{
coordinat=MathRound((ArrCall[index][1]+ArrPut[index+1][1])/Point/2)*Point;
InstallTurning(coordinat,index);
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void InstallTurning(double coord,int index)
{
if(ShowTurningOn)
{
ObjectCreate("H "+index,OBJ_HLINE,0,0,0,0,0);
ObjectSet("H "+index,OBJPROP_PRICE1,coord);
ObjectSet("H "+index,OBJPROP_COLOR,ColorLine);
ObjectSet("H "+index,OBJPROP_WIDTH,2);
ObjectSet("H "+index,OBJPROP_BACK,false);
}
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---