//+------------------------------------------------------------------+ //| 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=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]) { EndTime= TimeStart()-(TimeVisiblBar-1)*Period()*60; ColLine=C'64,136,50'; } if(lBuy[i]ArrSell[shift]) DifBuy[shift]=MathRound((ArrBuy[shift]-ArrSell[shift])*inc); if(ArrBuy[shift]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