0
Views
0
Downloads
0
Favorites
DailySize
//+------------------------------------------------------------------+
//| DailySize.mq5 |
//| Tapochun |
//| https://login.mql5.com/ru/users/tapochun |
//+------------------------------------------------------------------+
#property copyright "Tapochun"
#property link "https://login.mql5.com/ru/users/tapochun"
#property version "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_plots 1
#property indicator_buffers 1
//---
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 clrRed
#property indicator_label1 "DailySize"
//+------------------------------------------------------------------+
//| Ãëîáàëüíûå ïåðåìåííûå |
//+------------------------------------------------------------------+
double bufRange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Âûïîëíÿåì ïðîâåðêó äîïóñòèìîãî ÒÔ
bool answer=CheckTimeframe();
if( !answer ) return( INIT_PARAMETERS_INCORRECT );
//--- Ïðèñâàèâàåì èíäåêñ èíäèêàòîðíîìó áóôåðó
SetIndexBuffer(0,bufRange);
//--- Óñòàíàâëèâàåì òî÷íîñòü çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- Óñòàíàâëèâàåì íà÷àëüíûå çíà÷åíèÿ èíäèêàòîðíîãî áóôåðà
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---
return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- Åñëè íåò ïðîñ÷èòàííûõ äàííûõ - âûõîäèì
if( rates_total <= 0 ) return( 0 );
//---
static int dNum; // Íîìåð ïðîâåðÿåìîãî äíÿ
static double dHigh = 0.0; // Ìàêñèìóì ïðîâåðÿåìîãî äíÿ
static double dLow = DBL_MAX;// Ìèíèìóì ïðîâåðÿåìîãî äíÿ
//---
if(prev_calculated!=0) // Åñëè íå ïåðâûé ðàñ÷åò
{
//--- Ðàññ÷èòûâàåì èíäèêàòîð íà ïåðâîé ñâå÷å
Calculation(rates_total-1,dNum,dHigh,dLow,rates_total,time,high,low);
}
else // Åñëè ïåðâûé ðàñ÷åò èíäèêàòîðà
{
//--- Èíèöèàëèçèðóåì èíäèêàòîðíûé áóôåð íà÷àëüíûìè çíà÷åíèÿìè
ArrayInitialize(bufRange,0.0);
//--- Îïðåäåëÿåì íîìåð áàðà ïåðâîãî ïîëíîñòüþ äîñòóïíîãî äíÿ
int firstBar = GetFirstBar( time, rates_total, dNum );
if( firstBar == 0 ) return( 0 );
//--- Ðàññ÷èòûâàåì èíäèêàòîð ñ áàðà firstBar
Calculation(firstBar,dNum,dHigh,dLow,rates_total,time,high,low);
}
//---
return( rates_total );
}
//+------------------------------------------------------------------+
//| Ïðîâåðêà äîïóñòèìîñòè ðàçìåðà ÒÔ |
//+------------------------------------------------------------------+
bool CheckTimeframe()
{
if(_Period>PERIOD_D1) // Åñëè òåêóùèé ÒÔ áîëüøå Ä1
{
Print(__FUNCTION__,": Èíäèêàòîð ïðåäíàçíà÷åí äëÿ çàïóñêà íà ÒÔ äî D1. Óìåíüøèòå ÒÔ!");
return(false); // Âûõîäèì ñ îøèáêîé
}
else return(true); // Åñëè äîïóñòèìûé ÒÔ - âîçâðàùàåì èñòèíó
}
//+------------------------------------------------------------------+
//| Ïîëó÷àåì íîìåð ïåðâîãî áàðà ïîëíîñòüþ äîñòóïíîãî äíÿ |
//+------------------------------------------------------------------+
int GetFirstBar(const datetime &time[], // Ìàññèâ âðåìåí îòêðûòèÿ áàðîâ ïî òåêóùåìó ÒÔ
const int rates_total, // Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ
int &dayNum) // Íîìåð ïðîâåðÿåìîãî äíÿ (out)
{
int prev = GetDayNumber(time[ 0 ] ); // Íîìåð äíÿ íà ïðåäûäóùåì áàðå
int curr; // Íîìåð äíÿ íà òåêóùåì áàðå
for(int i=1; i<rates_total; i++) // Öèêë ïî ïðîñ÷èòàííûõ áàðàì
{
curr=GetDayNumber(time[i]); // Îïðåäåëÿåì íîìåð äíÿ íà òåêóùåì áàðå
if(curr==prev) continue; // Åñëè íîìåðà ñîâïàäàþþò - ïåðåõîäèì ê ñëåä. áàðó
else // Åñëè íîìåðà íå ñîâïàäàþò
{
dayNum = curr; // Çàïîìèíàåì íîìåð ïåðâîãî ïðîâåðÿåìîãî äíÿ
return(i ); // Âîçâðàùàåì íîìåð áàðà ïåðâîãî ïîëíîãî äíÿ
}
}
//---
Print(__FUNCTION__,": Îæèäàåì áîëüøå äàííûõ..");
return(0); // Âîçâðàùàåì 0
}
//+------------------------------------------------------------------+
//| Îïðåäåëÿåì íîìåð äíÿ ïî âðåìåíè áàðà |
//+------------------------------------------------------------------+
int GetDayNumber(const datetime time) // Âðåìÿ áàðà
{
MqlDateTime tStr; // Ñòðóêòóðà âðåìåíè
TimeToStruct( time,tStr ); // Âðåìÿ â ñòðóêòóðó
return(tStr.day); // Âîçâðàùàåì íîìåð òåêóùåãî äíÿ
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ðàñ÷åòà èíäèêàòîðà |
//+------------------------------------------------------------------+
void Calculation(const int firstBar, // Íîìåð ïåðâîãî áàðà äëÿ ðàñ÷åòà
int &dNum, // Íîìåð ïðîâåðÿåìîãî äíÿ (out)
double &dHigh, // Ìàêñèìóì ïðîâåðÿåìîãî äíÿ (out)
double &dLow, // Ìèíèìóì ïðîâåðÿåìîãî äíÿ (out)
const int rates_total, // Êîëè÷åñòâî ïðîñ÷èòàííûõ áàðîâ
const datetime &time[], // Ìàññèâ âðåìåí îòêðûòèÿ ïðîñ÷èòàííûõ áàðîâ
const double &high[], // Ìàññèâ ìàêñèìóìîâ ïðîñ÷èòàííûõ áàðîâ
const double &low[] // Ìàññèâ ìèíèìóìîâ ïðîñ÷èòàííûõ áàðîâ
)
{
int iNum; // Íîìåð äíÿ íà i áàðå
for(int i = firstBar; i<rates_total; i++) // Öèêë ñôîðìèðîâàííûì áàðàì
{
iNum = GetDayNumber( time[ i ] ); // Ïîëó÷àåì íîìåð äíÿ íà i áàðå
if( dNum != iNum ) // Åñëè ñ÷èòàåòñÿ íîâûé äåíü
{
//--- Ñáðàñûâàåì ïàðàìåòðû äíÿ
dNum = iNum; // Çàïîìèíàåì íîâûé íîìåð ïðîâåðÿåìîãî äíÿ
dHigh = high[ i ]; // Çàïîìèíàåì ìàêñèìóì i ñâå÷è
dLow= low[ i ]; // Çàïîìèíàåì ìèíèìóì i ñâå÷è
}
else // Åñëè ñ÷èòàåòñÿ òåêóùèé äåíü
{
//--- Ïðîâåðÿåì îáðàçîâàíèå íîâîãî ìèíèìóìà/ìàêñèìóìà äíÿ
if(high[i]>dHigh) // Åñëè ìàêñèìóì íà i ñâå÷å áîëüøå ñîõðàíåííîãî
dHigh=high[i]; // Çàïîìèíàåì íîâîå çíà÷åíèå ìàêñèìóìà òåêóùåãî äíÿ
//---
if(low[i]<dLow) // Åñëè ìèíèìóì íà i ñâå÷å ìåíüøå ñîõðàíåííîãî
dLow=low[i]; // Çàïîìèíàåì íîâîå çíà÷åíèå ìèíèìóìà òåêóùåãî äíÿ
}
//--- Ðàññ÷èòûâàåì çíà÷åíèå èíäèêàòîðà - ðàçíîñòü ìàêñèìóìà è ìèíèìóìà òåêóùåãî äíÿ
bufRange[i]=MathRound(( dHigh-dLow)/_Point);
}
}
//+------------------------------------------------------------------+
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
---