//+-------------------------------------------------------------------------------------+
//| MorningFlat_V3.mq4 |
//| Scriptong |
//| |
//+-------------------------------------------------------------------------------------+
#property copyright "Scriptong"
#property link ""
// Âî âòîðîé âåðñèè äîáàâëåíî îòîáðàæåíèå øèðèíû êàíàëà
// Â òðåòüåé âåðñèè äîáàâëåíà âîçìîæíîñòü óêàçàíèÿ ìèíóò
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Turquoise
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 Silver
extern int StartHour=0;
extern int StartMinute=15;
extern int EndHour=8;
extern int EndMinute=45;
extern double TargetLevel=161.8;
extern color UpColor = Turquoise;
extern color DnColor = Red;
extern color TargetUpColor = Gold;
extern color TargetDnColor = Silver;
//---- buffers
double Up[];
double Down[];
double TargetUp[];
double TargetDn[];
bool Activate=False;
datetime LastDay;
//+-------------------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+-------------------------------------------------------------------------------------+
int init()
{
//---- indicators
if(Period()>PERIOD_H1)
{
Comment("Èíäèêàòîð ðàáîòàåò íà òàéìôðåéìàõ ìåíüøå H4!");
return(0);
}
if(StartHour<0 || EndHour<0 || StartHour>23 || EndHour>23 ||
StartHour>EndHour || (StartHour==EndHour && StartMinute>=EndMinute))
{
Comment("Çíà÷åíèÿ StartHour è EndHour äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è ",
"StartHour < EndHour.");
return(0);
}
if(StartMinute<0 || EndMinute<0 || StartMinute>59 || EndMinute>59)
{
Comment("Çíà÷åíèÿ StartHour è EndHour äîëæíû ëåæàòü â äèàïàçîíå îò 0 äî 24 è ",
"StartHour < EndHour.");
return(0);
}
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Up);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Down);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,TargetUp);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,TargetDn);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
Activate=True;
//----
return(0);
}
//+-------------------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
// Óäàëåíèå îáúåêòîâ-öåíîâûõ ìåòîê
for(int i=ObjectsTotal()-1; i>=0; i--)
{
string Name=ObjectName(i);
if(StringSubstr(Name,0,3)=="Lab")
ObjectDelete(Name);
}
Comment("");
//----
return(0);
}
//+-------------------------------------------------------------------------------------+
//| Öåíîâàÿ ìåòêà ñî çíà÷åíèåì óðîâíÿ |
//+-------------------------------------------------------------------------------------+
void DrawLabel(datetime TimeL,double Price,bool Upper,color Col,int Code)
{
if(Upper)
string Name="Lab"+DoubleToStr(TimeL,0)+"U";
else
Name="Lab"+DoubleToStr(TimeL,0)+"D";
if(ObjectCreate(Name,OBJ_ARROW,0,TimeL,Price))
{
ObjectSet(Name,OBJPROP_ARROWCODE,Code);
ObjectSet(Name,OBJPROP_COLOR,Col);
}
}
//+-------------------------------------------------------------------------------------+
//| Ïîäïèñü øèðèíû êàíàëà |
//+-------------------------------------------------------------------------------------+
void DrawText(datetime TimeL,double Price,string St,color Col)
{
string Name="LabWidth"+DoubleToStr(TimeL,0);
if(ObjectCreate(Name,OBJ_TEXT,0,TimeL,Price))
ObjectSetText(Name,St,10,"Arial",Col);
}
//+-------------------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+-------------------------------------------------------------------------------------+
int start()
{
//----
if(!Activate) return(0);
LastDay=0;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
if(counted_bars==0) limit--;
for(int i=limit; i>=0; i--)
if(TimeHour(Time[i])>EndHour ||
(TimeMinute(Time[i])>EndMinute && TimeHour(Time[i])==EndHour))
{
datetime BeginDay=iTime(Symbol(),PERIOD_D1,// Ðàñ÷åò âðåìåíè íà÷àëà ñóòîê
iBarShift(Symbol(),PERIOD_D1,Time[i]));
datetime NextDay=BeginDay+86400; // Ðàñ÷åò âðåìåíè íà÷àëà ñëåäóþùèõ ñóòîê
if(LastDay>=BeginDay) // Åñëè â ýòîò äåíü óæå ðèñîâàëè óðîâíè, òî
continue; // ïðîäîëæàåì îñíîâíîé öèêë
// Áàð, ñîîòâåòñâóþùèé íà÷àëó ñóòîê ïëþñ ñìåùåíèå â ÷àñàõ è ìèíóòàõ
int StartBar=iBarShift(Symbol(),0,BeginDay+StartHour*3600+StartMinute*60);
// Áàð, ñîîòâåòñòâóþùèé ïîñëåäíåìó áàðó "óòðåííåãî ôëýòà"
int FinishBar=iBarShift(Symbol(),0,BeginDay+EndHour*3600+EndMinute*60)+1;
int ind1=iLowest(Symbol(),0,MODE_LOW,StartBar-FinishBar+1,FinishBar);
int ind2=iHighest(Symbol(),0,MODE_HIGH,StartBar-FinishBar+1,FinishBar);
if(ind1>-1 && ind2>-1)
{
double LowV=Low[ind1]; // Íèæíÿÿ ãðàíèöà êàíàëà
double HighV=High[ind2]; // Âåðõíÿÿ ãðàíèöà êàíàëà
double TargetU=(HighV-LowV)*(TargetLevel-100)/100+HighV; // Âåðõíÿÿ öåëü
double TargetD=LowV-(HighV-LowV)*(TargetLevel-100)/100; // Íèæíÿÿ öåëü
// Ðèñóåòñÿ êàíàë "óòðåííåãî ôëýòà"
for(int j=StartBar; j>=FinishBar; j--)
{
Up[j]=HighV;
Down[j]=LowV;
}
// -----------------------
// Îæèäàåìûå öåëè ïðè ïðîáîå ôëýòà
for(j=FinishBar; j>=0; j--)
{
if(!(Time[j]<NextDay)) break;
TargetUp[j] = TargetU;
TargetDn[j] = TargetD;
}
// -------------------
datetime TB=Time[iBarShift(Symbol(),0,BeginDay+StartHour*3600+
StartMinute*60)];
DrawLabel(TB,HighV,True,UpColor,5); // Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó êàíàëà
DrawLabel(TB,LowV,False,DnColor,5); // Ðèñóåì íèæíþþ öåíîâóþ ìåòêó êàíàëà
// Ðèñóåì âåðõíþþ öåíîâóþ ìåòêó öåëè
DrawLabel(Time[FinishBar],TargetU,True,TargetUpColor,5);
// Ðèñóåì íèæíþþ öåíîâóþ ìåòêó öåëè
DrawLabel(Time[FinishBar],TargetD,False,TargetDnColor,5);
DrawText((Time[FinishBar]-TB)/2+TB,HighV,// Îòîáðàæåíèå øèðèíû êàíàëà
DoubleToStr(MathRound((HighV-LowV)/Point),0),Red);
LastDay=BeginDay; // Îòìå÷àåì, ÷òî â ýòîò äåíü óðîâíè óæå áûëè íàðèñîâàíû
}
}
WindowRedraw();
//----
return(0);
}
//+------------------------------------------------------------------+
Comments